C# 无论如何,以减少我的文本框常见代码
我有一个表单,其中有许多文本框(在tabcontrollayout中)。我正在禁用所有文本框上的右键单击功能。通过给出以下代码:C# 无论如何,以减少我的文本框常见代码,c#,C#,我有一个表单,其中有许多文本框(在tabcontrollayout中)。我正在禁用所有文本框上的右键单击功能。通过给出以下代码: txtAmountChildPlans.ContextMenu = new ContextMenu(); txtCityHome.ContextMenu = new ContextMenu(); txtCityPersonal.ContextMenu = new ContextMenu(); txtCit
txtAmountChildPlans.ContextMenu = new ContextMenu();
txtCityHome.ContextMenu = new ContextMenu();
txtCityPersonal.ContextMenu = new ContextMenu();
txtCityRetirement.ContextMenu = new ContextMenu();
txtEmailCar.ContextMenu = new ContextMenu();
txtEmailCarIns.ContextMenu = new ContextMenu();
txtEmailHome.ContextMenu = new ContextMenu();
txtEmailOp.ContextMenu = new ContextMenu();
txtEmailPersonal.ContextMenu = new ContextMenu();
txtEmailSenior.ContextMenu = new ContextMenu();
txtEmailTwoIns.ContextMenu = new ContextMenu();
txtFullNamePersonal.ContextMenu = new ContextMenu();
txtManufacturerCar.ContextMenu = new ContextMenu();
txtMobileCar.ContextMenu = new ContextMenu();
txtMobileCarIns.ContextMenu = new ContextMenu();
txtMobileHome.ContextMenu = new ContextMenu();
txtMobileNoRetirement.ContextMenu = new ContextMenu();
txtMobileOp.ContextMenu = new ContextMenu();
txtMobilePersonal.ContextMenu = new ContextMenu();
txtMobileSenior.ContextMenu = new ContextMenu();
txtMobileTwoIns.ContextMenu = new ContextMenu();
txtModelCar.ContextMenu = new ContextMenu();
txtMonthlySalaryCar.ContextMenu = new ContextMenu();
txtNameHome.ContextMenu = new ContextMenu();
txtNameRetirement.ContextMenu = new ContextMenu();
txtPensionRetirement.ContextMenu = new ContextMenu();
txtRegCarIns.ContextMenu = new ContextMenu();
txtRegTwoIns.ContextMenu = new ContextMenu();
编辑:
foreach(此.Controls.OfType()中的var文本框)
{
textbox.ContextMenu=新建ContextMenu();
}
foreach(此.tabCarInsurance.Controls.OfType()中的var文本框)
{
textbox.ContextMenu=新建ContextMenu();
}
foreach(此.tabHealth.Controls.OfType()中的var文本框)
{
textbox.ContextMenu=新建ContextMenu();
}
foreach(此.tabHomeLoans.Controls.OfType()中的var文本框)
{
textbox.ContextMenu=新建ContextMenu();
}
foreach(此.tabRetirement.Controls.OfType()中的var文本框)
{
textbox.ContextMenu=新建ContextMenu();
}
是否有任何方法可以在单函数中编写此函数。还是更少的代码
我觉得这不太好。在c#和css中有什么方法可以给所有文本框赋予相同的属性吗?您可以创建如下方法
private void AssignDataContext(params TextBox[] textboxes)
{
foreach (var textbox in textboxes)
{
textbox.ContextMenu = new ContextMenu();
}
}
您可以枚举所有文本框,并在循环中创建新的上下文菜单
foreach (TextBox textbox in AllTextBoxes(this))
{
textbox.ContextMenu = new ContextMenu();
}
public IEnumerable<TextBox> AllTextBoxes(Control control)
{
List<TextBox> result = new List<TextBox>();
result.AddRange(control.Controls.OfType<TextBox>());
foreach (var childControl in control.Controls.OfType<Control>())
{
result.AddRange(AllTextBoxes(childControl));
}
return result;
}
foreach(所有文本框中的文本框文本框(此))
{
textbox.ContextMenu=新建ContextMenu();
}
公共IEnumerable AllTextBox(控件)
{
列表结果=新列表();
AddRange(control.Controls.OfType());
foreach(control.Controls.OfType()中的var childControl)
{
结果.AddRange(所有文本框(childControl));
}
返回结果;
}
如果没有嵌套控件,您可以按照以下方式执行操作:
foreach(var textbox in Controls.OfType<TextBox>())
{
textbox.ContextMenu = new ContextMenu();
}
foreach(Controls.OfType()中的var textbox)
{
textbox.ContextMenu=新建ContextMenu();
}
如果必须处理嵌套控件,则可以使用扩展方法进行处理
public static class ControlExtensions
{
public static IEnumerable<T> AllControlsOfType<T>(this Control control)
where T : Control
{
T found = control as T;
if(found != null)
{
yield return found;
}
foreach (var child in control.Controls.Cast<Control>())
{
foreach (var item in AllControls<T>(child))
{
yield return item;
}
}
}
}
公共静态类控制扩展
{
公共静态IEnumerable AllControlSoftType(此控件)
其中T:控制
{
T found=作为T的对照;
如果(找到!=null)
{
发现收益率;
}
foreach(control.Controls.Cast()中的var child)
{
foreach(所有控件中的var项(子项))
{
收益回报项目;
}
}
}
}
此代码可以在您的表单中使用
foreach(var textbox in this.AllControlsOfType<TextBox>())
{
textbox.ContextMenu = new ContextMenu();
}
foreach(此.AllControlsOfType()中的var文本框)
{
textbox.ContextMenu=新建ContextMenu();
}
请确保引用包含扩展方法的命名空间。谢谢您的回复。我应该在哪里写这段代码。我是.net的初学者。我是在表单加载事件中编写的,但不起作用。这取决于您希望执行的操作,是否希望在加载表单时禁用它?或者在某个特定事件发生时?在初始化Component()之后在构造函数中工作正常否仍不工作。下面给出initializeComponent();我在另一个tabcontrol中有tabcontrol。初始化控件后,它在任何地方都可以正常工作。这段代码可能不起作用,因为它只适用于主窗体上的文本框。您应该从控件容器中选择控件,而不是从该容器中选择。控件感谢您的响应。我应该在哪里写这段代码。我是.net的初学者。我在表单加载事件中编写了它,但不起作用。我将tabcontrol放在一个tab控件中。VS向
AllControls
显示红色涂鸦错误:不存在。扩展方法将放在单独的静态类中。我将编辑我的答案。
foreach(var textbox in this.AllControlsOfType<TextBox>())
{
textbox.ContextMenu = new ContextMenu();
}