Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
.NET 4.x

Изменение одного свойства у нескольких компонентов одновременно

03.05.2014, 08:36. Показов 4920. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые форумчане!
Передо мной встала задача создать инженерный калькулятор. При выборе "Десятичной системы счисления" программа должна изменять свойство Enabled кнопок A-F ( для 16-й системы счисления) на False. Если работать примитивно, то получается следующее:

C#
1
2
3
4
5
6
7
8
9
if (radioButton5.Checked == true)
            {
                button19.Enabled = false;
                button20.Enabled = false;
                button21.Enabled = false;
                button22.Enabled = false;
                button23.Enabled = false;
                button24.Enabled = false;
            }
А такого вида кусочков кода потребуется еще не мало. Подскажите пожалуйста, как можно проделать эти манипуляции в цикле? Пыталась разобраться с коллекцией Controls, но не смогла понять, как обратиться к конкретным кнопкам.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2014, 08:36
Ответы с готовыми решениями:

Как менять свойства нескольких JButton одновременно?
Всем салют, у меня есть много Jбатонов и возникла необходимость у всех изменить шрифт. Как можно объединить их, чтобы не загромождать код,...

Как изменить свойства сразу у нескольких компонентов
void __fastcall TForm1::Button3Click(TObject *Sender) { Edit4->Text = Edit4->Text +Button3->Caption; } ...

Генерация одного файла с нескольких машин одновременно
Доброго времени! Необходимо сгенерировать лог-файл по запросу. Есть сотня вирутальных машин с общим сетевым диском Z. На каждом ПК...

12
Заблокирован
03.05.2014, 09:08
Sita RaiNy, добрый день
C#
1
2
            for (int i = 19; i < 25; i++)
                Controls["button" + i].Enabled = false;
i меняете в зависимости от имени кнопки
1
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
03.05.2014, 11:51  [ТС]
Ev_Hyper, выдает ошибку "Ссылка на объект не указывает на экземпляр объекта." на следующий код:

C#
1
2
3
4
5
if (radioButton5.Checked == true)
            {
                for (int i = 19; i < 25; i++)
                    Controls["button" + i].Enabled = false;
            }
в чем может быть проблема?
0
Заблокирован
03.05.2014, 11:59
Sita RaiNy, возможно с тем, что кнопки названы по другому.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
03.05.2014, 12:04
Ev_Hyper, по названию не самый лучший вариант

Sita RaiNy,
запиши в теги кнопок которые хочешь сразу менять например = 1
потом пройдись по всем контроллам и проверяй тег на 1. при равенстве изменяй свойство
0
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
03.05.2014, 12:11  [ТС]
Metall_Version, честно говоря, не очень Вас поняла( Что Вы имеете в виду под тегами?
ЗЫ: извините за непонятливость =(
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
03.05.2014, 12:24
Sita RaiNy, слишком коротко тут не выйдет, поскольку так или иначе все кнопки проверять на соответствие. Можно сделать таким вот образом.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //Обработка изменения состояния радиобатона
            radioButton1.CheckedChanged += delegate
            {
                //Если активен кнопки деактивируются
                if (radioButton1.Checked)
                {
                    foreach (Control c in this.Controls)
                    {
                        if (c is Button)
                        {
                            string text = ((Button)c).Text;
                            if (text == "A" ||
                                text == "B" ||
                                text == "C" ||
                                text == "D" ||
                                text == "E" ||
                                text == "F")
                            {
                                c.Enabled = false;
                            }
                        }
                    }
                }
                    //Если не активен кнопки активируются
                else
                {
                    foreach (Control c in this.Controls)
                    {
                        if (c is Button)
                        {
                            string text = ((Button)c).Text;
                            if (text == "A" ||
                                text == "B" ||
                                text == "C" ||
                                text == "D" ||
                                text == "E" ||
                                text == "F")
                            {
                                c.Enabled = true;
                            }
                        }
                    }
                }
            };
        }
    }
}
На форме кнопки и два радиобатона. Соответственно текст на кнопках от A до F.
0
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
03.05.2014, 12:43  [ТС]
insite2012, я Вас поняла, спасибо) хотя, как оказалось, исходный код все-таки короче. В любом случае Ваша помощь мне пригодилась.
0
Заблокирован
03.05.2014, 12:49
Metall_Version, вы не могли бы объяснить, почему нежелательно перебирать кнопки по названию, и какой вариант тут будет лучше?
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
03.05.2014, 12:51
Ev_Hyper, прошу прощения , думал вы по тексту перебираете . по названию все ок
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
03.05.2014, 13:03
Лучший ответ Сообщение было отмечено Sita RaiNy как решение

Решение

Sita RaiNy, вот то же самое через LINQ. Так будет короче.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //Обработка изменения состояния радиобатона
            radioButton1.CheckedChanged += delegate
            {
                var btnArray = (from n in this.Controls.OfType<Button>()
                                where n.Text == "A" || n.Text == "B" || n.Text == "C" ||
                                      n.Text == "D" || n.Text == "E" || n.Text == "F"
                                select n);
 
                //Если активен кнопки деактивируются
                if (radioButton1.Checked)
                {
                    foreach (Button b in btnArray)
                        b.Enabled = false;
                }
                    //Если не активен кнопки активируются
                else
                {
                    foreach (Button b in btnArray)
                        b.Enabled = true;
                }
            };
        }
    }
}
1
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
03.05.2014, 20:08
Лучший ответ Сообщение было отмечено Sita RaiNy как решение

Решение

зачем такие сложности?
лучше поместить все кнопки с буквенными бутонами на контрол типа panel и отключать его - кода будет одна строка.
1
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
04.05.2014, 13:29  [ТС]
hepper, блин, хорошая идея. Я как-то даже не подумала, что можно так просто сделать. Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2014, 13:29
Помогаю со студенческими работами здесь

Синхронное изменение размера нескольких форм одновременно
Здравствуйте! Допустим у маня есть три формы , как сделать так чтобы при расширении на весь экран одной формы(окна) другие тоже...

Изменение одного свойства группе объектов
Встала такая задача, нужно нескольким элементам имеющие называния vvp1 vvp2 vvp3... И т.д. Присвоить свойству visible 0, т.е. Сделать...

Отключение/включение (активация/де активация) одновременно всех (нескольких) компонентов на форме
Добрый день коллеги! Возник такой вопрос. Допустим, есть форма с множеством элементов ввода, кнопок, в общем всевозможных компонентов....

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

Создать Generic Mapper, который будет мапить схожие свойства одного объекта в свойства другого
Нужно создать generic mapper, который будет мапить схожие(similar) свойства одного объекта в свойства другого(по имени и типу) меду двумя...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru