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

时间:2012-03-20 13:06:02

标签: c#

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

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

谢谢。

7 个答案:

答案 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您的申请:

Walkthrough: Localizing Windows Forms

答案 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;
         }
    }}

这样可行。