Создание нескольких интерфейсов для формы - PullRequest
4 голосов
/ 04 августа 2011

У меня есть приложение, для которого я хочу иметь 2 дополнительных интерфейса: сенсорный и не сенсорный.

Я, очевидно, могу сделать 2 отдельные формы, но есть много базового кода, который нужно будет дублироватьв любое время есть изменение к нему.Все элементы управления одинаковы, они просто имеют разные размеры и позиции.Я думал о том, чтобы добавить 2 метода InitializeComponent, но тогда у меня не было бы возможности спроектировать оба интерфейса с Visual Studio.

Надеюсь, у кого-то есть идеи.

Ответы [ 3 ]

5 голосов
/ 04 августа 2011

Я думаю, что это будет один интерфейс с двумя реализациями, а затем вы вводите тот, который вы хотите в форму.

Быстрый пример:

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();
2 голосов
/ 04 августа 2011

Вам может быть интересно посмотреть на эти (и связанные с ними) вопросы: MVVM для winforms , более конкретно, материал, относящийся к WPF Application Framework (WAF) . Один из примеров имеет WinForms и пользовательский интерфейс WPF, использующие одну и ту же логику приложения. В вашем случае это будут просто два разных пользовательских интерфейса WinForms, использующих одну и ту же логику приложения.

Кроме того, рассматривали ли вы использование шаблонизатора (что-то вроде T4 ) для генерации обеих форм?

1 голос
/ 04 августа 2011

Если это winform, то вы можете добавить обработчик события для события 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...