Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 10

Возвратить значение названия нажатой кнопки

03.05.2011, 14:21. Показов 5652. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть массив кнопок, нужно чтобы при нажатии на кнопочку она окрашивалась в красный цвет.
Не могу никак написать метод чтобы он возвращал значение строки создаваемой в цикле,
помогите пожалуйста)
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
        private  void InitializeMyButton()//метод создания двумерного массива кнопочек
        {
            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    _buttons[i, j] = new Button();
                    _buttons[i, j].Width = 28;
                    _buttons[i, j].Height = 28;
                    _buttons[i, j].Location = new Point(_buttons[i, j].Width * i + i*5, _buttons[i, j].Width * j + j*5);
                    _buttons[i, j].Text = string.Format("{0}", i+1);
                    _buttons[i, j].Tag = i;
                    _buttons[i, j].Name = "Button" + i.ToString() +j.ToString();
                    string str = _buttons[i, j].Name;//возвратить эту строку из метода в метод клика
                    this.Controls.Add(_buttons[i,j]);
                    _buttons[i, j].BackColor = Color.FromArgb(96, 121, 250);
                    _buttons[i, j].Click += new System.EventHandler(my_click);//вызов общего события
                } 
                }
            }
 
        private void my_click(object sender, EventArgs e)//метод по осуществлению события клика
        {                  
            for (int i = 0; i < 10;i++ )
            {
                for (int j = 0; j < 10; j++)
                {
                    if(_buttons[i,j].Name==str)
                    _buttons[i, j].BackColor = Color.FromArgb(249, 80, 80);
                }
            }                    
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2011, 14:21
Ответы с готовыми решениями:

Чудесное исключение при изменении названия кнопки
Доброго времени суток! Есть datagridview, поле ввода и кнопка для поиска Меняю название кнопки (свойство text), при запуске возникает...

Сохранить цвет нажатой кнопки
Господа! Что-то не получается сохранить цвет у нажатой кнопки. &lt;Style x:Key=&quot;btn&quot;...

Обработка удерживания кнопки нажатой WPF
Решил самостоятельно сделать NumericUpDown (ну не доверяю я уже готовым вариантам, лучше самому написать). Сделал текстовое поле, две...

14
53 / 52 / 22
Регистрация: 29.11.2010
Сообщений: 143
03.05.2011, 15:11
А если в обработчике написать?
C#
1
(Button)sender.BackColor = Color.FromArgb(249, 80, 80);
Если нужно получать ещё индексы массива по которым лежит кнопка, то тут три варианта:
1. Делать обратное вычисление тому что ты делаешь при установке Location у кнопки
2. Записывать координаты например в саму кнопку
3. Завести хэш таблицу.
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 10
03.05.2011, 15:19  [ТС]
Цитата Сообщение от FuKingBrain Посмотреть сообщение
А если в обработчике написать?
C#
1
(Button)sender.BackColor = Color.FromArgb(249, 80, 80);
Если нужно получать ещё индексы массива по которым лежит кнопка, то тут три варианта:
1. Делать обратное вычисление тому что ты делаешь при установке Location у кнопки
2. Записывать координаты например в саму кнопку
3. Завести хэш таблицу.
нельзя object к Button-у приводить

как получить индекс я знаю..не знаю как описать сам return((
0
53 / 52 / 22
Регистрация: 29.11.2010
Сообщений: 143
03.05.2011, 15:23
Цитата Сообщение от Live fast Посмотреть сообщение
нельзя object к Button-у приводить

как получить индекс я знаю..не знаю как описать сам return((
можно привести:
1. (sender as Button).Text
2. ((Button)sender).Text
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 10
03.05.2011, 15:28  [ТС]
работает!спасибо огромное)
да,теперь индексы только остались
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
03.05.2011, 15:36
работает
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
using System;
using System.Windows.Forms;
 
namespace TempWinFormProject {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            for (int i = 0; i < 10; i++) {
                Button b = new Button();
                b.Name = i.ToString();
                b.Height = 20;
                b.Width = 20;
                b.Left = i * 20;
                b.Top = 0;
                b.Click += new EventHandler(b_Click);
                this.Controls.Add(b);
            }
        }
 
        void b_Click(object sender, EventArgs e) {
            int i;
            foreach (Control c in this.Controls) {
                if (int.TryParse(((Button)c).Name,out i)) {
                    ((Button)c).BackColor = Button.DefaultBackColor;
                }
            }
            ((Button)sender).BackColor = System.Drawing.Color.Red;
        }
    }
}
Добавлено через 2 минуты
я просо создал строку из кнопочек и по клику нужная окрашивается в красный цвет

Добавлено через 3 минуты
а если вам нужно получить индекс кнопочки, то при её создании можете индекс записать в имя контрола и при нажатии парсить его
1
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 10
03.05.2011, 16:13  [ТС]
ob.Label10.Text=(sender as Button).Name;

когда записываю так,не работает(
(в label формы нужно записать название нажатой кнопки)
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
03.05.2011, 18:24
Live fast, запишите вот так (так у меня работает по крайней мере):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        void b_Click(object sender, EventArgs e) {
            int i;
            foreach (Control c in this.Controls) {
                try {
                    if (int.TryParse(((Button)c).Name, out i)) {
                        ((Button)c).BackColor = Button.DefaultBackColor;
                    }
                } catch {
                }
            }
            ((Button)sender).BackColor = System.Drawing.Color.Red;
            label1.Text = (sender as Button).Name;
        }
Добавлено через 5 минут
вот так будет корректнее
C#
1
2
3
4
5
6
7
8
9
10
        void b_Click(object sender, EventArgs e) {
            int i;
            foreach (Control c in this.Controls) {
                if (((c.GetType() == sender.GetType())) && int.TryParse(((Button)c).Name, out i)) {
                    ((Button)c).BackColor = Button.DefaultBackColor;
                }
            }
            ((Button)sender).BackColor = System.Drawing.Color.Red;
            label1.Text = (sender as Button).Name;
        }
0
Заблокирован
04.05.2011, 00:12
Цитата Сообщение от Koran Посмотреть сообщение
вот так будет корректнее
А так будет получше
C#
1
2
3
4
5
private void my_click(object sender, EventArgs e)
        {
            ((System.Windows.Forms.ButtonBase)(sender)).BackColor = Color.Red;
 
        }
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
04.05.2011, 00:31
Sergei_, почему приводить к типу ButtonBase? в таком случае можно привести вообще к классу Control
0
Заблокирован
04.05.2011, 01:14
Koran, ну приведи и покажи, что это работает. Мой код работает. И не надо всего того, что ты там мутил выше.

Добавлено через 22 минуты
В принципе можно и к Control
C#
1
2
3
4
5
private void my_click(object sender, EventArgs e)
        {
            ((Control)(sender)).BackColor = Color.Red;
 
        }
Но только в данной ситуации. Свойство BackColor есть у всех контролов.
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
04.05.2011, 13:01
глубокоуважаемый Sergei_, вас смущает этот код:
C#
1
2
3
4
5
6
            int i;
            foreach (Control c in this.Controls) {
                if (((c.GetType() == sender.GetType())) && int.TryParse(((Button)c).Name, out i)) {
                    ((Button)c).BackColor = Button.DefaultBackColor;
                }
            }
или вот этот:
C#
1
            ((Button)sender).BackColor = System.Drawing.Color.Red;
если первый, то он к окрашиванию кнопки отношения, он окрашивает все созданные кнопки в дефолтный цвет
если второй, то я предпочитаю писать код так чтобы потом после меня прочел другой человек и ему было понятно что я делаю и к тому же у меня наверное есть гнусная привычка писать код поуниверсальнее - чтобы в изменяющихся ситуациях он не задевал других контролов. да и чем отличается второй кусок приведенного мной кода от вашего? тем что Button вы заменили на Control? это вы считаете упрощением?
0
Заблокирован
04.05.2011, 13:32
Цитата Сообщение от Koran Посмотреть сообщение
вас смущает этот код
Извини. Я не проверял твой код, а посмотрел что много написано, поэтому так и выразился. Признаю свою ошибку. Только привести к Control ты сам предложил
0
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 10
04.05.2011, 14:20  [ТС]
Koran, а не могли бы Вы пояснить вот эту строчку?
Цитата Сообщение от Koran Посмотреть сообщение
C#
1
foreach (Control c in this.Controls) { if (((c.GetType() == sender.GetType())) && int.TryParse(((Button)c).Name, out i))
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
04.05.2011, 14:49
это перебор всех контролов на форме.
если тип контрола совпадает с типом контрола, который послал событие - по сути если контрол есть кнопочкой и если имя контрола парсится в интовую переменную, тогда поменять цвет этого контрола на дефолтный цвет.
по сути этот цикл окрашивает все созданные нами кнопочки в дефолтный йцвет и потом окрашивает нажатую кнопку в красный цвет
это делается для того чтобы при следующем нажатии на другую кнопку окрашенная кнопка окрашивалась в дефолтный цвет
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2011, 14:49
Помогаю со студенческими работами здесь

ListView/GridView с кнопками в строках, получить индекс нажатой кнопки
Привет! Пишу приложение на WPF, которое работает с БД с использованием EF Есть у меня Page с ListView, в котором я вывожу различные...

Записать значение в TextBox в зависимости от нажатой кнопки
У меня есть две кнопки и два TextBox'а, как сделать так что бы значение кнопки заносилась в первый или второй TextBox на выбор при клике...

MessageBox отслеживание нажатой кнопки
Добрый день. Столкнулся с одной проблемой, для того что бы в моём приложении выскакивающее уведомление пробивалось поверх всех окон я...

Как в консоли можно получить значение нажатой пользователем клавиши
Как в консоли C# можно получить значение нажатой пользователем клавиши, или узнать значение введенной строки? Помню как то 3 года назад...

Добавление кнопки выполняющей - Цикл обработки названия файлов
Доброго времени суток, немного не понимаю как сделать, чтобы следующее выполнялось при нажатии на кнопку public void...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru