Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 1
Регистрация: 27.10.2013
Сообщений: 44
.NET 4.x

Не отображает элементы ListView-а при добавлении туда файлов

16.10.2014, 19:56. Показов 1280. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Я создал две формы. В обоих есть ListView. Первая из них - главная - должна послужить файловым контейнером, элементы которого добавляются через вторую форму, которая является обычным файловым менеджером. Суть проблемы в том, что при добавлении файлов в первую форму ошибок не происходит, но и изменений в ListView-е тоже нет. И не понятно, то ли я неправильно добавляю в ListView элементы, то ли неправильно вывожу.

Form2 - главная форма (контейнер), Form1 - файловый менеджер.

Файл Form1.cs (фрагмент, где я добавляю элемент в ListView из Form2, где впоследствии ничего не отображается, изображен в методе button2_Click(object sender, EventArgs e)).
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
namespace DirFileProject
{
    public partial class Form1 : Form
    {
        string FPath;
        string backPath;
        Form2 form2;
        List<string> ls = new List<string>();
        public Form1()
        {
            InitializeComponent();
 
        }
        void GetLocDir()
        {
            listView1.Items.Clear();
            this.Text = "Мой компьютер";
            String[] LogicalDrives = Environment.GetLogicalDrives();
            foreach (string s in LogicalDrives)
            {
 
                listView1.Items.Add(s, 1);
                ls.Add(s);
            }
        }
 
        void GetFiles()
        {           
            listView1.BeginUpdate();
            
            try
            {
 
                string[] dirs = Directory.GetDirectories(FPath);
                ls.Clear();
 
                try
                {
                    DirectoryInfo dInfo = new DirectoryInfo(FPath);
                    backPath = dInfo.Parent.FullName;
                }
                catch { }
 
                listView1.Items.Clear();
 
                foreach (string s in dirs)
                {
                    string dirname = System.IO.Path.GetFileName(s);
                    listView1.Items.Add(dirname, 1);
                    ls.Add(s);
                }
 
                string[] files = Directory.GetFiles(FPath);
                foreach (string s in files)
                {
                    string filename = System.IO.Path.GetFileName(s);
                    listView1.Items.Add(filename, 0);
                }
 
            }
            catch (Exception ex) {MessageBox.Show(ex.Message); }
            listView1.EndUpdate();
        }
 
        private void listView1_ItemActivate(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0)
                return;
 
            ListViewItem item = listView1.SelectedItems[0];
            if (item.ImageIndex == 1)
            {
                string it = item.Text;
                string title = "";
                foreach (string s in ls)
                {
                    try
                    {
                        if (s.Substring(s.Length - it.Length, it.Length) == it)
                        {
                            FPath = s;
                            title = s;
                        }
                    }
                    catch { }
                }
                try
                {
                    string[] dirs = Directory.GetDirectories(FPath);
                    this.Text = title;
                    GetFiles();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
                
            else if (item.ImageIndex == 0)
            {
                string start = this.Text + "\\" + item.Text;
                System.Diagnostics.Process.Start(start);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            bool b = false;
            String[] LogicalDrives = Environment.GetLogicalDrives();
            foreach (string s in LogicalDrives)
            {
                if (backPath == s && FPath == s) b = true;
            }
            if (backPath != null && !b)
            {
                this.Text = backPath;
                FPath = backPath;
                GetFiles();
            }
            else
            {
                GetLocDir();
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            GetLocDir();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count != 0)
            {
                var file = listView1.SelectedItems[0];
                form2 = new Form2();
                listView1.Items.Clear();
                form2.listView2.Items.Add(file);
                this.Close();
            }
        }
    }
}
Файл Form2.cs. Я выделил фрагмент, который больше всего меня смущает, но я просто не знаю, что туда писать) По идее, там просто должны отображаться элементы ListView. Т.е. если в файловом менеджере начальная точка - Мой компьютер, откуда я двигаюсь по разным дискам и т.д., то здесь просто должны отображаться члены ListView.
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
namespace DirFileProject
{
    public partial class Form2 : Form
    {
        string FPath;
        string backPath;
        object sender;
        EventArgs e;
        Form1 form1;
        List<string> ls = new List<string>();
 
        public Form2()
        {
            InitializeComponent();
        }
        private void Form2_Load(object sender, EventArgs e)      //
        {                                                                            //
                                                                                     //  Вот этот фрагмент
        }                                                                           //
 
        private void button2_Click_1(object sender, EventArgs e)
        {
            form1 = new Form1();
            form1.Show();
        }
        void GetFiles()
        {
            listView2.BeginUpdate();
 
            try
            {
 
                string[] dirs = Directory.GetDirectories(FPath);
                ls.Clear();
 
                try
                {
                    DirectoryInfo dInfo = new DirectoryInfo(FPath);
                    backPath = dInfo.Parent.FullName;
                }
                catch { }
 
                listView2.Items.Clear();
 
                foreach (string s in dirs)
                {
                    
                    string dirname = System.IO.Path.GetFileName(s);
                    listView2.Items.Add(dirname, 1);
                    ls.Add(s);
                }
 
                string[] files = Directory.GetFiles(FPath);
                foreach (string s in files)
                {
                    string filename = System.IO.Path.GetFileName(s);
                    listView2.Items.Add(filename, 0);
                }
 
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            listView2.EndUpdate();
        }
        private void listView2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView2.SelectedItems.Count == 0)
                return;
 
            ListViewItem item = listView2.SelectedItems[0];
            if (item.ImageIndex == 1)
            {
                string it = item.Text;
                string title = "";
                foreach (string s in ls)
                {
                    try
                    {
                        if (s.Substring(s.Length - it.Length, it.Length) == it)
                        {
                            FPath = s;
                            title = s;
                        }
                    }
                    catch { }
                }
                try
                {
                    string[] dirs = Directory.GetDirectories(FPath);
                    this.Text = title;
                    GetFiles();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
 
            else if (item.ImageIndex == 0)
            {
                string start = this.Text + "\\" + item.Text;
                System.Diagnostics.Process.Start(start);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            bool b = false;
            String[] LogicalDrives = Environment.GetLogicalDrives();
            foreach (string s in LogicalDrives)
            {
                if (backPath == s && FPath == s) b = true;
            }
            if (backPath != null && !b)
            {
                this.Text = backPath;
                FPath = backPath;
                GetFiles();
            }
            else
            {
                this.Form2_Load(sender,e);
            }
        }
    }
}
Первая форма.


При нажатие кнопки "Добавить в контейнер" вызывается вторая форма (void button2_Click_1(object sender, EventArgs e))


Однако после нажатия "Добавить" ситуация в первом ListView не меняется. Как был чистый экран, так и остался. Хотя ошибок нет. Помогите пожалуйста разобраться.

Заранее спасибо за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2014, 19:56
Ответы с готовыми решениями:

Binding к ListView при добавлении информации
Всем добрый вечер! Пытаюсь сделать bindig к listview при добавлении объектов на форме. Сделал класс, сделал коллекцию. Подскажите...

Не прокручивать ListView при добавлении в него данных
Добрый день! Подскажите пожалуйста. Делаю программу. В ней есть функционал на подобии чата. Т.е. новые сообщения снизу, старые...

C++ Win32 api ListView при добавлении строки
Добрый день! Подскажите в чем проблема. При заполнении ListView получается смещение записей. Например ввожу три раза разные данные 1....

1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
16.10.2014, 20:09
Jeckor, в ваш код я особо не вникал, но почитайте вот эту тему. Последний пост. Может, поможет. Там именно про передачу данных между формами.
Ответы на 7 самых частых вопросов по WinForms
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2014, 20:09
Помогаю со студенческими работами здесь

Дублирование столбцов в listview при добавлении строчки
У меня сейчас лопнет голова!!! Помогите пожалуйста! Как сохранить listview в xml я нашла, успешно сохраняется и загружается первая...

Подергивание ListView в режиме VirtualMode при добавлении элемента
Здравствуйте. Для начала стоит заметить, что более забагованного контрола в винформах встречать не приходилось. Причем одни и те же...

Непонятная ошибка (разрушительный сбой) при добавлении в ListView
хочу изменить содержание элемента по индексу в listview но выводит ошибку wtf?? изза чего это???

Почему при добавлении строки в listview запускается посторонняя функция?
После listView1.Items.Add(tb.Text) Сразу запускается код public class ListViewSorter : System.Collections.IComparer { ...

ListView. Как сделать так, чтобы при добавлении итемов в начало, сам список 'стоял на месте' ?
Есть ListView в Report mode. Как сделать так, чтобы при добавлении итемов в начало, сам список 'стоял на месте'. Спасибо


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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
/ * Дана цепь постоянного тока с 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/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru