有没有办法以编程方式在CheckBox上生成click事件?我正在寻找与Button.PerformClick();
相当的东西答案 0 :(得分:9)
为什么需要模拟点击,这行代码是否符合您的需求?
myCheckBox.Checked = !myCheckBox.Checked;
如果您需要在CheckBox状态发生变化时执行逻辑,则应使用CheckedChanged
事件而不是Click
。
private void CheckBox1_CheckedChanged(Object sender, EventArgs e)
{
MessageBox.Show("You are in the CheckBox.CheckedChanged event.");
}
答案 1 :(得分:3)
上述解决方案调用Checkbox.CheckedChanged事件。
如果您想明确调用Click事件,可以这样:
checkBox1_Click(checkBox1, null);
答案 2 :(得分:2)
为什么要在CheckBox上生成点击事件?
如果你想切换它的值:
theCheckBox.Checked = !theCheckBox.Checked;
如果要触发某些与Click事件相关的功能,最好将代码从Click
事件处理程序移到可以从任何地方调用的单独方法中:
private void theCheckBox_Click(object sender, EventArgs e)
{
HandleCheckBoxClick((CheckBox)sender);
}
private void HandleCheckBoxClick(CheckBox sender)
{
// do what is needed here
}
当您设计这样的代码时,您可以从任何地方轻松调用该功能:
HandleCheckBoxClick(theCheckBox);
对于大多数控制事件处理程序,可以(也许应该)使用相同的方法;将尽可能多的代码从事件处理程序移动到更可重用的方法中。
答案 3 :(得分:1)
我还在设置一个新的工作站,所以我暂时无法对此进行正确的研究,但是UI Automation可能该复选框可能支持IInvokeProvider,您可以使用{ {3}}方法?
答案 4 :(得分:0)
我认为你不能以这种方式生成点击事件而不直接调用checkBox_Click事件处理程序。但你可以这样做:
checkBox.Checked = !checkBox.Checked;
即使你这样做,仍然会调用CheckedChanged处理程序。
答案 5 :(得分:0)
您没有指定哪种CheckBox控件。 ASP.net还是Windows?
假设有一个web复选框控件,这是使用代码隐藏中的JavaScript调用来解决它...
从后面的代码调用JavaScript函数
第1步添加您的Javascript代码
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
步骤2在webForm中添加1个脚本管理器并添加1个按钮
步骤3在按钮点击事件中添加此代码
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
答案 6 :(得分:0)
Button
PerformClick()
方法验证活动控件,测试活动控件是否可以失去当前焦点。有两种方法可以对 CheckBox
执行相同的操作。方法 #1 是使用反射将 internal
的方法调用到 Control
类:
public class CheckBoxPerformClick : CheckBox {
private readonly static MethodInfo callValidateActiveControl;
private readonly static PropertyInfo propValidationCancelled;
static CheckBoxPerformClick() {
try {
Type ty = typeof(Control);
Type outBool = Type.GetType("System.Boolean&");
callValidateActiveControl = ty.GetMethod("ValidateActiveControl", BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { outBool }, null);
propValidationCancelled = ty.GetProperty("ValidationCancelled", BindingFlags.Instance | BindingFlags.NonPublic);
} catch {}
}
public CheckBoxPerformClick() : base() {
this.Text = "Checkbox";
this.Appearance = Appearance.Button;
}
public void PerformClick() {
if (callValidateActiveControl != null && propValidationCancelled != null) {
try {
Object[] args = new Object[1];
bool validate = (bool) callValidateActiveControl.Invoke(this, args);
bool validatedControlAllowsFocusChange = (bool) args[0];
if (validate || validatedControlAllowsFocusChange) {
bool cancelled = (bool) propValidationCancelled.GetValue(this);
if (!cancelled) {
ResetFlagsandPaint();
OnClick(EventArgs.Empty);
}
}
} catch {
}
}
}
}
方法#2 尝试做同样的事情,但没有反思:
public class CheckBoxPerformClick2 : CheckBox {
public CheckBoxPerformClick2() : base() {
this.Text = "Checkbox";
this.Appearance = Appearance.Button;
}
public void PerformClick() {
bool validate = CanPerformClick();
if (validate) {
ResetFlagsandPaint();
OnClick(EventArgs.Empty);
}
}
// before allowing a click, make sure this control can receive the focus, and that other controls don't require validation
public bool CanPerformClick() {
if (!CanSelect)
return false;
Control c = this.Parent;
while (c != null) {
if (c is ContainerControl)
break;
c = c.Parent;
}
bool valid = true;
if (c is ContainerControl) {
var cc = (ContainerControl) c;
valid = cc.Validate(true);
}
return valid;
}
}