为所有文本框控件提供相同的属性
如何为同一表单中的所有文本框赋予相同的属性。
foreach (var textbox in this.Controls.OfType()) { textbox.ContextMenu = new ContextMenu(); }
仅当文本框不是嵌套格式时,上述代码才有效。
在我的项目中,我在tabcontrol中有多个tabpages。 所以我不能实现上面的代码。 但我可以实现以下代码:
foreach (TextBox textbox in this.Controls.OfType().SelectMany(tc => tc.Controls.OfType().SelectMany(page => page.Controls.OfType()))) { textbox.ContextMenu = new ContextMenu(); } foreach (var textbox in this.tabCarInsurance.Controls.OfType()) { textbox.ContextMenu = new ContextMenu(); } foreach (var textbox in this.tabHomeLoans.Controls.OfType()) { textbox.ContextMenu = new ContextMenu(); } foreach (var textbox in this.tabRetirement.Controls.OfType()) { textbox.ContextMenu = new ContextMenu(); }
我在这里为每个tabControl实现。 我仍然不喜欢(因为我有更多的标签页来照顾)。 反正有没有减少上面的代码。
我尝试了下面的代码:( 不工作 )
foreach (var textbox in this.Controls.OfType().OfType()) { textbox.ContextMenu = new ContextMenu(); }
我从上一个问题中获得了上述代码知识。
请帮忙
提前致谢。
private void SetProperty(Control ctr) { foreach(Control control in ctr.Controls) { if (control is TextBox) { control.ContextMenu = new ContextMenu(); } else { if (control.HasChildren) { SetProperty(control); } } } }
如何使用扩展方法来执行此操作,从tabcontrol容器调用…
public static class ControlExtensions { public static void SetContextMenuOnChildTextBoxes(this Control control) { if (control is TextBox) { control.ContextMenu = new ContextMenu(); } if (control.Controls != null) { foreach (Control controlChild in control.Controls) { controlChild.SetContextMenuOnChildTextBoxes(); } } } }
这可以放在一个公共的代码区域,以便可以从任何想要这个function的父母那里调用它。
只需使用递归来遍历所有控件子集:
void SetControl(ContextMenu menu, Control control) { if (control is TextBox) control.ContextMenu = menu; else { foreach (Control c in control.Controls) SetControl(menu, c); } }
它将找到所有文本框并为所有文本框设置一个相同的上下文菜单。
你可以从表单的OnLoad事件处理程序中调用它。 虽然假设您已为表单定义了yourContextMenu
。
private void Form1_Load(object sender, EventArgs e) { SetControl(yourContextMenu, this); }
尝试:
上述就是C#学习教程:为所有文本框控件提供相同的属性分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private void CtxMenu(Control parent) { foreach (Control child in parent.Controls) { if (child is TextBox) { (child as TextBox).ContextMenu = new ContextMenu(); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958496.html