我有一个应用程序,我希望有2个可选接口:触摸屏和非触摸屏。为表单创建多个接口
我明显可以做出2个独立的表单,但是有很多底层代码在它发生变化时必须重复。所有的控件都是一样的,它们只有不同的尺寸和位置。我正在考虑放入2个InitializeComponent方法,但后来我无法用Visual Studio设计这两个接口。
希望别人有什么想法。
我有一个应用程序,我希望有2个可选接口:触摸屏和非触摸屏。为表单创建多个接口
我明显可以做出2个独立的表单,但是有很多底层代码在它发生变化时必须重复。所有的控件都是一样的,它们只有不同的尺寸和位置。我正在考虑放入2个InitializeComponent方法,但后来我无法用Visual Studio设计这两个接口。
希望别人有什么想法。
我认为这将是一个接口与两个实现,然后你注入一个你想要的形式。
一个简单的例子:
public interface IScreen
{
void DoStuff();
}
public class TouchScreen : IScreen
{
public void DoStuff()
{ }
}
public class NonTouchScreen : IScreen
{
public void DoStuff()
{ }
}
public partial class ScreenForm : Form
{
IScreen _ScreenType;
public ScreenForm(IScreen screenType)
{
InitializeComponent();
_ScreenType = screenType;
}
}
而且你会因此加载它:如果这是一个winform
TouchScreen touchThis = new TouchScreen();
ScreenForm form1 = new ScreenForm(touchThis);
form1.Show();
//or
NonTouchScreen notTouchThis = new NonTouchScreen();
ScreenForm form2 = new ScreenForm(notTouchThis);
form2.Show();
,那么你可以添加Load事件的事件处理程序:
this.Load += new System.EventHandler(this.YourForm_Load);
...在那里,你可以检查这是否是触摸屏,然后安排位置,形状和大小在为这两种情况分开辅助方法。
private void YourForm_Load(object sender, System.EventArgs e)
{
if (IsTouchScreen)
{
ArrangeControlsForTouchScreen();
}
else
{
ArrangeControlsForPlainScreen();
}
}
如果这是在一个网页中,那么您可以在重写的Page.Load方法中做几乎相同的操作。
我想过这个选项,但是有没有一种方法可以用Visual Studio设计这两个接口? –
我发现我有更好的精度,当我这样做以编程方式。这是个人偏好,不过... 如果你想在VS中用鼠标做到这一点,有一个基本类/形式,它做了一切,然后从它派生出来放置按钮和其他用户界面元素。然后再次派生并为另一个版本创建第二个表单。然后,在运行时,实例化适合情况的表单类。 (我想有很多方法可以做你想做的事) – woohoo
您可能有兴趣查看此(及相关)问题:MVVM for winforms更具体的与WPF Application Framework (WAF)相关的内容。其中一个示例具有共享相同应用程序逻辑的WinForms和WPF UI。在你的情况下,它只是两个不同的WinForms UI共享相同的应用程序逻辑。
另外,你有没有考虑过使用模板引擎(如T4)来生成这两种形式?
它是一个Windows应用程序或Web应用程序? – R0MANARMY
Windows应用程序 –