настройка дерева в winforms - PullRequest
0 голосов
/ 31 марта 2011

Возможно ли создать древовидное представление в визуальной студии, которое напоминает следующий рисунок:

Customized TreeView

ROOT, CHILD и Sub-Child, все три будут LinkLabels, ипри нажатии на них открывается новая форма.

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

Вы также можете попробовать встроить пользовательский элемент управления WPF в WinForm.Настройка WinForms не простая задача.В WPF вы можете сделать это намного проще.

1 голос
/ 31 марта 2011

Это не практично в Winforms, с каждым элементом управления связано собственное окно Windows.Окно является очень дорогим объектом операционной системы, создайте более 50 из них, и ваш пользовательский интерфейс заметно начнет перетаскиваться из-за количества накладных расходов, связанных с отрисовкой элементов управления.Вы очень быстро достигнете этого практического верхнего предела, вложив элементы управления, как вы собираетесь.

Вы можете настроить внешний вид TreeView, используя его свойство DrawMode и событие DrawNode.В статье библиотеки MSDN для TreeView.DrawNode есть достойный пример.Это также популярный тип компонентов в коллекциях сторонних поставщиков компонентов.Они добавляют много наворотов в свою версию.

1 голос
/ 31 марта 2011

Вы также можете активировать Горячее отслеживание для дерева и затем обрабатывать событие NodeMouseClick.

0 голосов
/ 31 марта 2011

Итак, людям это не нравится.

Ответ, однако, да, вы можете.

TreeView treeView1;

void Initialize_It() {
  treeView1 = new TreeView();
  treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect);
  TreeNode Root = treeView1.Nodes.Add("ROOT");
  TreeNode Child = Root.Nodes.Add("CHILD");
  TreeNode SubChild = Child.Nodes.Add("Sub-Child");
}

void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
  const string FORMAT = "{0} Node Selected. Call your Windows Form from here.";
  if (e.Node.Level == 0) {
    MessageBox.Show(string.Format(FORMAT, e.Node.Text), e.Node.Text);
  } else if (e.Node.Level == 1) {
    MessageBox.Show(string.Format(FORMAT, e.Node.Text), e.Node.Text);
  } else if (e.Node.Level == 2) {
    MessageBox.Show(string.Format(FORMAT, e.Node.Text), e.Node.Text);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...