Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141

Работа с массивом элементов класса TextBox. Окрашивание textBox при нажатии мыши на него

08.03.2020, 09:30. Показов 1497. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. До запуска программы не известно, какое количество элементов класса TextBox потребуется, поэтому по ходу создается массив элементов класса TextBox. В чем моя проблема: мне нужно, чтобы при нажатии на любой текст бокс, он окрашивался в цвет, например, синий. Одновременно 2 текст бокса не могут быть окрашены. Я не могу отловить момент, нажатие мышкой, точнее не могу понять, на какой именно текст бокс нажал пользователь. Когда текст боксы создаются не программно, я знаю, что можно применить событие Mousedown для всех текст боксов отдельно и в событие же обратиться к текст боксу напрямую по имени и сделать все, что нужно. В общем виде не могу понять как это сделать.
Пыталась отслеживать по координатам, не вышло:


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
private void Button1_Click(object sender, EventArgs e)
        {
   ...
 for (int i = 0; i < array.Length; i++)         
                    array[i].MouseDown += new System.Windows.Forms.MouseEventHandler(this.textBox_MouseDown);              
         }
 
   void textBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            int colorLast = -1;                                                                  //индекс последнего окрашенного текстбокса
            if (e.Button == MouseButtons.Left)
            {
                if (colorLast != -1) array[colorLast].BackColor = Color.White;//покраска уже выделенного текстбокса в белый(стандартный)
                Point pCLick = new Point();
                pCLick = e.Location;                                                          //координаты клика
                int tempX = pCLick.X;
                int tempY = pCLick.Y;
                for (int i = 0; i < array.Length; i++)
                {
                    Point p = new Point();                                                   //для каждого текстбокса проверка, не входит ли текущий клик в него
                    p = array[i].Location;
                    int SumX = p.X+fixX;                                                   //fixX=100, ширина текстбоксов
                    int SumY = p.Y + fixY;                                                  //fixY=20, высота
                    {
                        if (tempX >= p.X && tempX <= SumX && tempY >= p.Y && tempY <= SumY)
                        {                                                                            //если клик входит, окрашиваем текстбокс
                            colorLast = i;
                            array[i].BackColor = Color.LightCyan;
                        }
 
                    }
                }
            }
Как оказалось, координаты нажатия определяются относительно текстбокса, а не формы в целом, поэтому, так не вышло. Прошу о помощи!!!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2020, 09:30
Ответы с готовыми решениями:

Очистка textBox при нажатии на него
Добрый день(вечер)! Не подскажите как реализовать. Чтобы я нажал на textBox он очищался. И возможна ли реализация того чтоб очищался только...

Перенос из TextBox в другой Textbox при каждом нажатии
Доброго времени суток. Появился такой вопрос. Можно каждый раз при нажатии кнопки переносить текст из одного TextBox в другой Textbox ...

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

2
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
08.03.2020, 10:57
Лучший ответ Сообщение было отмечено AlexPes как решение

Решение

Когда создаете массив текстбоксов присвойте в том же цикле каждому текстбоксу свойство Tag, равное его индексу в массиве. И вместо события мыши задайте событие клика по текстбоксу. В событии клика пропишите окрашивание по номеру Tag, например:
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 Button1_Click(object sender, EventArgs e)
{
    tb = new TextBox[5];
    for (int i = 0; i <= 4; i++)
   {
        // создаем массив 
        tb[i] = new TextBox();
        tb[i].Width = 120;
        tb[i].Height = 45;
        tb[i].Tag = i;
        tb[i].Location = new Point(10, 20 + 60 * i);
        // создаем ссылку на событие клика по текстбоксу 
        tb[i].Click += tB_Click;
        Controls.Add(tb[i]);
    }
}
 
private void tB_Click(object sender, EventArgs e)
{
    int num = Convert.ToInt32((sender as TextBox).Tag);
    tb[num].BackColor = Color.Blue;
}
1
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
08.03.2020, 17:25  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2020, 17:25
Помогаю со студенческими работами здесь

Работа с textbox. Сохранение текста при выходе из программы только если textbox имеет текст
Создал форму в которой есть textbox и ToolStripMenuItem - кнопка выхода из приложения. Идея в том, что если textbox не имеет символов, то...

Работа с TextBox. Текст из multiline TextBox в несколько простых TextBox
Как перенести большой текст из одного мультилайн textbox в несколько обычных textbox у которых задано количество символов(MaxLength) ?

Вывод текста в TextBox при нажатии на один из элементов ListBox
Доброго времени суток! Смотрите: У меня в ListBox есть 3 элемента (Яблоко, Груша, Персик). Мне нужно сделать так, чтобы когда я кликаю...

Нужно, по нажатию на textBox нарисовать линию от него, и до textBox на который наведусь
Помогите, как это сделать.

Очистка TextBox при клике по нему мыши
Есть текст бокс в котором написан текст описывающий его. Нужно чтобы при активировании(помещении в него каретку, клик мыши) его, он...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru