我需要获取x类型的表单上的所有控件.我很确定我曾经使用过这样的代码:
dim ctrls() as Control
ctrls = Me.Controls(GetType(TextBox))
Run Code Online (Sandbox Code Playgroud)
我知道我可以迭代所有控件让孩子们使用递归函数,但是有更简单或更直接的东西,可能如下所示?
Dim Ctrls = From ctrl In Me.Controls Where ctrl.GetType Is Textbox
Run Code Online (Sandbox Code Playgroud) 我在winform中有几个文本框,其中一些在groupbox中.我试图遍历我的表单中的所有文本框:
For Each c As Control In Me.Controls
If c.GetType Is GetType(TextBox) Then
' Do something
End If
Next
Run Code Online (Sandbox Code Playgroud)
但它似乎跳过了groupbox中的那些并且仅循环到表单的其他文本框.所以我为groupbox文本框添加了另一个For Each循环:
For Each c As Control In GroupBox1.Controls
If c.GetType Is GetType(TextBox) Then
' Do something
End If
Next
Run Code Online (Sandbox Code Playgroud)
我想知道:有没有办法循环遍历表单中的所有文本框 - 包括组框内的文本框 - 只有一个For Each循环?或者更好/更优雅的方式来做到这一点?
提前致谢.
虽然我觉得我错过了一些显而易见的东西,但我对此有一个heckuva时间.我有一个继承自的控件,System.Web.UI.WebControls.Button然后实现我已设置的接口.所以想想......
public class Button : System.Web.UI.WebControls.Button, IMyButtonInterface { ... }
Run Code Online (Sandbox Code Playgroud)
在页面的代码隐藏中,我想从ASPX中找到该按钮的所有实例.因为我真的不知道它将是什么类型,只是它实现的接口,这是我在循环控制树时所要做的.事实上,我从来没有必须确定一个对象是否使用接口而不仅仅是测试它的类型.我怎样才能遍历控制树并IMyButtonInterface以干净的方式抽出任何实现的东西(Linq会好的)?
再次,知道它是显而易见的,但刚刚开始大量使用接口,我似乎无法专注于我的谷歌搜索结果:)
编辑: GetType()返回实际的类,但不返回接口,所以我无法测试(例如,它返回" MyNamespace.Button"而不是" IMyButtonInterface").在尝试在递归函数中使用" as"或" is"时,type参数甚至无法在函数内被识别!这很奇怪.所以
if(ctrl.GetType() == typeToFind) //ok
if(ctrl is typeToFind) //typeToFind isn't recognized! eh?
Run Code Online (Sandbox Code Playgroud)
绝对是在这个问题上摸不着头脑.
我正在Windows窗体应用程序中实现复制粘贴.当用户更改应用程序中的focus元素时,我需要为这两个操作启用/禁用条形按钮.
我可以使用以下内容找到当前的聚焦控件:http://www.syncfusion.com/FAQ/windowsforms/faq_c41c.aspx#q1021q,但是如何检测聚焦控件是否已更改?