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

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

08.03.2020, 09:30. Показов 1470. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru