Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 5 / 3
Регистрация: 24.05.2015
Сообщений: 382

Присваивание значения свойству Tag узла Treeview

02.11.2016, 12:03. Показов 1568. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как при заполнении treeView присвоить свойству узла .Tag уникальный идентификатор каталога ? Пока что у меня это работает так.
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
 public partial class Form1 : Form
    {
 
        // Counters for statusBar1 control
        private int iFiles = 0;
        private int iDirectories = 0;
 
 
        public Form1()
        {
            InitializeComponent();
           
        }
 
 
        // Methods
        private void AddDirectories(TreeNode tnSubNode)
        {
            // This method is used to get directories (from disks, or from other directories)
 
            treeView1.BeginUpdate();
            iDirectories = 0;
 
            try
            {
                DirectoryInfo diRoot;
 
                // If drive, get directories from drives
                if (tnSubNode.SelectedImageIndex < 4)
                {
                    diRoot = new DirectoryInfo(tnSubNode.FullPath + "\");
                }
 
                //  Else, get directories from directories
                else
                {
                    diRoot = new DirectoryInfo(tnSubNode.FullPath);
                }
                DirectoryInfo[] dirs = diRoot.GetDirectories();
 
                // Must clear this first, else the directories will get duplicated in treeview
                tnSubNode.Nodes.Clear();
 
                // Add the sub directories to the treeView1
                foreach (DirectoryInfo dir in dirs)
                {
                    iDirectories++;
                    TreeNode subNode = new TreeNode(dir.Name);
                    subNode.ImageIndex = 4;
                    subNode.SelectedImageIndex = 5;
                    tnSubNode.Nodes.Add(subNode);
                }
 
            }
            // Throw Exception when accessing directory: C:\System Volume Information    // do nothing
            catch {; }
 
            treeView1.EndUpdate();
        }
 
        private void AddFiles(string strPath)
        {
            listView1.BeginUpdate();
 
            listView1.Items.Clear();
            iFiles = 0;
            try
            {
                DirectoryInfo di = new DirectoryInfo(strPath + "\");
                FileInfo[] theFiles = di.GetFiles();
                foreach (FileInfo theFile in theFiles)
                {
                    iFiles++;
                    ListViewItem lvItem = new ListViewItem(theFile.Name);
                    lvItem.SubItems.Add(theFile.Length.ToString());
                    lvItem.SubItems.Add(theFile.LastWriteTime.ToShortDateString());
                    lvItem.SubItems.Add(theFile.LastWriteTime.ToShortTimeString());
                    listView1.Items.Add(lvItem);
                }
            }
            catch (Exception Exc) { toolStripStatusLabel1.Text = Exc.ToString(); }
 
            listView1.EndUpdate();
        }
 
        // Events
 
        private void Form1_Load(object sender, EventArgs e)
        {
            // This routine adds all computer drives to the root nodes of treeView1 control
 
            string[] aDrives = Environment.GetLogicalDrives();
 
            treeView1.BeginUpdate();
 
            foreach (string strDrive in aDrives)
            {
                TreeNode dnMyDrives = new TreeNode(strDrive.Remove(2, 1));
 
                switch (strDrive)
                {
                    case "A:\":
                        dnMyDrives.SelectedImageIndex = 0;
                        dnMyDrives.ImageIndex = 0;
                        break;
                    case "C:\":
 
                        // The next statement causes the treeView1_AfterSelect Event to fire once on startup.
                        // This effect can be seen just after intial program load. C:\ node is selected
                        // Automatically on program load, expanding the C:\ treeView1 node.
                        treeView1.SelectedNode = dnMyDrives;
                        dnMyDrives.SelectedImageIndex = 1;
                        dnMyDrives.ImageIndex = 1;
 
                        break;
                    case "D:\":
                        dnMyDrives.SelectedImageIndex = 2;
                        dnMyDrives.ImageIndex = 2;
                        break;
                    default:
                        dnMyDrives.SelectedImageIndex = 3;
                        dnMyDrives.ImageIndex = 3;
                        break;
                }
 
                treeView1.Nodes.Add(dnMyDrives);
            }
            treeView1.EndUpdate();
        }
 
        private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            // Get subdirectories from disk, add to treeView1 control
            AddDirectories(e.Node);
 
            // if node is collapsed, expand it. This allows single click to open folders.
            treeView1.SelectedNode.Expand();
 
            // Get files from disk, add to listView1 control
            AddFiles(e.Node.FullPath.ToString());
            toolStripStatusLabel1.Text = iDirectories.ToString() + " Папка(и)  " + iFiles.ToString() + " Файл(а)";
        }
 
        private void listView1_ItemActivate(object sender, System.EventArgs e)
        {
            try
            {
                string sPath = treeView1.SelectedNode.FullPath;
                string sFileName = listView1.FocusedItem.Text;
 
                Process.Start(sPath + "\" + sFileName);
            }
            catch (Exception Exc) { MessageBox.Show(Exc.ToString()); }
        }
 
    }
Так же есть dataGridView по которому осуществляется фильтрация.

C#
1
2
3
4
 private void textBox5_TextChanged(object sender, EventArgs e)
        {
            (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%' or Description LIKE '%{0}%' or Tags LIKE '%{0}%'", textBox5.Text);
        }
Как по отфильтрованным записям получить идентификатор выбранной записи (файла). Так же как по идентификатору файла определить в каком каталоге он находится. Ну и как в итоге искать нужный узел в treeview ? То есть по сути мне нужно сделать поиск файла в treeView через базу данных (то есть я пишу что то в textBox он отфильтровывает dataGridView и то что выдало, должно быть в ListView ну и соответственно должна открыться папка в treeView).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2016, 12:03
Ответы с готовыми решениями:

Присвоить свойству Tag число введенное в Edit
На форме есть CheckBox у которого свойство Tag равно допустим 2000 можно ли ему присвоить значение введенное в Edit?? и если возможно то...

Ссылка на объект не указывает на экземпляр объекта при обращении к свойству tag
Доброе время суток. Объясните пожалуйста откуда сие берется..

Имеет ли смысл присваивать Nullable<T> свойству Tag любого элемента управления
private void LeftDoorOpenCloseButton_Click(object sender, RoutedEventArgs e) { Duration duration = new...

1
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
02.11.2016, 13:55
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
public class Person
{
    public string Name {get;set;}
    public int Age {get;set;}
}   
    
List<Person> persons = new List<Person>
{
    new Person{Name = "Вася", Age = 25},
    new Person{Name = "Петя", Age = 18},
};
 
List<Person> currentPersons; // отфильтрованный список
 
//заполнение treeView1
private void RebuildTreeView()
{
    treeView1.Nodes.Clear();
    
    for (int i = 0; i < currentPersons.Count; i++) 
    {
        var person = currentPersons[i];
        var node = new TreeNode(person.Name);
        node.Tag = person;
        
        treeView1.Nodes.Add(node);
    }
}
 
//получение объекта привязки
Person person = treeView1.SelectedNode.Tag as Person;
if(person != null)
{
    
}
после каждой фильтрации вызываешь метод RebuildTreeView()
Как заполнять DatagridView смотри здесь и здесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2016, 13:55
Помогаю со студенческими работами здесь

Treeview запись в tag из textbox
Не могу никак сообразить, как значение из textbox запихнуть в свойство tag созданному Node? private void button1_Click(object sender,...

Найти узел по Tag в treeView
Всем доброе утро..) Не могу разобраться, как искать в дереве с помощью Tag.. При построении дерева для Tag присваиваю поле с...

Как добавить картинки в TreeView.Tag ?
Так я добавляю текст TreeNode treeNode = new TreeNode(&quot;Person&quot;); String str = new string { &quot;name&quot;, &quot;age }; ...

TreeView: назначить Tag каждому ноду
Строю treeview из xml файла. Интересуют только вложенные элементы. В моём случае вложенный элемент - значение атрибута &quot;name&quot; в...

Обращение к обьекту через Name или Tag в treeview
Всем доброго времени суток, возник вопрос, как обратиться к узлу treeview через name или тег? Дайте какие-то ссылки или пример кода, буду...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru