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

ListView выбор элемента

22.10.2009, 23:16. Показов 23414. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.

Пишу файловый менеджер, но возникла проблемка.

Когда устанавливаю автоматом выбор элементта

C#
1
2
3
                    
lvDiri.Selected = true;
lvDiri.Focused = true;
он устанавливается, но если нажать энтер то получаем ошибку
"В экземпляре объекта не задана ссылка на объект."

как можно решить данную проблему ?

Также прошу у кого есть время проанализировать код, и дать рекомендации что улучшать...

ФМ в аттаче
Вложения
Тип файла: zip sCommander.zip (355.7 Кб, 998 просмотров)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2009, 23:16
Ответы с готовыми решениями:

ListView выбор элемента
Есть handle ListView'a чужой программа, вопрос в том, как выбрать определенный элемент из него не...

ListView не работает выбор элемента
Доброго времени суток. Который день мучаюсь. Не знаю как поменять цвет ListView, так что бы не...

Забиндить команду к ListView на выбор элемента
Хочу в соотвестии с патерном MVVM убрать обработку выбора элемента в свой ViewModel. Как должна...

ListView. Выбор элемента при клике правой кнопкой мыши
Нужно, чтобы при клике правой кнопки мыши по элементу выбирался этот самый элемент TreeView. Как...

11
7 / 7 / 0
Регистрация: 21.10.2009
Сообщений: 33
23.10.2009, 18:10 2
ты не поверишь, у меня твой код сначала вызвал эту ошибку, но после добавления любого события на keyPress
C#
1
if (e.KeyChar == 13) {}
ошибка перестала после 2 раза
ЗС. совет - почитай про virtualmode в listView а то если будет много файлов, долго ждать
0
6 / 6 / 1
Регистрация: 04.10.2009
Сообщений: 37
23.10.2009, 18:27  [ТС] 3
Цитата Сообщение от W03L Посмотреть сообщение
ты не поверишь, у меня твой код сначала вызвал эту ошибку, но после добавления любого события на keyPress
C#
1
if (e.KeyChar == 13) {}
ошибка перестала после 2 раза
ЗС. совет - почитай про virtualmode в listView а то если будет много файлов, долго ждать
увы не помогло
про virtualmode почитаю
0
7 / 7 / 0
Регистрация: 21.10.2009
Сообщений: 33
23.10.2009, 19:12 4
если не помогло - сделай ексепшн, если первая строчка по присваиванию == null, тогда ничего не делать.
Либо удали всё в папках BIN и OBJ и перекомпиль. Такое ощущение, что программа опережает события, и в итоге указанный итем получается null до того как он будет обработан.
0
6 / 6 / 1
Регистрация: 04.10.2009
Сообщений: 37
23.10.2009, 19:56  [ТС] 5
Цитата Сообщение от W03L Посмотреть сообщение
если не помогло - сделай ексепшн, если первая строчка по присваиванию == null, тогда ничего не делать.
Либо удали всё в папках BIN и OBJ и перекомпиль. Такое ощущение, что программа опережает события, и в итоге указанный итем получается null до того как он будет обработан.
можно пример ? не совсем понял суть...

Добавлено через 7 минут
сделал вот такое:

C#
1
2
3
4
5
            foreach (ListViewItem si in lvLeft.SelectedItems)
            {
                MessageBox.Show(si.Text);
                MessageBox.Show(si.Focused.ToString());
            }
si.Focused.ToString() возвращает false

Добавлено через 12 минут
если делать проверку в самом построении, то si.Focused.ToString() возвращает true

чем значение true может изменится на false ?
0
7 / 7 / 0
Регистрация: 21.10.2009
Сообщений: 33
23.10.2009, 21:04 6
в обработчике lvLeft_ItemActivate добавляешь строку
Код
if (lvLeft.FocusedItem == null) return;
дополнительно (в глубоком дебуге)
и пытаешься у себя в коде ещё добавить событие до этого (методом тыка), <чтобы определить, почему у тебя при нажатии enter получается null>
(экстримальное программирование)
Серьёзно, ошибка была но потом изчезла (обратись на форум мелкософт по c#)
0
6 / 6 / 1
Регистрация: 04.10.2009
Сообщений: 37
25.10.2009, 20:35  [ТС] 7
продолжим мучения

сделал простой пример

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
 
                ListViewItem lvi = new ListViewItem(new string[] { i.ToString() });
 
                if (i == 3)
                {
                    lvi.Focused = true;
                    lvi.Selected = true;
                    lvi.Checked = true;
                    lvi.EnsureVisible();
                }
                
                listView1.Items.Add(lvi);
            }
        }
 
        private void listView1_ItemActivate(object sender, EventArgs e)
        {
            string Changed = listView1.FocusedItem.Text;
            MessageBox.Show(Changed);
        }
    }
}


как видно на скрине под цифрой 1 фактически выбранный элемент, который показывается по нажатию enter а должен быть 3й...

у кого какие варианты ?
0
6 / 6 / 1
Регистрация: 04.10.2009
Сообщений: 37
25.10.2009, 20:36  [ТС] 8
добавил сам проект
Вложения
Тип файла: zip WindowsFormsApplication3.zip (40.5 Кб, 812 просмотров)
0
6 / 6 / 1
Регистрация: 04.10.2009
Сообщений: 37
25.10.2009, 20:55  [ТС] 9
вылечил вот так, не знаю в чем фишка но пашет...

C#
1
2
3
4
            lv.Items[1].Selected = true;
            lv.Items[1].Focused = true;
            lv.Items[1].EnsureVisible();
            lv.Focus();
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
26.10.2009, 03:35 10
MSDN:
Примечание.
Элементы отображаются как выбранные только в том случае, если элемент управления ListView имеет фокус. Для осуществления выбора в ответ на действие пользователя, например нажатие кнопки, в дополнение к установке значения этого свойства необходимо вызвать метод Focus.
0
6 / 6 / 1
Регистрация: 04.10.2009
Сообщений: 37
26.10.2009, 13:54  [ТС] 11
Цитата Сообщение от Green Посмотреть сообщение
MSDN:
как я уже писал код не работает так:

C#
1
2
3
4
5
6
7
8
9
10
11
            for (int i = 0; i < 20; i++)
            {
                ListViewItem lvi = new ListViewItem(new string[] { i.ToString() });
                if (i == 5)
                {
                    lvi.Selected = true;
                    lvi.Focused = true;
                }
                listView1.Items.Add(lvi);
            }
            listView1.Focus();
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
26.10.2009, 16:47 12
C#
1
2
3
4
5
6
7
8
9
10
11
            listView1.Focus();
            for (int i = 0; i < 20; i++)
            {
                ListViewItem lvi = new ListViewItem(new string[] { i.ToString() });
                listView1.Items.Add(lvi);
                if (i == 5)
                {
                    lvi.Selected = true;
                    lvi.Focused = true;
                }
            }
И так?
0
26.10.2009, 16:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2009, 16:47
Помогаю со студенческими работами здесь

Как осуществить прокрутку элемента управления в ListView до заданного элемента
Собственно вопрос в названии...Видел как это делают на VB если кто то может перевести с него могу...

Выбор элемента листбокса - вызывает картинку, соответствующую названию элемента листбокс
Всем доброго времени суток. проблема такая что при нажатии на элемент листбокса. должна...

Множественный выбор в listview
вот так создается список class AdapterHelper{ String name = {&quot;Первый&quot;,&quot;Второй&quot;,&quot;Третий&quot;}; int...

Выбор процесса в listView
Добрый вечер такой вопрос пишу что то типа диспетчера задач, процессы решил разместить в listView,...

ListView Выбор определенной строки
Реализовал чат. В ListView добавляются пользователи. А именно их IP...

выделение элемента в ListView
Подскажите, что я делаю не так? У меня в кастомном диалоге создается и заполняется список, при его...


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

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

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