Member 12230809 Ответов: 1

Привязать TreeView с комбобокс с#


у меня есть Treeview с
Узел
-Узел1
-Node1Child
-Узел2
-Node2Child

и ComboBox с данными
Combo1
Combo2

как заставить его работать если Node1Child нажата, то в поле со списком показать Node1Child и может быть изменена со спаренной значение Combo2?

Что я уже пробовал:

я ищу везде и не могу найти решение для C#

Graeme_Grant

Winform, Wpf, UWP? Что вы пробовали до сих пор? Поделитесь своим кодом.

Member 12230809

winform

 
            // 
            // treeView1
            // 
            this.treeView1.Location = new System.Drawing.Point(121, 24);
            this.treeView1.Name = "treeView1";
            treeNode1.Name = "Node2";
            treeNode1.Text = "Node2";
            treeNode2.Name = "Node1";
            treeNode2.Text = "Node1";
            treeNode3.Name = "Node1";
            treeNode3.Text = "Node1";
            treeNode4.Name = "Node0";
            treeNode4.Text = "List of Node";
            this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
            treeNode4});
            this.treeView1.Size = new System.Drawing.Size(147, 215);
            this.treeView1.TabIndex = 2;
            this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
            // 
            // comboBox1
            // 
            this.comboBox1.FormattingEnabled = true;
            this.comboBox1.Items.AddRange(new object[] {
            "list_c1",
            "list_c2",
            "list_c3"});
            this.comboBox1.Location = new System.Drawing.Point(5, 123);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Size = new System.Drawing.Size(110, 21);
            this.comboBox1.TabIndex = 3;
            this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);


im добавить данные treeview из текстового файла
if (data1 = = "1000") treeView1.Nodes[0].Узлы[0].Узлы[0].Текст = " Банан";
я пытаюсь сделать так, чтобы узел treeview можно было изменить с помощью comboBox

Graeme_Grant

У вас есть привязка к событиям, где находится код для обработчиков событий?

Member 12230809

 
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            var nodes = treeView1.Nodes;
            comboBox1.DisplayMember = "Text";
            comboBox1.DataSource = nodes;
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            var node = comboBox1.SelectedItem as TreeNode;
            if (node == null)
                return;

            treeView1.SelectedNode = node;
        }


этот код получает только корневой узел. и Combobox показывает только текст корневого узла, а не любое другое значение comboBox

Graeme_Grant

Что вы хотите, чтобы ComboBox должен был выбрать?

[Редактировать:] Древовидное представление имеет иерархическую структуру данных. Таким образом, ваш код работает только с первым слоем - то есть с корневым слоем.

1 Ответов

Рейтинг:
10

Graeme_Grant

То AfterSelect() событие срабатывает только для новых выборок и не срабатывает, если уже выбрано. Возможно, вы хотите запечатлеть событие click элемента управления TreeView вместо этого.

private void treeView1_Click(object sender, EventArgs e)
 {
   TreeViewHitTestInfo info = treeView1.HitTest(treeView1.PointToClient(Cursor.Position));
   if (info != null)
     MessageBox.Show(info.Node.Text);
 }


Редактировать:

Вот что я думаю, что вы пытаетесь сделать:
private void treeView1_Click(object sender, EventArgs e)
{
    TreeViewHitTestInfo info = treeView1.HitTest(treeView1.PointToClient(Cursor.Position));
    if (info != null)
    {
        comboBox1.DisplayMember = "Text";
        comboBox1.DataSource = info.Node.Nodes;
    }
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var node = comboBox1.SelectedItem as TreeNode;
    if (node == null)
        return;
    treeView1.SelectedNode = node;
    treeView1.Focus();
}