Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在VB Windows窗体中模拟单击事件_Vb.net_Events - Fatal编程技术网

Vb.net 如何在VB Windows窗体中模拟单击事件

Vb.net 如何在VB Windows窗体中模拟单击事件,vb.net,events,Vb.net,Events,我只想连接两个任意控件,这样,如果一个控件被单击,另一个控件应该像被单击一样工作-这是远程可能的吗?看起来应该很简单,但互联网似乎很枯燥,除非我不知道如何恰当地提问。。。我看到了一种“单击”按钮控件的方法,但是如果目标不是按钮怎么办我不知道该控件的单击事件可能触发的任何函数的名称,因此无法直接调用它。我想有一些方法可以使用Windows API,但我找不到任何好的、简单的VB 范例 单击窗体上的标签控件。我想处理那个点击事件,运行一行代码,然后在关联的RadioButton控件上模拟一个点击事件

我只想连接两个任意控件,这样,如果一个控件被单击,另一个控件应该像被单击一样工作-这是远程可能的吗?看起来应该很简单,但互联网似乎很枯燥,除非我不知道如何恰当地提问。。。我看到了一种“单击”按钮控件的方法,但是如果目标不是按钮怎么办我不知道该控件的单击事件可能触发的任何函数的名称,因此无法直接调用它。我想有一些方法可以使用Windows API,但我找不到任何好的、简单的VB

范例

单击窗体上的标签控件。我想处理那个点击事件,运行一行代码,然后在关联的RadioButton控件上模拟一个点击事件


这可能吗?如何执行?

更好的方法是创建一个公共子例程,在单击任一控件时调用该子例程。通过这种方式,单击控件将执行它们自己的代码,这些代码可能会有所不同,也会执行一些常见的代码

如果必须,请调用(System.Windows.Forms.Controls.)Control.InvokeOn单击

甚至是单选按钮


无论触发了哪个控制事件,这都是执行相同代码的方式

Private Sub ClickMe()
  'code to execute
End Sub

Private Sub label1_Click(...) ...
   ClickMe()
End Sub

Private Sub rb_checked(...) ...
   ClickMe()
End Sub

但是,这不会处理附加到目标控件的其他EventHandler,可能还会处理其他一些事情——如果不可能,也不可能——我只是希望有人知道为什么要说“如果必须”呢?互联网似乎同意,因为我找不到任何人推荐它,但它并没有遭到反对,所以使用它有什么坏处呢?它是关于UI和程序布局的分离。如果您真正想要的是具有标签的单选按钮,那么您可以单击这些标签,这就是单选按钮类具有文本属性的原因。我在日常工作中遇到的一个主要问题是“表单驱动设计”,即大量程序代码隐藏在遗留windows程序的事件处理程序中。这使得它很难发现,很难调试,也不可能自动测试。最好使用事件来触发程序代码,如果没有其他原因让您可以重新设计UI。在我的情况下——这似乎是在创建一个您不愿意打开的程序——我有文本框,这些文本框作为标签呈现(TabStop false等),直到按住Ctrl键并单击,此时它们才可编辑。如果在没有Ctrl键的情况下单击,我更希望它们表现得像是另一个控件的一部分,比如普通的文本框或单选按钮。(这是一个个人兴趣项目,所以你被它束缚的机会几乎不存在)所以它们不是标签,而是文本框。整洁的无论如何,这都是正确的UI交互,所以我自己也不会有问题。:)(我是否可以建议,不要为每个控件编写相同的方法,而是向常规textbox类添加一个“target”属性并重新使用?)