所以,基本上,我在给这个虚拟键盘编程,我必须为每个键单独写代码,也就是按钮。
这是可笑的乏味,我想知道是否有可能有一个单一的语句,可以找到文本的关键(Button
)按下。
我现在的代码是这样的:
textbox.TextBox1.Text = textbox.TextBox1.Text + zh.Text
zh
是用于上下文的Button
的名称。
现在,我必须在每个Button的Click
事件中反复复制和粘贴这个代码字符串。
我认为有一种方法可以让代码捕获我按下的任何Button
的文本,然后将该文本发送到TextBox
。
如果这是可行的话,有没有人知道怎样做呢?
1条答案
按热度按时间mpgws1up1#
使用设计器,将单个Click事件分配给所有Button,然后使用
sender
对象,将其强制转换为Button或Control:但是最后的事件处理程序会有很多Buttons引用附加到它上面,这可不是什么好事。
使用 * classic * 委托在代码中创建一个事件处理程序,并将其分配给所有Button
AddHandler [Event], AddressOf [HandlerMethodName]
假设您的Button有一个公共的部分名称,这里是**
"btnKey"
**。您还可以使用Tag属性,并为Keys Buttons指定一个特定值。
然后在
Where()
中写入:b.Tag.ToString().Contains("[Some Common Identifier]")
.注意,
Tag
属性值的类型是Object
,因此Contains()
只是一个普通的例子,它可以计算为Integer类型或其他类型。Tag
属性。正如Andrew Morton在注解中建议的那样,这里使用DirectCast()操作符执行强制转换,因为
sender
是一个Button,而且Button也是从Control派生的。您可以使用 * 轻量级 *DirectCast()
来 * 查看 *sender
作为按钮或控件(因为Button派生自Control,而Text
属性继承自Control)并访问其Text
属性。来自文档:
[
DirectCast()
](...)在与数据类型Object相互转换时,它可以提供比CType稍好的性能。我在第一个示例中保留CType()作为视觉辅助。
VB.NET中DirectCast()与CType()的区别
在代码中创建一个事件处理程序,并使用Lambda作为方法委托将其分配给所有Button: