更改表单中所有项目的文本属性

我的c#表格上有很多按钮和标签。 我有一个按钮,可以更改所有按钮和标签的文本属性(更改语言按钮)。 我是否必须在按钮的单击事件中编写所有项目,或者是否有扫描所有表单控件项目并更改其文本属性的方法。

还有许多其他控件包含标签或按钮。 例如,标签被添加到面板的控件中,当我迭代表单控件时,我无法访问此标签。 我想一次更改所有项目的文本属性。

谢谢。

foreach (Control objCtrl in yourFormName.Controls) { if (objCtrl is Label) { // Assign Some Text } if (objCtrl is Button) { // Assign some text } 

}

如果发生CS0120错误, yourFormName.Controls更改为this.Controls ;

假设ASP.NET's ITextControl接口 (类似于Winforms-Controls的Text-Property ):

 var text = "Hello World"; var allTextControls = this.Controls.OfType(); foreach(ITextControl txt in allTextControls) txt.Text = text; 

http://msdn.microsoft.com/en-us/library/bb360913.aspx

编辑 :你可以轻松地使它成为一个扩展(例如ASP.NET,Winforms用Control替换ITextControl):

 public static class ControlExtensions { public static void SetControlChildText(this Control rootControl, String text, bool recursive) { var allChildTextControls = rootControl.Controls.OfType(); foreach (ITextControl txt in allChildTextControls) txt.Text = text; if (recursive) { foreach (Control child in rootControl.Controls) child.SetControlChildText(text, true); } } } 

现在你可以用这种方式调用它:

 protected void Page_Load(object sender, EventArgs e) { Page.SetControlChildText("Hello World", true); } 

这将在每个实现ITextControl子控件(如Label或TextBox)上应用给定的文本。

如果它是winforms你应该在这里阅读localizing你的应用程序:

演练:本地化Windows窗体

我想如果你使用的是javascript,你可以简单地浏览DOM并修改按钮和标签的文本。 使用jQuery这将非常简单

对于Web应用程序,您可以使用jQuery轻松完成此操作。 看看这个: http : //api.jquery.com/category/selectors/

 $('label').each(function(){this.value = 'something else';}); 

对于Winforms,您可以使用:

 foreach (var c in Controls.OfType()) c.Text = "TextBox Text"; foreach (var c in Controls.OfType 

但我同意@ionden,你应该考虑本地化你的应用程序。

有一个Controls属性,包含表单的所有控件。 你可以迭代它:

 foreach(var control in Controls) { var button = control as Button; if(button != null) button.Text = Translate(button.Text); else { var label = control as Label; if(label != null) label .Text = Translate(label .Text); } } 
  foreach( Control ctlparent in this.Controls) { if(ctlparent is Panel or ctlparent is GroupBox) { foreach(Control ctl in ctlparent.Controls) { if(ctl is Label or ctl is Button) { ctl.Text= newtext; } }} 

这会奏效。