我的c#表单上有很多按钮和标签。我有一个按钮,可以更改所有按钮和标签的文本属性(更改语言按钮)。我是否必须在按钮的单击事件中编写所有项目,或者是否有扫描所有表单控件项目并更改其文本属性的方法。
还有许多其他控件包含标签或按钮。例如,标签被添加到面板的控件中,当我迭代表单控件时,我无法访问此标签。我想一次更改所有项目的文本属性。
谢谢。
答案 0 :(得分:4)
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
;
答案 1 :(得分:1)
假设ASP.NET's
ITextControl
Interface(与Winforms-Controls'Text-Property
类似):
var text = "Hello World";
var allTextControls = this.Controls.OfType<ITextControl>();
foreach(ITextControl txt in allTextControls)
txt.Text = text;
http://msdn.microsoft.com/en-us/library/bb360913.aspx
编辑:您可以轻松地将其作为扩展名(例如,ASP.NET,Winforms用控件替换ITextControl):
public static class ControlExtensions
{
public static void SetControlChildText(this Control rootControl, String text, bool recursive)
{
var allChildTextControls = rootControl.Controls.OfType<ITextControl>();
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)。
答案 2 :(得分:0)
有一个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);
}
}
答案 3 :(得分:0)
如果是winforms
,您应该在此处阅读localizing
您的申请:
答案 4 :(得分:0)
我认为如果你使用的是javascript,你可以简单地浏览DOM并修改按钮和标签的文本。使用jQuery这将非常简单
答案 5 :(得分:0)
对于Web应用程序,您可以使用jQuery轻松完成此操作。看看这个:http://api.jquery.com/category/selectors/
$('label').each(function(){this.value = 'something else';});
对于Winforms,您可以使用:
foreach (var c in Controls.OfType<TextBox>())
c.Text = "TextBox Text";
foreach (var c in Controls.OfType<Label>())
c.Text = "Label text";
但我同意@ionden,您应该考虑本地化您的应用程序。
答案 6 :(得分:0)
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;
}
}}
这样可行。