更改表单中所有项目的文本属性
我的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; } }}
这会奏效。