Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 50
Записей в блоге: 1
1

Заполнение множество Label через цикл for. При наведениие на объект сделать двойной щелчок мыши и tooltip на объект

16.11.2018, 22:22. Показов 1868. Ответов 8
Метки нет (Все метки)

Здравствуйте, подскажите. У меня на форме 118 объектов Label. Я заполняю их через цикл for(){}. Для label у меня есть функция создания Label(там так же, что и автоматическом коде Form, когда добавляешь объект Label). Как мне сделать, что бы при двойном щелчке мышью на определенном Label открывалось окно. В начале я сделал, что каждый Label заполняеться отдельно. Если отдельное заполнение сделать, тогда мне ясно, как на каждый Label добавить событие двойного щелчка мыши. Но код вышел огромным и громоздки и к прочему режет глаз. Решил заполнение сделать через цикл, но не знаю, как добавить туда событие мыши.
Все ищу по координатам мыши, но как узнать, тот ли Label нажат? И в цикле Label все время заполняються новые данные, не знаю как добавить код двойного щелчка мыши.

C#
1
2
3
4
5
6
7
8
string[] him_Element = new string[] { "H", "1", "2", "He", "18", "2", "Li", "1", "3", "Be", "2", "3", "B", "14", "3" };
            for (int i = 0; i < him_Element.Length; i += 3)
            {
                my_VarLabel = myFunc_CreateLabel(DockStyle.Fill, 0, 0, 0, 0, him_Element[i], 10, 
                                                 BorderStyle.FixedSingle, 0, ContentAlignment.MiddleCenter);
                my_VarTableLayoutPanel.Controls.Add(my_VarLabel, Convert.ToInt32(him_Element[i + 1]), Convert.ToInt32(him_Element[i + 2]));
                my_VarLabel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.my_VarLabel_MouseDoubleClick);
            }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  Код создания Label
//создание Label
    private Label myFunc_CreateLabel(DockStyle dockLabel, int pointX, int pointY, int sizeX, int sizeY, String textLabel, float sizeFont,
                                     BorderStyle bStyle, int pADING, ContentAlignment textAligment)
    {
        Label myLabel = new Label();
 
        myLabel.BorderStyle = bStyle;
        myLabel.Dock = dockLabel;
        myLabel.Font = new Font("Microsoft Sans Serif", sizeFont, FontStyle.Regular, GraphicsUnit.Point, ((byte)(204)));
        myLabel.Location = new Point(pointX, pointY);
        myLabel.Margin = new Padding(pADING);
        myLabel.Name = "Label";
        myLabel.Size = new Size(sizeX, sizeY);
        myLabel.Text = textLabel;
        myLabel.TextAlign = textAligment;
 
        return myLabel;
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
сейчас у меня так, только 118 раз. Нюанс один, меняеться только текст в Label
Создание Label с текстом "Нужно"
                my_VarLabel = myFunc_CreateLabel(DockStyle.Fill, 0, 0, 0, 0, "Нужно", 10, 
                                                 BorderStyle.FixedSingle, 0, ContentAlignment.MiddleCenter);
                my_VarTableLayoutPanel.Controls.Add(my_VarLabel, 1, 2);
                my_VarLabel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.my_VarLabel_MouseDoubleClick);
 
Создание Label с текстом "Объективный"
                my_VarLabel = myFunc_CreateLabel(DockStyle.Fill, 0, 0, 0, 0, "Объективный", 10, 
                                                 BorderStyle.FixedSingle, 0, ContentAlignment.MiddleCenter);
                my_VarTableLayoutPanel.Controls.Add(my_VarLabel, 1, 2);
                my_VarLabel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.my_VarLabel_MouseDoubleClick);
Это цикл. Но не знаю как сюда правильно впихнуть MouseDoubleClick. К примеру: выберу H, открывается одно окно, выберу He, открывается другое окно.
MouseDoubleClick добавить код открытия окна не проблема. Проблема понять, тот ли Label нажат.
Стоит такая задача надо решить. Там 118 разных комбинаци
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2018, 22:22
Ответы с готовыми решениями:

Как имитировать двойной щелчок правой кнопкой мыши?
Реализовать собственное событие (имитация) нажатие клавиш мыши или клавиатуры. Разработать...

Как программно послать двойной щелчок мыши иконке в трее?
Собснно вопрос в том, как определить хэндл окна, которому нужно передать WM_LBUTTONDBLCLK. Spy++...

Как сделать Клик мыши на нарисованный объект?
Как мне сделать так, чтобы при клике мыши на нарисованный квадрат с буквой отправлял его в Textbox....

Кинематический объект не проходит через объект твердого тела
есть идеи как сделать объект, на который физика не влияет (двигается с помощью transform.position),...

8
311 / 224 / 78
Регистрация: 17.08.2014
Сообщений: 910
17.11.2018, 14:14 2
как минимум при создание элемента имя желательно делать уникальным
C#
1
myLabel.Name = "Label";
так же есть поле Tag с типом object куда можете подставлять уникальные данные вплоть до класса с параметрами добавлять ли нажатие или нет или какую форму открывать. После в методе my_VarLabel_MouseDoubleClick определяете sender если это Label проверяете у него свойство Tag если Tag!=null и Tag приводится к типу параметров то приводите Tag к объекту и вытаскиваете оттуда нужные параметры для создания формы. В любом случае сопоставление надо где то делать. Либо вручную if-ами либо как я указал с помощью параметров.
0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 50
Записей в блоге: 1
17.11.2018, 22:04  [ТС] 3
А примерчик пришли, чтоб понять акк через TAG использовать щелчок мыши. Там ведь еще и надо знать какой Label щеклнули, на каждый Label своя инфа.
0
Модератор
Эксперт .NET
5777 / 4661 / 2934
Регистрация: 20.04.2015
Сообщений: 8,335
17.11.2018, 22:19 4
грехов,
Ссылка на Label, запустивший обработку события передается в обработчик события первым аргументом, т.е. sender в методе my_VarLabel_MouseDoubleClick - это кликнутый Label.
0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 50
Записей в блоге: 1
18.11.2018, 00:17  [ТС] 5
Меня интерисует реализация my_VarLabel_MouseDoubleClick, при условииачале вопроса. что Label добавляется через массив. Подробно было написано в начале вопроса. Мне надо знать какой Label кликнул и тогда запускать обработчик события. На каждый Label свой обработчик события.
0
Модератор
Эксперт .NET
5777 / 4661 / 2934
Регистрация: 20.04.2015
Сообщений: 8,335
18.11.2018, 01:08 6
Лучший ответ Сообщение было отмечено грехов как решение

Решение

Цитата Сообщение от грехов Посмотреть сообщение
Label добавляется через массив
Цитата Сообщение от грехов Посмотреть сообщение
На каждый Label свой обработчик события
Обработчики в массив и назначайте по индексу.
Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button_Click(object sender, EventArgs e)
{
    MouseEventHandler[] mdcs = new MouseEventHandler[] { L1_MDClick, L2_MDClick, L3_MDClick }; //массив обработчиков
    for (int i = 0; i < 3; i++)
    {
        Label lbl = new Label();
        //...
        lbl.MouseDoubleClick += mdcs[i];
    }
}
//Обработчики (отдельные для каждого Label)
private void L1_MDClick(object sender, MouseEventArgs e)
{
    MessageBox.Show("Первый пошел!");
}
private void L2_MDClick(object sender, MouseEventArgs e)
{
    MessageBox.Show("Второй пошел!");
}
private void L3_MDClick(object sender, MouseEventArgs e)
{
    MessageBox.Show("Третий пошел!");
}

Не по теме:

Цитата Сообщение от грехов Посмотреть сообщение
в цикле Label все время заполняються
Что делают? -> Мягкого знака нет в вопросе -> В глаголе, отвечающем на вопрос он тоже не нужен -> Label заполняются
Что будут делать? -> В вопросе есть мягкий знак -> В глаголе тоже нужен мягкий знак -> Label будут заполняться
Grammar Nazi

0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 50
Записей в блоге: 1
18.11.2018, 10:04  [ТС] 7
Не знал, что обработчик можно сделать масссивом. Спасибо.
Мягкий знак )))) Ок!!!
0
1 / 1 / 0
Регистрация: 28.03.2017
Сообщений: 50
Записей в блоге: 1
19.11.2018, 01:18  [ТС] 8
Можно как-то через sender или е проверять какая Label нажата?
0
Модератор
Эксперт .NET
5777 / 4661 / 2934
Регистрация: 20.04.2015
Сообщений: 8,335
19.11.2018, 18:33 9
Лучший ответ Сообщение было отмечено грехов как решение

Решение

грехов,
sender это и есть нажатая Label
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2018, 18:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как создать объект оператором new, если имеется только тип указателя на объект, переданный через шаблон?
Есть шаблон. Точно известно, что его параметр Т это указатель. Как с помощью new создать переменную...

При передвижении мыши объект перестает двигаться
Здравствуйте, ситуация такая: у меня лента, выходящая за пределы экрана справа и слева, условно её...

Зачем при перегрузке оператора >> в параметр включать ссылку на объект, а не сам объект?
Зачем в параметры функции включать ссылку на объект: istream &amp;operator&gt;&gt;(istream &amp;stream, myclass...

Как программно сделать двойной щелчок мышью?
Здравствуйте ! Подскажите как программно сделать двойной щелчок мышью? Мне нужно чтоб программа...

Воспроизведение анимации при наведении мыши на объект + обратная анимация
В C# новичок, задача такова: Есть два объекта, при наведении курсора мыши на &quot;объект 1&quot; &quot;объект 2&quot;...

Перехват мыши при Drag&Drop файлов на объект
допустим, требуется на объект, например на TreeView перетаскивать файлы (напр. из Explorer'а). для...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.