简体   繁体   中英

Change text property of all items in form

I have many buttons and labels on my c# form. I have a button that changes all butons' and labels' text properties (change language button). Do i have to write all items in click event of button or is there a method that scans all form control items and change their text properties.

There are many other controls that contains labels or buttons. For example a label is added to the control of a panel and when i iterate form controls, i can't reach this label. I want to change all items' text properties at one time.

Thank you.

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


    if (objCtrl  is Button)
    {
        // Assign some text
    }

}

If a CS0120 error happens, change yourFormName.Controls to this.Controls ;

Assuming ASP.NET's ITextControl Interface (works similar for 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

Edit : You could easily make it an extension(eg ASP.NET, for Winforms replace ITextControl with Control):

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);
        }
    }
}

Now you can call it for example in this way:

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

This will apply the given text on every child control implementing ITextControl (like Label or TextBox).

There is a Controls property that contains all controls of your form. You can iterate over it:

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);
    }
}

If it's winforms you should read about localizing your application here:

Walkthrough: Localizing Windows Forms

I think if you are using javascript, you can simply go through the DOM and modify the texts of the buttons and labels. Using jQuery this will be very simple

For a web application, you could do this quite easily with jQuery. Have a look at this: http://api.jquery.com/category/selectors/

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

For Winforms, you can use this:

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

foreach (var c in Controls.OfType<Label>())
    c.Text = "Label text";

But I agree with @ionden, you should consider localizing your application.

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

This will work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM