Csharp/C#教程:为所有文本框控件提供相同的属性分享


为所有文本框控件提供相同的属性

如何为同一表单中的所有文本框赋予相同的属性。

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

(0)
上一篇 2021年11月22日
下一篇 2021年11月22日

精彩推荐