【发布时间】:2011-10-25 07:40:31
【问题描述】:
请问如何获取从 checkbox_CheckChanged 事件返回的值?它是一个 winforms 应用程序,表单和复选框都是以编程方式创建的。感谢所有帮助。
【问题讨论】:
-
你的代码在哪里。你能提供那个吗?
请问如何获取从 checkbox_CheckChanged 事件返回的值?它是一个 winforms 应用程序,表单和复选框都是以编程方式创建的。感谢所有帮助。
【问题讨论】:
Controls 事件处理程序始终为“无效”,您无法更改return type。相反,您可以采用外部变量,并且仅在发生 CheckedChanged 事件时更改该值。
public bool checkedthecheckbox { get; set; }
CheckBox testchbox = new CheckBox();
private void Form1_Load(object sender, EventArgs e)
{
testchbox.CheckedChanged += new EventHandler(testchbox_CheckedChanged);
}
void testchbox_CheckedChanged(object sender, EventArgs e)
{
if (testchbox.Checked)
checkedthecheckbox = true;
else
checkedthecheckbox = false;
}
【讨论】:
你可以从 'sender' 对象中获取值。
CheckBox chk = (CheckBox) sender;
bool result = chk.Checked;
【讨论】:
您可以通过从事件参数转换发送者对象来获取复选框的状态:
public void Method1()
{
CheckBox checkBox = new CheckBox();
checkBox.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
}
void checkBox_CheckedChanged(object sender, EventArgs e)
{
CheckBox c = (CheckBox)sender;
bool resutlt = c.Checked;
}
希望这会有所帮助!
【讨论】:
您可以使用 CheckState.Checked 或 CheckState.Unchecked,它们是用 C# 构建的。示例:
for (int i = 0; i < lsbx_layers.Items.Count; i++) {
if (lsbx_layers.GetItemCheckState(i) == CheckState.Checked) {
//set boolean variable to true
} else if (lsbx_layers.GetItemCheckState(i) == CheckState.Unchecked) {
//set boolean variable to false
}
}
【讨论】:
我有一个替代方法,可以将常规复选框更改事件更改为直接为您提供更改后的Checked 值的事件。
例如,您可以这样使用它:
var myForm = new MyForm();
myForm.CheckBoxChanged += v =>
{
Console.WriteLine("The value of the checkbox changed to {0}", v);
};
这是类定义:
public class MyForm
{
public event Action<bool> CheckBoxChanged;
private CheckBox testchbox = new CheckBox();
private void Form1_Load(object sender, EventArgs e)
{
testchbox.CheckedChanged += (s, e) =>
{
var cbc = this.CheckBoxChanged;
if (cbc != null)
{
cbc(testchbox.Checked);
}
};
}
}
我希望这会有所帮助。
【讨论】: