Каков наилучший способ обработки элементов графического интерфейса для просмотра нескольких таблиц? - PullRequest
1 голос
/ 02 июня 2009

Я работаю над приложением, которое предоставляет пользователю разнообразные данные в зависимости от просматриваемого объекта. Все объекты имеют один и тот же интерфейс, только с расширенными свойствами, которые когда-то не различались.

Я ищу "лучший" способ отображения зависимого от типа элемента управления для пользователя. Я хотел бы использовать вкладки, но я застрял в .NET 2.0, и из того, что я могу собрать, единственный способ скрыть / показать вкладки - это удалить их и заново добавить. Это может быть лучшим способом, но это приводит к проблемам, связанным с миганием компонентов графического интерфейса, сохранением вкладок на активной вкладке при перезагрузке и т. Д.

Я мог бы создать собственные элементы управления для каждого из них и либо загружать их все, и при необходимости скрывать / показывать (что я делал в прошлом над проектами), либо распоряжаться ими и создавать их заново ...

Чтобы пояснить лучше всего, я бы сказал, что самый близкий баланс между элегантностью кода и эффективностью программы.

Ответы [ 3 ]

0 голосов
/ 02 июня 2009

Не могли бы вы просто создать панель для каждого объекта и иметь словарь, связывающий тип объекта и панель?

Вы можете просто попросить панель вывести на передний план, если они все одного размера, или установить все панели. Visible равными false, и просто установить ту, которая вам нужна.

0 голосов
/ 02 июня 2009

Я использовал DockPanel Suite для приложений, требующих нескольких вкладок. Это проект с открытым исходным кодом, поэтому вы можете изменить код, если хотите.

Однако в Suite есть много функций, если вы можете просто использовать вкладки.

0 голосов
/ 02 июня 2009

Я использовал и мне больше всего повезло, загрузив их все, а затем показывая / скрывая нужные.

Утилизация и повторное создание всего всегда делали вещи очень грязными.

Чтобы время загрузки не было ужасным, вы можете создать его экземпляр при первом использовании. Что-то вроде:

IView LoadView(Type dependantType)
{
  // get the view or create one
  IView view = GetView(dependantType);
  if (view == null)
  {
    view = InstantiateViewAndAddToForm(dependantType);
    AddView(view);
  }

  //
  // do some binding to your model or whatever here
  //

  // make the correct view visible
  foreach (IView v in Views)
    view.Visible = v == view;
}
...