Windows 有没有更有效的方法在单选按钮上设置变量;是什么改变了事件?
我的一个应用程序中有16个单选按钮。。 我必须根据选择的变量设置一个变量。。我已经产生了一些非常丑陋的代码来做这件事Windows 有没有更有效的方法在单选按钮上设置变量;是什么改变了事件?,windows,events,forms,radio-button,Windows,Events,Forms,Radio Button,我的一个应用程序中有16个单选按钮。。 我必须根据选择的变量设置一个变量。。我已经产生了一些非常丑陋的代码来做这件事 private void Foo_CheckedChanged(object sender, EventArgs e) { convertSource = 1; } private void Bar_CheckedChanged(object sender, EventArgs e) { convertSource = 2
private void Foo_CheckedChanged(object sender, EventArgs e)
{
convertSource = 1;
}
private void Bar_CheckedChanged(object sender, EventArgs e)
{
convertSource = 2;
}
private void Baz_RadioButton_CheckedChanged(object sender, EventArgs e)
{
convertSource = 3;
}
现在,我一直在考虑这个问题,说实话,我认为可能有一种方法可以通过开关来实现。。我只是无法在脑海中把它概念化
如果有人能告诉我一个更有效的方法,我会非常感激。
像这样一件简单的事情占用了50到70行代码,这真的让我很烦
谢谢,
cpatton就我个人而言,如果有超过2或3个选项,我讨厌单选按钮,
组合框
是从多个选项中选择一个选项的更好控件
但是,解决问题的一个快速方法是将每个单选按钮的convertSource值放入该控件的标记
属性(在设计器中执行此操作)。将此方法添加到表单中:
private void rb_CheckedChanged(object sender, EventArgs e)
{
convertSource = (int)((RadioButton)sender).Tag;
}
在表单的load事件中(假设这些单选按钮都位于一个组框上),按如下方式分配处理程序:
foreach (RadioButton rb in groupBox1.Controls)
{
rb.CheckedChanged += rb_CheckedChange;
}
请确保删除手动添加的所有事件处理程序(如
Foo_CheckedChanged
)。就我个人而言,如果有两个或三个以上的选项,我讨厌单选按钮-组合框是从多个选项中选择一个选项的更好控件
但是,解决问题的一个快速方法是将每个单选按钮的convertSource值放入该控件的标记
属性(在设计器中执行此操作)。将此方法添加到表单中:
private void rb_CheckedChanged(object sender, EventArgs e)
{
convertSource = (int)((RadioButton)sender).Tag;
}
在表单的load事件中(假设这些单选按钮都位于一个组框上),按如下方式分配处理程序:
foreach (RadioButton rb in groupBox1.Controls)
{
rb.CheckedChanged += rb_CheckedChange;
}
确保删除手动添加的所有事件处理程序(如Foo\u CheckedChanged
)。可以将同一处理程序绑定到多个事件。您可以编写一个处理程序并检查哪个是发送方:
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
if (sender == Foo_RadioButton) {
convertSource = 1;
} else if (sender == Bar_RadioButton) {
convertSource = 2;
} else if (sender == Baz_RadioButton) {
convertSource = 3;
} else {
// Error
}
}
或者更简洁地说:
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
List<RadioButton> radioButtons = new List<RadioButton> {
Foo_RadioButton,
Bar_RadioButton,
Baz_RadioButton
};
int index = radioButton.IndexOf((RadioButton)sender);
convertSource = index + 1;
}
private void单选按钮\u CheckedChanged(对象发送方,事件参数e)
{
列表单选按钮=新列表{
Foo_单选按钮,
Bar_单选按钮,
巴祖单选按钮
};
int index=radioButton.IndexOf((radioButton)发送方);
convertSource=index+1;
}
您可以将此处理程序绑定到属性窗口中每个单选按钮的CheckedChanged事件。您可以将同一处理程序绑定到多个事件。您可以编写一个处理程序并检查哪个是发送方:
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
if (sender == Foo_RadioButton) {
convertSource = 1;
} else if (sender == Bar_RadioButton) {
convertSource = 2;
} else if (sender == Baz_RadioButton) {
convertSource = 3;
} else {
// Error
}
}
或者更简洁地说:
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
List<RadioButton> radioButtons = new List<RadioButton> {
Foo_RadioButton,
Bar_RadioButton,
Baz_RadioButton
};
int index = radioButton.IndexOf((RadioButton)sender);
convertSource = index + 1;
}
private void单选按钮\u CheckedChanged(对象发送方,事件参数e)
{
列表单选按钮=新列表{
Foo_单选按钮,
Bar_单选按钮,
巴祖单选按钮
};
int index=radioButton.IndexOf((radioButton)发送方);
convertSource=index+1;
}
您可以为每个单选按钮将此处理程序绑定到属性窗口中的CheckedChanged事件。通过更有效的方法,您的意思是更简单/更干净/更少的代码吗?如果你说的效率是指运行时性能,我怀疑它能比你已经在做的快得多。我认为他说的效率是指编写它所需的时间,而不是它运行的速度。更有效的方法是指更简单/更干净/更少的代码吗?如果你说的效率是指运行时性能,我怀疑它能比你已经在做的快得多。我想他指的效率是指编写它所需的时间,而不是它运行的速度。啊,非常感谢!我将为我的应用程序的这一部分使用一个组合框,因为它更有意义。。不过,我没有想过只使用一个处理程序来检查发送者。这是个好主意,我非常感激。可能会在我的应用程序的另一部分使用它:)啊,非常感谢!我将为我的应用程序的这一部分使用一个组合框,因为它更有意义。。不过,我没有想过只使用一个处理程序来检查发送者。这是个好主意,我非常感激。可能会在我的应用程序的另一部分使用它:)啊,谢谢!我不知道为什么我决定用单选按钮来完成这项任务。。组合框更有意义,所以我想我会选择它。谢谢你,我真的很感谢你的时间和努力。啊,谢谢你!我不知道为什么我决定用单选按钮来完成这项任务。。组合框更有意义,所以我想我会选择它。谢谢你,我真的很感谢你的时间和努力。