2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
1

Выбор в treeView элемента узла по имени

09.11.2012, 10:01. Показов 9227. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в treeview необходимо выбрать элемент узла дерева по имени этого элемента
пробывал через selectnode.name но там он просто устанавливает имя текущему выбраному узлу
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2012, 10:01
Ответы с готовыми решениями:

Выбор узла в TreeView
Друзья! Ситуация: на форме есть элемент управления treeview. Дерево заполняется из xml-файла....

Выбор элемента TreeView
Доброго времени суток. Создаю плейлист для плеера решил использовать treeview, раньше не работал с...

Программный выбор элемента TreeView
Приложение использует TreeView и ListView. Соответственно, в первом отображаются категории, во...

Отследить выбор родительского элемента в TreeView
Не подскажете как отследить если выбран родительский элемент в дереве, то действие, или на один...

13
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.11.2012, 10:30 2
Узел для начала надо найти:
C#
1
2
3
4
5
6
7
8
9
10
11
TreeNode FindNodeByName(string name)
{
    return FindNodeByName(treeView.TopNode, name);
}
 
TreeNode FindNodeByName(TreeNode root, string name)
{
   if (root == null) return null;
   if (root.Text == name) return root;
   return FindNodeByName(root.FirstNode, name) ?? FindNodeByName(root.NextNode, name);
}
А потом уже выделять:
C#
1
treeView.SelectedNode = FindNodeByName("mega node");
1
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
09.11.2012, 12:25  [ТС] 3
я знаю его расположение tv.nodes[i].nodes[j] как сказать чтобы он выбрал по Этим координатам

Добавлено через 15 минут
Сделал следующим образом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (int i = 0; i < tvTest.Nodes.Count; i++)
                {
                    bool b = false;
                    for (int j = 0; j < tvTest.Nodes[i].Nodes.Count; j++)
                    {
                        if (tvTest.Nodes[i].Nodes[j].Name == idTest)
                        {
                            tvTest.Nodes[i].Expand();
                            tvTest.SelectedNode=tvTest.Nodes[i].Nodes[j];
 
                            b = true;
                            break;
                        }
 
                    }
                    if (b) break;
                }
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.11.2012, 13:02 4
Цитата Сообщение от skemuze Посмотреть сообщение
я знаю его расположение tv.nodes[i].nodes[j] как сказать чтобы он выбрал по Этим координатам
Если вы знаете его расположение, то зачем там цикл?

Второй вопрос: алгоритм расчитан на поиск на два уровня вглубь - это специально так задумано?
Третий вопрос: а чем вам не понравился предложенный мной вариант? Академический интерес.
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
09.11.2012, 15:30  [ТС] 5
я попробовал ваш вариант не получилось, на два вглубь потому что у меня всего два уровня, ваш вариант не заработал так как при повторном обращении к дереву и получении его текущего выбранного элемента не выдает ошибку на отсутствие как таковых элементов
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.11.2012, 15:55 6
Цитата Сообщение от skemuze Посмотреть сообщение
не выдает ошибку на отсутствие как таковых элементов
Если узел не найден, то метод возвращает null.
Сделать проверку и вывести уведомление - это уже задача внешней системы, а не алгоритма поиска

Но за пояснение спасибо.
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
10.11.2012, 10:04  [ТС] 7
в том то и проблема что данный узел там есть, он берет искомый элемент из дерева
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
10.11.2012, 11:08 8
Что-то я не могу понять вашу проблему.
Ну попробуйте код в первом методе заменить на такой:
C#
1
2
3
4
TreeNode FindNodeByName(string name)
{
    return treeView.Nodes.Count > 0 ? FindNodeByName(treeView.Nodes[0], name) : null;
}
Возможно, ваша проблема заключается в использовании свойства TopNode (по поводу которого я тоже сомневался).
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
12.11.2012, 07:02  [ТС] 9
выдает ошибку ссылка на объект не указывает на экземпляр объекта
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
12.11.2012, 10:31 10
Цитата Сообщение от skemuze Посмотреть сообщение
выдает ошибку ссылка на объект не указывает на экземпляр объекта
В каком месте выдает-то?
Цитата Сообщение от kolorotur Посмотреть сообщение
Если узел не найден, то метод возвращает null.
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
12.11.2012, 14:23  [ТС] 11
после выбора элемента пытаюсь прочитать какой элемент выбран, пишет что selectnode=null но элемент есть в списке так как он для поиска берет ранее выбранный элемент
0
Эксперт .NET
17684 / 12870 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
12.11.2012, 14:51 12
Покажите весь ваш код с моим не рабочим вариантом, а то так и будем ходить вокруг да около.
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
13.11.2012, 09:27  [ТС] 13
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 private void updateDataTest()
        {
            string idTest = tvTest.SelectedNode.Name;
            string testIA = "";
            string testIB = "";
            string testIC = "";
            string testUA = "";
            string testUB = "";
            string testUC = "";
            string testUAB = "";
            string testUBC = "";
            string testUCA = "";
            string testCSIA = "";
            string testCSIB = "";
            string testCSIC = "";
            string testCSUA = "";
            string testCSUB = "";
            string testCSUC = "";
            string testCSUAB = "";
            string testCSUBC = "";
            string testCSUCA = "";
 
            for (int i = 0; i < countStepTest; i++)
            {
                testIA = testIA + dgvIA[i, 1].Value + ";";
                testIB = testIB + dgvIB[i, 1].Value + ";";
                testIC = testIC + dgvIC[i, 1].Value + ";";
                testUA = testUA + dgvUA[i, 1].Value + ";";
                testUB = testUB + dgvUB[i, 1].Value + ";";
                testUC = testUC + dgvUC[i, 1].Value + ";";
                testUAB = testUAB + dgvUAB[i, 1].Value + ";";
                testUBC = testUBC + dgvUBC[i, 1].Value + ";";
                testUCA = testUCA + dgvUCA[i, 1].Value + ";";
 
                testCSIA = testCSIA + dgvIA[i, 0].Value + ";";
                testCSIB = testCSIB + dgvIB[i, 0].Value + ";";
                testCSIC = testCSIC + dgvIC[i, 0].Value + ";";
                testCSUA = testCSUA + dgvUA[i, 0].Value + ";";
                testCSUB = testCSUB + dgvUB[i, 0].Value + ";";
                testCSUC = testCSUC + dgvUC[i, 0].Value + ";";
                testCSUAB = testCSUAB + dgvUAB[i, 0].Value + ";";
                testCSUBC = testCSUBC + dgvUBC[i, 0].Value + ";";
                testCSUCA = testCSUCA + dgvUCA[i, 0].Value + ";";
            }
            if (DataBase.updateAllDataTest(Convert.ToInt32(tvTest.SelectedNode.Name), tbOrder.Text, cbCustomer.Text, cbCS.Text, Convert.ToDateTime(groupBox2.Text), tbComment.Text,
                tbSN.Text, Convert.ToInt32(tbNomI.Text), cbManufacturer.Text, testIA, testIB, testIC, testUA, testUB, testUC, testUAB, testUBC, testUCA, testCSIA, testCSIB, testCSIC, testCSUA,
                testCSUB, testCSUC, testCSUAB, testCSUBC, testCSUCA, cbController.Text))
            {
                MessageBox.Show("Данные успешно внесены в БД", "Сохранение данных", MessageBoxButtons.OK);
                flagNewTest = false;               
                loadTvTest();
                //for (int i = 0; i < tvTest.Nodes.Count; i++)
                //{
                //    bool b = false;
                //    for (int j = 0; j < tvTest.Nodes[i].Nodes.Count; j++)
                //    {
                //        if (tvTest.Nodes[i].Nodes[j].Name == idTest)
                //        {
                //            tvTest.Nodes[i].Expand();
                //            tvTest.SelectedNode = tvTest.Nodes[i].Nodes[j];
 
                //            b = true;
                //            break;
                //        }
 
                //    }
                //    if (b) break;
                //}
                tvTest.SelectedNode = MyClass.FindNodeByName(tvTest, idTest);
                editTest();
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
private void editTest()
        {
            string order = "";
            string customer = "";
            string typecs = "";
            string nomI = "";
            string sn = "";
            string manufacturer = "";
            string controller = "";
            DateTime dt = new DateTime();
            string comment = "";
            string test_IA = "";
            string test_IB = "";
            string test_IC = "";
            string test_UA = "";
            string test_UB = "";
            string test_UC = "";
            string test_UAB = "";
            string test_UBC = "";
            string test_UCA = "";
            string testCS_IA = "";
            string testCS_IB = "";
            string testCS_IC = "";
            string testCS_UA = "";
            string testCS_UB = "";
            string testCS_UC = "";
            string testCS_UAB = "";
            string testCS_UBC = "";
            string testCS_UCA = "";
 
            saveAllToolStripMenuItem.Visible = true;
            toolStripSeparator1.Visible = true;
 
            tbOrder.Text = "";
            tbComment.Text = "";
            tbNomI.Text = "";
            tbSN.Text = "";
            cbController.Text = "";
            cbCS.Text = "";
            cbCustomer.Text = "";
            cbManufacturer.Text = "";
            ftnt();
            cbController.Items.Clear();
            cbCS.Items.Clear();
            cbCustomer.Items.Clear();
            cbManufacturer.Items.Clear();
            cbCustomer.Items.AddRange(DataBase.getCustomer());
            cbManufacturer.Items.AddRange(DataBase.getManufacture());
            cbCS.Items.AddRange(DataBase.getTypeCS());
            try
            {
                cbController.Items.AddRange(File.fieName());
            }
            catch { }
            DataBase.getTest(Convert.ToInt32(tvTest.SelectedNode.Name), ref order, ref customer, ref typecs, ref nomI, ref sn, ref manufacturer, ref controller, ref dt, ref comment,
                ref test_IA, ref test_IB, ref test_IC, ref test_UA, ref test_UB, ref test_UC, ref test_UAB, ref test_UBC, ref test_UCA, ref testCS_IA, ref testCS_IB, ref testCS_IC,
                ref testCS_UA, ref testCS_UB, ref testCS_UC, ref testCS_UAB, ref testCS_UBC, ref testCS_UCA);
            tbOrder.Text = order;
            tbComment.Text = comment;
            tbNomI.Text = nomI;
            tbSN.Text = sn;
            cbController.Text = controller;
            cbCS.Text = typecs;
            cbCustomer.Text = customer;
            cbManufacturer.Text = manufacturer;
            //groupBox2.Text = dt.Day + "." + dt.Month + "." + dt.Year + " " + dt.Hour + ":" + dt.Minute + ":" + dt.Second;
            groupBox2.Text = dt.Date.ToLongDateString() + " " + dt.TimeOfDay;
            string[] arrTest_IA = MyClass.splitStr(test_IA);
            string[] arrTest_IB = MyClass.splitStr(test_IB);
            string[] arrTest_IC = MyClass.splitStr(test_IC);
            string[] arrTest_UA = MyClass.splitStr(test_UA);
            string[] arrTest_UB = MyClass.splitStr(test_UB);
            string[] arrTest_UC = MyClass.splitStr(test_UC);
            string[] arrTest_UAB = MyClass.splitStr(test_UAB);
            string[] arrTest_UBC = MyClass.splitStr(test_UBC);
            string[] arrTest_UCA = MyClass.splitStr(test_UCA);
            string[] arrTestCS_IA = MyClass.splitStr(testCS_IA);
            string[] arrTestCS_IB = MyClass.splitStr(testCS_IB);
            string[] arrTestCS_IC = MyClass.splitStr(testCS_IC);
            string[] arrTestCS_UA = MyClass.splitStr(testCS_UA);
            string[] arrTestCS_UB = MyClass.splitStr(testCS_UB);
            string[] arrTestCS_UC = MyClass.splitStr(testCS_UC);
            string[] arrTestCS_UAB = MyClass.splitStr(testCS_UAB);
            string[] arrTestCS_UBC = MyClass.splitStr(testCS_UBC);
            string[] arrTestCS_UCA = MyClass.splitStr(testCS_UCA);
 
            for (int i = 0; i < countStepTest; i++)
            {
                if (arrTest_IA.Length >= i)
                    dgvIA[i, 1].Value = arrTest_IA[i];
                if (arrTest_IB.Length >= i)
                    dgvIB[i, 1].Value = arrTest_IB[i];
                if (arrTest_IC.Length >= i)
                    dgvIC[i, 1].Value = arrTest_IC[i];
 
                if (arrTest_UA.Length >= i)
                    dgvUA[i, 1].Value = arrTest_UA[i];
                if (arrTest_UB.Length >= i)
                    dgvUB[i, 1].Value = arrTest_UB[i];
                if (arrTest_UC.Length >= i)
                    dgvUC[i, 1].Value = arrTest_UC[i];
 
                if (arrTest_UAB.Length >= i)
                    dgvUAB[i, 1].Value = arrTest_UAB[i];
                if (arrTest_UBC.Length >= i)
                    dgvUBC[i, 1].Value = arrTest_UBC[i];
                if (arrTest_UCA.Length >= i)
                    dgvUCA[i, 1].Value = arrTest_UCA[i];
                if (arrTestCS_IA.Length >= i)
                    dgvIA[i, 0].Value = arrTestCS_IA[i];
                if (arrTestCS_IB.Length >= i)
                    dgvIB[i, 0].Value = arrTestCS_IB[i];
                if (arrTestCS_IC.Length >= i)
                    dgvIC[i, 0].Value = arrTestCS_IC[i];
 
                if (arrTestCS_UA.Length >= i)
                    dgvUA[i, 0].Value = arrTestCS_UA[i];
                if (arrTestCS_UB.Length >= i)
                    dgvUB[i, 0].Value = arrTestCS_UB[i];
                if (arrTestCS_UC.Length >= i)
                    dgvUC[i, 0].Value = arrTestCS_UC[i];
 
                if (arrTestCS_UAB.Length >= i)
                    dgvUAB[i, 0].Value = arrTestCS_UAB[i];
                if (arrTestCS_UBC.Length >= i)
                    dgvUBC[i, 0].Value = arrTestCS_UBC[i];
                if (arrTestCS_UCA.Length >= i)
                    dgvUCA[i, 0].Value = arrTestCS_UCA[i];
 
                if (dgvIA[i, 0].Value != null & dgvIA[i, 1].Value != null)
                    dgvIA[i, 2].Value = MyClass.delta(dgvIA[i, 0].Value.ToString(), dgvIA[i, 1].Value.ToString());
                if (dgvIB[i, 0].Value != null & dgvIB[i, 1].Value != null)
                    dgvIB[i, 2].Value = MyClass.delta(dgvIB[i, 0].Value.ToString(), dgvIB[i, 1].Value.ToString());
                if (dgvIC[i, 0].Value != null & dgvIC[i, 1].Value != null)
                    dgvIC[i, 2].Value = MyClass.delta(dgvIC[i, 0].Value.ToString(), dgvIC[i, 1].Value.ToString());
 
                if (dgvUA[i, 0].Value != null & dgvUA[i, 1].Value != null)
                    dgvUA[i, 2].Value = MyClass.delta(dgvUA[i, 0].Value.ToString(), dgvUA[i, 1].Value.ToString());
                if (dgvUB[i, 0].Value != null & dgvUB[i, 1].Value != null)
                    dgvUB[i, 2].Value = MyClass.delta(dgvUB[i, 0].Value.ToString(), dgvUB[i, 1].Value.ToString());
                if (dgvUC[i, 0].Value != null & dgvUC[i, 1].Value != null)
                    dgvUC[i, 2].Value = MyClass.delta(dgvUC[i, 0].Value.ToString(), dgvUC[i, 1].Value.ToString());
 
                if (dgvUAB[i, 0].Value != null & dgvUAB[i, 1].Value != null)
                    dgvUAB[i, 2].Value = MyClass.delta(dgvUAB[i, 0].Value.ToString(), dgvUAB[i, 1].Value.ToString());
                if (dgvUBC[i, 0].Value != null & dgvUBC[i, 1].Value != null)
                    dgvUBC[i, 2].Value = MyClass.delta(dgvUBC[i, 0].Value.ToString(), dgvUBC[i, 1].Value.ToString());
                if (dgvUCA[i, 0].Value != null & dgvUCA[i, 1].Value != null)
                    dgvUCA[i, 2].Value = MyClass.delta(dgvUCA[i, 0].Value.ToString(), dgvUCA[i, 1].Value.ToString());
            }
 
            if(!splitContainer3.Panel1Collapsed)
            splitContainer3.Panel1Collapsed = true;
            if(splitContainer3.Panel2Collapsed)
            splitContainer3.Panel2Collapsed = false;
            if(!splitContainer1.Panel1Collapsed)
            splitContainer1.Panel1Collapsed = true;
        }
Добавлено через 3 минуты
ошибку выдает во втором куске кода на 55 строчке

Добавлено через 1 час 22 минуты
ваш класс используется в первой части программы строка 69
0
23 / 23 / 5
Регистрация: 04.04.2012
Сообщений: 107
19.08.2016, 17:13 14
Цитата Сообщение от skemuze Посмотреть сообщение
в treeview необходимо выбрать элемент узла дерева по имени этого элемента
Узел для начала надо найти:

C#
1
2
3
4
5
6
7
8
9
10
11
public void SelectNodeByName(System.Windows.Forms.TreeView treeView, string nameNode)
        {
            foreach (TreeNode item in treeView.Nodes)
            {
                if (item.Text == nameNode)
                {
                    treeView.SelectedNode = item;
                }
            }
            
        }
А потом уже выделять:

C#
1
SelectNodeByName(treeView1, "string name node");
1
19.08.2016, 17:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2016, 17:13
Помогаю со студенческими работами здесь

Выбор узла XML по значению другого узла
Работаю с xml. Его структура такова : &lt;data&gt; &lt;item&gt; &lt;id&gt;182&lt;/id&gt; &lt;art_url/&gt; ...

TreeView. Удаление узла
В столбце StringGrid лежат имена узлов, которые надо удалить. Удаление происходит следующим...

Сортировка узла treeView
Подскажите существует ли метод для сортировки выбранного узла TreeView по алфавиту?

Активизация узла в TreeView ?
Подскажите, пожалуйста, как в TreeView поместить указатель на узел с заданным свойством Key. И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru