c# обновить combobox используя checkbox
Имеются combobox и checkbox, а так же textbox, куда помещаются данные из combobox'a.
Как мне при нажатии на checkbox обновлять\перевыбирать значение combobox? (грубо говоря, повторно вызвать выбор того же значения combobox'a)
Пробовал различные варианты, но срабатывает только единожды.
private void chkbx_codes_Click(object sender, EventArgs e)
{
cb_eic.SelectedIndexChanged += cb_eic_SelectedIndexChanged;
}
private void chkbx_codes_CheckStateChanged(object sender, EventArgs e)
{
CheckBox checkBox = (CheckBox)sender; // приводим отправителя к элементу типа CheckBox
if (checkBox.Checked == true)
{
chkbx_codes.Click += new EventHandler(cb_eic_SelectedIndexChanged);
}
else
{
chkbx_codes.Click += new EventHandler(cb_eic_SelectedIndexChanged);
}
cb_eic.Refresh();
}
private void chkbx_codes_CheckedChanged(object sender, EventArgs e)
{
CheckBox checkBox = (CheckBox)sender; // приводим отправителя к элементу типа CheckBox
if (checkBox.Checked == true)
{
chkbx_codes.Click += new EventHandler(cb_eic_SelectedIndexChanged);
}
else
{
chkbx_codes.Click += new EventHandler(cb_eic_SelectedIndexChanged);
}
//cb_eic.Refresh();
// cb_eic.SelectedIndexChanged += cb_eic_SelectedIndexChanged;
}
private void chkbx_codes_KeyPress(object sender, KeyPressEventArgs e)
{
cb_eic.SelectedIndexChanged += cb_eic_SelectedIndexChanged;
}
введите сюда код
При первом нажатии\включении\выключении checkbox'a срабатывает, при повторном ничего не происходит и при клике на текущее выбранное значение combobox'a ничего не происходит
P.S. Данные переключения мне нужны для того, чтобы в зависимости от выбранного параметра checkbox'a, основной combobox переключал вспомогательные combobox2 или combobox3
Ответы (1 шт):
cb_eic - это что? Вот как угадать по этому набору символов, что скрывается под этим названием? Всегда давайте говорящие имена всем своим переменным (и контролам, соответственно, тоже).
Как мне при нажатии на checkbox обновлять\перевыбирать значение combobox? (грубо говоря, повторно вызвать выбор того же значения combobox'a)
Если я правильно понял суть вопроса, то вот код, иллюстрирующий желаемое поведение:
using System;
using System.Windows.Forms;
namespace WinForm
{
public partial class Form1 : Form
{
ComboBox comboBox;
CheckBox checkBox;
TextBox textBox;
public Form1()
{
//InitializeComponent();
comboBox = new ComboBox { Parent = this };
checkBox = new CheckBox { Parent = this, Top = comboBox.Bottom + 20 };
textBox = new TextBox { Parent = this, Top = checkBox.Bottom + 20 };
comboBox.DataSource = (new string[] { "one", "two", "tre" });
comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
checkBox.CheckedChanged += CheckBox_CheckedChanged;
}
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
ComboBox_SelectedIndexChanged(comboBox, EventArgs.Empty);
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
Console.Beep(); // просто для восприятия на слух
textBox.Text = comboBox.Text;
}
}
}
В обработчике события CheckedChanged вызываем SelectedIndexChanged, передавая в него параметры.
Более правильным способом будет вынести код из обработчика события в отдельный метод. И в обоих местах вызывать именно этот метод.
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
ProcessComboBox();
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ProcessComboBox();
}
private void ProcessComboBox()
{
Console.Beep();
textBox.Text = comboBox.Text;
}
Перед вызовом ProcessComboBox() и после него может иметься дополнительный код.
Метод может иметь параметры:
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
ProcessComboBox("checkBox");
}
private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
ProcessComboBox("comboBox");
}
private void ProcessComboBox(string value)
{
Console.Beep();
textBox.Text = comboBox.Text + " " + value;
}
