我在窗口表单上有一个按钮,我正在调用按钮的 PerformClick() 事件。
现在,如果我将此按钮显示为false,则表示 PerformClick() 事件未执行。
可以吗?如果是,那么我想在表格上隐藏按钮我该怎么办?我已经使按钮的 背景颜色 与 backcolor 形式相同,但它仍然可见。
如果我使用标签,那么除了改变其可见属性之外,只要使其背景颜色与表单的背景颜色相同并保持文本为null,就可以使其不可见。并且还有标签的click()事件但我没有找到标签的PerformClick()事件。
答案 0 :(得分:4)
在提出任何事件之前,PerformClick会专门检查该按钮是否“可用”。这样,您无需在按钮被禁用,隐藏等时添加额外的保护代码
不是在按钮上调用PerformClick 方法,而是为了不只是将按钮的Click事件处理程序中的代码放入一个方法中,然后从两个地方调用它。
private void button1_Click(object sender, EventArgs e) {
DoSomething();
}
private void menu_Click(object sender, EventArgs e) {
DoSomething();
}
private void DoSomething() {
MessageBox.Show("Something done!");
}
答案 1 :(得分:1)
我不确定我是否理解您的问题,但以下是一些可能(?)给您答案的帖子:
请参阅this post (similar question)和this post (transparent button)
答案 2 :(得分:1)
有两种方法可以有效地使Button不可见,但仍然能够调用其PerformClick()事件:
通过更改其位置属性,将Button移动到Form或其他Container对象的可见区域之外。
从Form的Controls集合或其他Container对象中删除Button。
是的,使用这两种技术你可以“带回”Button:在第一种情况下,重新设置Location属性;在第二种情况下,将Button添加回Form或从中删除的其他Container对象(将恢复位置)。
我认为这两种技术都是“可怕的”:它们是黑客攻击:Josh Einstein上面的回答,我相信它会让你走上正轨。
你需要解释为什么你说,为了回应Josh的建议你将代码分成“共享方法”:“因为如果我直接调用我从按钮的click()事件中调用的方法,那么它是未处理或未执行“直接调用方法时,为什么不处理“处理”或“执行”?
答案 3 :(得分:0)
也许我不理解这个问题,但您可以将按钮设置为false。
button1.Visible = false;
答案 4 :(得分:0)
我有类似的问题,我发现了一种不同的解决方法。 为了帮助其他人:
您可以使用Control(form)方法InvokeOnClick来强制点击Visible = False按钮
this.InvokeOnClick(button1, EventArgs.Empty);
如果您无权访问Form,可以尝试button1.Parent.InvokeOnClick ...
由于 (由Stoitcho Goutsev在其他论坛发表)
Raffaeu提醒我“control.InvokeOnClick是一种受保护的方法”