Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/47: Рейтинг темы: голосов - 47, средняя оценка - 4.53
72 / 5 / 4
Регистрация: 18.03.2013
Сообщений: 231

Работа с Listbox

17.05.2016, 16:22. Показов 9646. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, у меня есть listbox в нем есть повторяющаяся информация,например:

11
11
22
33
22

Я нажимаю на первую строку и должна узнать какой там написан текст. Если выбрала 11 в любом месте то выводится текст например а=5 , если я изменю сделаю не 5 а 4 , то у всех 11 информация должна измениться.
Если кто хоть знает - подкиньте идею реализации
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2016, 16:22
Ответы с готовыми решениями:

Работа с ListBox
Я хочу узнать несколько функций listbox, а именно: 1. как при нажатии на кнопку добавить в listbox текст, взятый из textbox 2. как при...

Работа с Listbox
Ребят помогите с решением такой идеи: при выборе Item в Listboxе, Item стал доступен для редактирования. Как то так))))

Работа с listBox
У меня есть два компонента listBox в одном из них есть шесть значений типа: 11001110 10001010 11101010 01001010 11000000 ...

9
 Аватар для BroDMax
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
17.05.2016, 17:19
Можно сделать через классы. Вот набросал небольшой пример:
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
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        // Создадим парочку объектов
        MyItemClass Item1 = new MyItemClass() { Name = "11", a = 5 };
        MyItemClass Item2 = new MyItemClass() { Name = "22", a = 6 };
        MyItemClass Item3 = new MyItemClass() { Name = "33", a = 7 };
        // Хаотично заполняем ListBox
        listBox1.Items.Add(Item1);
        listBox1.Items.Add(Item2);
        listBox1.Items.Add(Item1);
        listBox1.Items.Add(Item3);
    }
 
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // Выводим число в textBox1
        textBox1.Text = (listBox1.SelectedItem as MyItemClass).a.ToString();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        // Сохраняем введенное число в textBox1 нажатием на кнопку
        (listBox1.SelectedItem as MyItemClass).a = int.Parse(textBox1.Text);
    }
}
 
class MyItemClass
{
    public string Name { get; set; }
    public int a { get; set; }
 
    public override string ToString()
    {
        return Name;
    }
}
1
72 / 5 / 4
Регистрация: 18.03.2013
Сообщений: 231
17.05.2016, 20:47  [ТС]
C#
1
 textBox3.Text = (listBox1.SelectedItem as MyItemClass).a.ToString();
ругается на эту строчку: Необработанное исключение типа "System.NullReferenceException" в kursov.exe
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.

Добавлено через 3 минуты
Я хочу попробовать что бы твой пример заработал, что бы под свое задание сделать

Добавлено через 1 час 35 минут
добавляю я из комбобокс поэтому я не знаю какой там элемент хранится, я только знаю что там написано 11, 22 или 33

Добавлено через 20 минут
BroDMax,помоги пожалуйста. Ты добавляешь механически, в тексте программы. А мне нужно сначала определить как называется, а потом только изменять его значение
0
 Аватар для BroDMax
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
18.05.2016, 09:08
Цитата Сообщение от pk_100 Посмотреть сообщение
Ты добавляешь механически, в тексте программы. А мне нужно сначала определить как называется, а потом только изменять его значение
Тогда лучше Вам описать мне – как работает Ваша программа. Каким образом Вы, выбирая из comboBox пункт 11, знаете, что у этого элемента a = 5? Объясните подробнее структуру, помогу конечно!
0
72 / 5 / 4
Регистрация: 18.03.2013
Сообщений: 231
18.05.2016, 09:26  [ТС]
BroDMax, Вывод я сделала что бы работал, если не правильно то помоги пожалуйста. Я не знаю как записывать например в классе Okr есть pl1 и мне надо что бы пересчитывало новый результат когда ввожу R. Т.е то что сейчас есть можно не трогать, просто добавить новый текстбокс что бы ввести R и что бы пересчитывалось у всех из класса например Okr
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
namespace kursov
{
    public partial class Form1 : Form
    {
        public int n,a;
        int i = 0;
        Toch t;
        Toch[] mas1;//я хочу сделать через массив
        string[] lines = new string[] { "Окружность", "Сектор", "Конус"};
       // int[] lin;
 
        Okr okrug = new Okr();
        Sek sk = new Sek();
        Konus kon = new Konus();
 
//Мои классы
        public Form1()
        {
            InitializeComponent();
        }
 
        public class Toch
        {
            public virtual double pl1() { return 0; }
            public virtual double pl2() { return 0; }
            public virtual double h() { return 0; }
        }
 
        public class Okr : Toch
        {
            protected int r;
            public Okr() { r = 10; }
            public int R
            {
                get { return r; }
                set { r = value; }
            }
            public override double pl1() { return Math.PI * r * r; }
            public override double pl2() { return Math.PI * r * r; }
        }
        public class Sek : Toch
        {
            protected int l, n,ra;
            public Sek()
            {
                ra = 5;
                l = 6;
                n = 9;
            }
            public override double pl1() { return 0.5 * l * ra; }
            public override double pl2() { return 0.5 * l * ra; }
            public override double h() { return Math.PI * ra / 180 * n; }
        }
        public class Konus : Okr
        {
            protected int  a, vis;
            public Konus()
            {
                vis = 2;
                a = 8;
            }
            public override double pl1() { return Math.PI * r * a + Math.PI * r * r; }
            public override double pl2() { return Math.PI * r * a + Math.PI * r * r; }
            public override double h() { return 0.33 * Math.PI * vis * r * r; }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            n=Convert.ToInt32(textBox1.Text);
            textBox2.Text = textBox1.Text;
            mas1 = new Toch[n];  //я хочу сделать через массив
            comboBox1.Items.Clear();     // очистить
            comboBox1.Items.AddRange(lines); // поместить строки
            //lin = new int[n];
        }
//заполнение листбокса - все работает 
        private void comboBox1_DropDownClosed(object sender, EventArgs e)
        {
            if (listBox1.Items.Count < n) //если элементов в листБоксе меньше максимально возможного количества
            {
                listBox1.Items.Add(lines[comboBox1.SelectedIndex]);//в литбокс добавляем индекс выбранного значения в комбобоксе 
                //lin[listBox1.Items.Count-1] = Convert.ToInt32(comboBox1.SelectedIndex.ToString());
                textBox2.Text = Convert.ToString(n - listBox1.Items.Count);//чтобы в textBox значение уменьшалось
            }
            else comboBox1.Enabled = false;
         }
// проверяю - если в листбокс такой то текст то вывожу информацию в текстбокс
        private void button2_Click(object sender, EventArgs e)
        {
            string str = listBox1.SelectedItem.ToString();
            switch (str)
            {
                case "Окружность":
                    {
                        int j = listBox1.SelectedIndex;//записывем номер выбранного индекса
                        i = j;
                        t = okrug;
                        textBox3.Text = ((Toch)t).pl1().ToString();  
                        break;
                    }
                case "Сектор":
                    {
                        int j = listBox1.SelectedIndex;//записывем номер выбранного индекса
                        i = j;
                        t = sk;
                        textBox3.Text = ((Toch)t).pl1().ToString(); ;
                        break;
                    }
                case "Конус":
                    {
                        int j = listBox1.SelectedIndex;//записывем номер выбранного индекса
                        i = j;
                        t = kon;
                        textBox3.Text = ((Okr)t).pl1().ToString(); ;
                        break;
                    }                
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {     
 }}
}
Вложения
Тип файла: rar kursov.rar (49.0 Кб, 8 просмотров)
0
 Аватар для BroDMax
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
18.05.2016, 12:15
pk_100, у Вас тут все очень запутано. Попробуйте на button3 написать это:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void button3_Click(object sender, EventArgs e)
{
    string str = listBox1.SelectedItem.ToString();
    switch (str)
    {
        case "Окружность":
            {
                okrug.R = Convert.ToInt32(textBox2.Text);
                break;
            }
        case "Сектор":
            {
                //sk.h = Convert.ToInt32(textBox2.Text);
                break;
            }
        case "Конус":
            {
                kon.R = Convert.ToInt32(textBox2.Text);
                break;
            }
    }
}
Теперь при нажатии на button3 в объект, который выделен в listBox1 будет внесено новое значение R из textBox2.
А вообще-то, задание непонятно. Код можно сильно упростить, если понять, какая задача стоит перед программой. В чем суть задания?
0
72 / 5 / 4
Регистрация: 18.03.2013
Сообщений: 231
20.05.2016, 11:46  [ТС]
BroDMax, ты прав, можно легче, но я не знаю как и мне нужно сделать все это через массивы
0
72 / 5 / 4
Регистрация: 18.03.2013
Сообщений: 231
20.05.2016, 11:58  [ТС]
Вот мой код полностью. У меня есть массив типа Class Toch и мне считывать надо и записывать все через него. Саму программу я скинула. она работает но сделана не через массив. Это не правильно по моему заданию. Я совсем не понимаю как работать с этими массивами(

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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
namespace kursov
{
    public partial class Form1 : Form
    {
        public int n,a;
        int i = 0;
        Toch y;
        Toch t;
        Toch[] mas1;
        string[] lines = new string[] { "Окружность", "Сектор", "Конус"};
       // int[] lin;
 
        Okr okrug = new Okr();
        Sek sk = new Sek();
        Konus kon = new Konus();
 
        public Form1()
        {
            InitializeComponent();
        }
 
        public class Toch
        {
            public virtual double pl1() { return 0; }
            public virtual double pl2() { return 0; }
            public virtual double h() { return 0; }
        }
 
        public class Okr : Toch
        {
            public double r;
            public Okr() { r = 10; }
            public double R
            {
                get { return r; }
                set { r = value; }
            }
            public override double pl1() { return Math.PI * r * r; }
            public override double pl2() { return Math.PI * r * r; }
        }
        public class Sek : Toch
        {
            public double l, n, ra;
            public Sek()
            { l = 6;
              ra = 5;
              n = 7;
            }
            public double L
            {
                get { return l; }
                set { l = value; }
            }
            public double N
            {
                get { return n; }
                set { n = value; }
            }
            public override double pl1() { return 0.5 * l * ra; }
            public override double pl2() { return 0.5 * l * ra; }
            public override double h() { return Math.PI * ra / 180 * n; }
        }
        public class Konus : Okr
        {
            public double aa,n;
            public Konus()
            { aa = 6;
              n = 7;
            }
            public double AA
            {
                get { return aa; }
                set { aa = value; }
            }
            public override double pl1() { return Math.PI * r * aa + Math.PI * r * r; }
            public override double pl2() { return Math.PI * r * aa + Math.PI * r * r; }
            public override double h() { return 0.33 * Math.PI * n * r * r; }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            n=Convert.ToInt32(textBox1.Text);
            textBox2.Text = textBox1.Text;
            mas1 = new Toch[n];
            comboBox1.Items.Clear();     // очистить
            comboBox1.Items.AddRange(lines); // поместить строки
            //lin = new int[n];
        }
 
        private void comboBox1_DropDownClosed(object sender, EventArgs e)
        {
            if (listBox1.Items.Count < n) //если элементов в листБоксе меньше максимально возможного количества
            {
                listBox1.Items.Add(lines[comboBox1.SelectedIndex]);//в литбокс добавляем индекс выбранного значения в комбобоксе 
                //lin[listBox1.Items.Count-1] = Convert.ToInt32(comboBox1.SelectedIndex.ToString());
                textBox2.Text = Convert.ToString(n - listBox1.Items.Count);//чтобы в textBox значение уменьшалось
            }
            else comboBox1.Enabled = false;
            
         }
 
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
            string str = listBox1.SelectedItem.ToString();
            switch (str)
            {
                case "Окружность":
                    {
                        int j = listBox1.SelectedIndex;//записывем номер выбранного индекса
                        i = j;
                        y = mas1[i];
 
                        t = okrug;
                        textBox3.Text = ((Toch)t).pl1().ToString();
                       // textBox9.Text = y.pl2().ToString();
                        break;
                    }
                case "Сектор":
                    {
                        
                        t = sk;
                        textBox3.Text = ((Toch)t).pl1().ToString();
                        textBox6.Text = ((Toch)t).h().ToString(); 
                        break;
                    }
                case "Конус":
                    {
                       
                        t = kon;
                        textBox3.Text = ((Okr)t).pl1().ToString();
                        textBox7.Text = ((Toch)t).h().ToString(); 
                        break;
                    }
            }
            }
            catch
            {
                MessageBox.Show("Выберите из списка");
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            string str = listBox1.SelectedItem.ToString();
            switch (str)
            {
                case "Окружность":
                    {
                        okrug.R = Convert.ToInt32(textBox4.Text);
                        textBox3.Text = ((Toch)t).pl1().ToString();  
                        break;
                    }
                case "Сектор":
                    {
                        sk.L = Convert.ToInt32(textBox4.Text);
                        sk.N = Convert.ToInt32(textBox5.Text);
                        textBox3.Text = ((Toch)t).pl1().ToString();
                        textBox6.Text = ((Toch)t).h().ToString(); 
                        break;
                    }
                case "Конус":
                    {
                        kon.AA = Convert.ToInt32(textBox8.Text);
                        kon.R = Convert.ToInt32(textBox4.Text);
                        textBox3.Text = ((Okr)t).pl1().ToString();
                        textBox7.Text = ((Toch)t).h().ToString(); 
                        break;
                    }
            }
        }
 
 
            
 
    }
   
}
Вложения
Тип файла: rar kursov.rar (58.1 Кб, 2 просмотров)
0
 Аватар для BroDMax
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
20.05.2016, 12:09
pk_100, текст задания напишите! Не понятно, зачем все "это" здесь происходит

Добавлено через 1 минуту
Цитата Сообщение от pk_100 Посмотреть сообщение
но сделана не через массив
Массив чего???
0
72 / 5 / 4
Регистрация: 18.03.2013
Сообщений: 231
20.05.2016, 12:26  [ТС]
BroDMax, Создать массив ссылок базового типа. Число элементов массива определяет пользователь. Имя массива должно быть долгоживущей ссылкой.
C#
1
Toch[] mas1;
т.е. вот я начала (Toch это class)
C#
1
mas1 = new Toch[n];
Про класс известно: Базовый класс "Точка". "Окружность" и "Сектор" являются производными от класса "Точка" Класс "Конус" - от класса "Окружность". У всех найти площадь. + У "Сектора" - длину дуги. + у "Конус" - объем

Добавлено через 7 минут
BroDMax, так же к заданию относится: Предоставить возможность пользователю помещать в массив объекты всех классов, входящих в заданную иерархию.
В каждый момент времени, по запросу, программа должны сообщать сколько и каких элементов уже помещено в массив, сколько свободных мест осталось.
Объекты одного класса вначале создаются одинаковыми, но по требованию пользователя могут быть изменены. В каждый момент времени пользователь может работать только с одним элементом. Выбор элемента выполняется по номеру
Пользователь может изменять значения полей любого элемента и вывести информацию о любом элементе массива
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2016, 12:26
Помогаю со студенческими работами здесь

Работа с ListBox
у меня есть listbox в котором выводится список дисков(рис.2.) как сделать что то подобное как в первом рисунке.

Работа с ListBox
Помогите правильно настроить работу формы. Вопрос в следующем. Есть форма для редактирования таблицы-справочника, в форме два...

Работа с ListBox
Как из текстового файла,где элементы располагаются следующем порядке: 564 312 89 569 312 считать построчно и вывести в...

Работа с listbox
Добрый день! Имеется listbox, при клике 2 поля: name и id. Пытаюсь добавить listbox item GI].name = (&quot;New item&quot;); ...

Работа с ListBox
Дан ListBox. В нем идут списком перечисления тем по предмету и номера лекций: Тема №1... Лекция №1.... №2 Надо чтобы...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru