Конференція vbstreets - перегляд теми - група checkbox

Треба зробити групу з трьох прапорців (Red, Green, Blue) типу CheckBox (саме checkbox). Щоб після натискання вибирався колір мальованої об'єкта.

Я новачок в C #. Пробував вішати перевірку на CheckStateChanged і на CheckChanged, галки зайві знімаються, але натиснута ставиться тільки з другого разу. Підкажіть.


Код: Виділити все private void checkBox3_EnabledChanged (object sender, EventArgs e)
if (this.checkBox1.Checked == true) this.checkBox1.Checked = false;
if (this.checkBox2.Checked == true) this.checkBox2.Checked = false;
> [Viper]. Використовуй тег CODE!

1. Чому б не застосувати RadioButton'и просто?
2. EnabledChanged - це щось не те.
3. CheckStateChanged і CheckChanged спрацьовують не тільки на установку прапорця, але і на зняття. Треба ще перевіряти поточний стан.

Ура! Вийшла нова версія Unreal Commаnder'а!

Дивно. Але ваш код у мене не заробив. а таке для кожного з CheckBox пішло. За що вам величезне спасибі.

Код: Виділити все private void checkBox3_CheckedChanged (object sender, EventArgs e)
if (checkBox3! = null checkBox3.Checked)
checkBox1.Checked = false;
checkBox2.Checked = false;
>
> [Viper]. Використовуй тег CODE!

kosten писал (а): Дивно. Але ваш код у мене не заробив.


Мій код в Form_Load обробляє всі CheckBox'и лежать безпосередньо на формі. Якщо у тебе вони лежать в іншому контролі, то треба замість this написати його. Або явно скласти ці CheckBox'и в список і повісити на них обробник.
Крім цього, треба було прибрати всі твої обработчкікі. Обробники вішаються ланцюжком, тому і знак + =. а не =.
Ти хоч предаставляет, як він повинен працювати?

kosten писал (а): а таке для кожного з CheckBox


Перевірка на null - зайва. Якщо тільки ти явно не привласнюєш null.
По суті, в моєму коді вона теж зайва, якщо припускати, що обробник може бути викликаний тільки з CheckBox'ом як sender'а.
До речі, я ще в першому повідомленні написав "Треба ще перевіряти поточний стан." - якраз це і мав на увазі.

kosten писал (а): За що вам величезне спасибі.

PS: Використовуй тег [code] все-таки.

Ура! Вийшла нова версія Unreal Commаnder'а!

Ось так можна зробити, щоб в рамках кожної групи можна було вибрати не більше одного CheckBox'а: Код: Виділити все public partial class Form1. Form
public Form1 ()
InitializeComponent ();
>

private void Form1_Load (object sender, EventArgs e)
ModifyAllCheckBoxes (this);
>

private void ModifyAllCheckBoxes (Control parent)
foreach (Control ctrl in parent.Controls)
CheckBox chk = ctrl as CheckBox;

if (chk! = null)
chk.CheckedChanged + = Chk_CheckedChanged;

private void Chk_CheckedChanged (object sender, EventArgs e)
CheckBox cur = sender as CheckBox;

if (cur! = null cur.Checked)
foreach (Control ctrl in cur.Parent.Controls)
if (! object.ReferenceEquals (ctrl, cur))
CheckBox chk = ctrl as CheckBox;

Ура! Вийшла нова версія Unreal Commаnder'а!