Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612

Динамическое создание ToolStripMenuItem: Нельзя применить индексацию к ToolStripMenuItem

17.02.2015, 17:43. Показов 4931. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пробовал стандартными методами, вышла ошибка, что нельзя применить индексацию к ToolStripMenuItem.
Собственно тогда как?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2015, 17:43
Ответы с готовыми решениями:

Клик одного ToolStripMenuItem должен вызвать код другого ToolStripMenuItem
Добрый день всем! Подскажите пожалуйста, кто может! C# В форме есть меню, по нажатию мышью запускается на выполнение код: ...

ToolStripMenuItem
Создал ToolStripMenuItem ts = new ToolStripMenuItem("игры"); Добавил элементы ts.DropDownItems.Add("Игра 1"); ...

ToolStripMenuItem и Checked
Здравствуйте! Есть ToolStripMenuItem, в нем есть список, хочу использовать этот список как Checked. Т.е. я открываю меню и помечаю...

5
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
17.02.2015, 17: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
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
        // Заполнение меню для синергета
        public void SN_refresh_menu(List<Synerget.SNSysnem> SNSysnem_List)
        {
            toolStrip_dev_SN.Visible = true;
            toolStrip_dev_SN.Location = new Point(tmp_MD_X + 5, tmp_MD_Y + 5);
 
            // Очистим меню
            toolStrip_dev_SN.Items.Clear();
 
            // Пытаемся заполнить первый уровень leve_1
            for (int i = 0; i < SNSysnem_List.Count; i++)
            {
                // Проверка на null
                if (SNSysnem_List[i].id_system != null)
                {
                    // 
                    level_1 = new System.Windows.Forms.ToolStripMenuItem(SNSysnem_List[i].name_system);
 
                    //
                    toolStrip_dev_SN.Items.Add(level_1);
 
                    // Запише тег id устройства Синергета
                    if (toolStrip_dev_SN.Items.Count > 0)
                        toolStrip_dev_SN.Items[i].Tag = SNSysnem_List[i].id_system;
 
                    // Пытаемся заполнить второй уровень leve_2
                    for (int j = 0; j < SNSysnem_List[i].Get_SNDevice_one().Count; j++)
                    {
                        // Проверка на соответствия родительской системы по id
                        if (SNSysnem_List[i].Get_SNDevice_one()[j].id_parent == SNSysnem_List[i].id_system)
                        {
                            //
                            level_2 = new System.Windows.Forms.ToolStripMenuItem(SNSysnem_List[i].Get_SNDevice_one()[j].name);
 
                            // событие
                            level_2.MouseDown += new MouseEventHandler(SNmenu_click);
 
                            // добавляем
                            level_1.DropDown.Items.Add(level_2);
 
                            // Запише тег id устройства Синергета
                            level_1.DropDownItems[level_1.DropDownItems.Count - 1].Tag = SNSysnem_List[i].Get_SNDevice_one()[j].id;
                            
                            // Добавление иконки
                            SNadd_ico(level_2, SNSysnem_List[i].Get_SNDevice_one()[j].type);
 
                            // Пытаемся заполнить второй уровень leve_3
                            for (int z = 0; z < SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too().Count; z++)
                            {
                                // Проверка на соответствия родительской по id
                                if (SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].id_parent == SNSysnem_List[i].Get_SNDevice_one()[j].id)
                                {
                                    // добавляем level_3
                                    level_3 = new System.Windows.Forms.ToolStripMenuItem(SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].name);
                       
                                    // событие level_3
                                    level_3.MouseDown += new MouseEventHandler(SNmenu_click);
 
                                    //
                                    level_2.DropDown.Items.Add(level_3);
                       
                                    // Запише тег id устройства Синергета
                                    level_2.DropDownItems[level_2.DropDownItems.Count - 1].Tag = SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].id;
                       
                                    // Добавление иконки
                                    SNadd_ico(level_3, SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].type);
 
                                    // Пытаемся заполнить  уровень leve_4
                                    for (int k = 0; k < SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].Get_SNDevice_three().Count; k++)
                                    {
                                        // Проверка на соответствия родительской по id
                                        if (SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].id ==
                                            SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].Get_SNDevice_three()[k].id_parent)
                                        {
                                            // добавляем level_4
                                            level_4 = new System.Windows.Forms.ToolStripMenuItem(SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].Get_SNDevice_three()[k].name);
                                    
                                            // событие level_4
                                            level_4.MouseDown += new MouseEventHandler(SNmenu_click);
                                    
                                            // 
                                            level_3.DropDown.Items.Add(level_4);
                                    
                                            // Запише тег id устройства Синергета
                                            level_3.DropDownItems[level_3.DropDownItems.Count - 1].Tag = SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].Get_SNDevice_three()[k].id;
                                    
                                            // Добавляем иконку
                                            SNadd_ico(level_4, SNSysnem_List[i].Get_SNDevice_one()[j].Get_SNDevice_too()[z].Get_SNDevice_three()[k].type);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Миниатюры
Динамическое создание ToolStripMenuItem: Нельзя применить индексацию к ToolStripMenuItem  
0
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
17.02.2015, 18:15  [ТС]
Ну собственно хотелось бы, чтобы с listbox все считывалось построчно и заполнялось в соответствующий ToolStripMenuItem
C#
1
2
3
4
5
6
7
8
9
10
11
string[] lb = new string[listBox1.Items.Count];
                for (int i = 0; i < lb.Length; i++)
                {lb[i] = listBox1.Items[i].ToString();
                    for (int k = 0; k <= i; k++)
                    {
ToolStripMenuItem tsmi = new ToolStripMenuItem();
tsmi[k] = new System.Windows.Forms.ToolStripMenuItem();
tsmi[k].Name = "tsmi" + k.ToString();
tsmi[k].Size = new System.Drawing.Size(75, 23);
tsmi[k].Text = spp[i];
Controls.Add(tsmi[k]);
0
43 / 43 / 19
Регистрация: 30.11.2011
Сообщений: 112
19.02.2015, 12:47
А собственно зачем вам эта индексация? Может лучше так:
C#
1
2
3
4
5
6
7
8
9
for (int k = 0; k <= i; k++)
{
        ToolStripMenuItem tsmi = new ToolStripMenuItem();
        tsmi= new System.Windows.Forms.ToolStripMenuItem();
        tsmi.Name = "tsmi" + k.ToString();
        tsmi.Size = new System.Drawing.Size(75, 23);
        tsmi.Text = spp[i];
        Controls.Add(tsmi);
}
ToolStripMenuItem это не массив. Более того ToolStripMenuItem существует для того чтобы добавить в ToolStrip. Поэтому ещё лучше наверное переписать последнюю строку цикла так:
C#
1
2
//если конечно это всё выполняется на форме
toolStrip1.Items.Add(tsmi);
1
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
19.02.2015, 19:02  [ТС]
И так подправив код вышло все как надо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
  string[] lb = new string[listBox1.Items.Count];
                for (int i = 0; i < lb.Length; i++)
                {
                    lb[i] = listBox1.Items[i].ToString();
                    
                        tsmi = new System.Windows.Forms.ToolStripMenuItem();
                        tsmi.Name = "tsmi" + i.ToString();
                        tsmi.Size = new System.Drawing.Size(75, 23);
                        tsmi.Text = lb[i];
                        tsmi.Click += new EventHandler(tsmi_Click);
                        contextMenuStrip1.Items.Add(tsmi);
                    
                }
Но при нажатии на любой из ToolStripMenuItem, должно выполняться действие:
C#
1
2
3
4
5
6
7
 private void tsmi_Click(object sender, EventArgs e)
        {
           
                Clipboard.Clear();//Очистка буфера
                Clipboard.SetText(tsmi.Text);//Копируем в буфер обмена
           
        }
Но он копирует последний элемент в списке, как можно сделать, чтобы копировался именно элемент по которому нажали?
0
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
20.02.2015, 23:18  [ТС]
И так ребят если может кому пригодиться, полистав немного литературы кое, что нашел и применил, и заработало!
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
public partial class Form1 : Form
    {
        
        ToolStripMenuItem tsmi = new ToolStripMenuItem();
////.....
string[] lb = new string[listBox1.Items.Count];
                for (int i = 0; i < lb.Length; i++)
                {
                    lb[i] = listBox1.Items[i].ToString();
                    //Создание ToolStripMenuItem, списком являеться строки в listbox1 
                    tsmi = new System.Windows.Forms.ToolStripMenuItem(listBox1.Items[i].ToString());
                    tsmi.Name = listBox1.Items[i].ToString();
                    tsmi.Size = new System.Drawing.Size(75, 23);
                    tsmi.Click += new EventHandler(tsmi_Click);
                    contextMenuStrip1.Items.Add(tsmi);
                   
                    
                }
/////......
 //Событие происходящее при нажатии на пункт ToolStripMenuItem
        private void tsmi_Click(object sender, EventArgs e)
        {
            string[] lb = new string[listBox1.Items.Count];
           
                
                    Clipboard.Clear();//Очистка буфера
                    Clipboard.SetText((sender as ToolStripItem).Text.ToString());//Копируем в буфер обмена
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2015, 23:18
Помогаю со студенческими работами здесь

Свойство ToolStripMenuItem
Изучаю c# по книге Карли Ватсона, но видимо она немного старовата и в VS 2013 некоторые компоненты изменены. Там есть упражнение с...

ToolStripMenuItem и RadioCheck
Доброго дня Всем! Мне необходимо сделать зависимыми два пункта меню ToolStripMenuItem (зависимый переключатель). Как оказалось в...

ToolStripMenuItem стиль
Как убрать &quot;синевато-голубое&quot; обрамление элемента при наведении мышки?

Обработчик на каждый toolStripMenuItem
Есть кнопка ToolStripDropDownButton, в нем естессно набор ToolStripMenuItem элементов(например 1,2,3...10). Нужно для каждого этого...

Не подсвечивать кнопку ToolStripMenuItem
Как сделать чтобы кнопка toolstripmenuitem c# не подсвечивалась. Или как поставить вертикальный сепаратор?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru