c# - 为一个Form制作多个界面

标签 c# winforms forms interface

我有一个应用程序,我希望它有 2 个可选界面:触摸屏和非触摸屏。

我显然可以制作 2 个单独的表格,但是有很多底层代码必须在任何时候对其进行更改时进行复制。所有控件都是相同的,只是大小和位置不同。我正在考虑放入 2 个 InitializeComponent 方法,但我无法使用 visual studio 设计这两个界面。

希望其他人有任何想法。

最佳答案

我认为这将是一个具有两个实现的接口(interface),然后将您想要的一个注入(inject)到表单中。

一个简单的例子:

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;
  }
}

你会这样加载它:

  TouchScreen touchThis = new TouchScreen();
  ScreenForm form1 = new ScreenForm(touchThis);
  form1.Show();

  //or

  NonTouchScreen notTouchThis = new NonTouchScreen();
  ScreenForm form2 = new ScreenForm(notTouchThis);
  form2.Show();

关于c# - 为一个Form制作多个界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944719/

相关文章:

表单中的 JavaScript 变量

windows - 窗口向左无闪烁扩展(调整大小)

c# - 单线程单元与多线程单元

c# - 通过引用列名查找列索引?

c# - 如何在 Winforms 中获取 TreeNode 的层次结构索引

c# - 组合框.选定的值无法传递给查询

c# - 如何将字体添加到具有多个属性的标签?

c# - 解决 C# 中的 Resharper 错误

c# - c#中的不安全图像噪声去除(错误: Bitmap region is already locked)

c# - 注入(inject)到 azure 函数中的自定义类记录器不会写入控制台