Как преобразовать строку в элемент управления? - PullRequest
5 голосов
/ 30 мая 2010

у меня есть string MyText, которые содержат "L1"

У меня есть контроль над этикеткой, что его зовут "L1"

есть ли способ прочитать метку L1, используя MyText?

что-то вроде: TMT = MyText.Text

или: TMT = ((Control)MyText.ToString()).Text;

заранее спасибо

Ответы [ 3 ]

4 голосов
/ 30 мая 2010

Найти элемент управления с указанным именем:

var arr = this.Controls.Where(c => c.Name == "Name");
var c = arr.FirstOrDefault();

или поиск в элементах управления указанного типа:

var arr = this.Controls.OfType<Label>();
var c = arr.FirstOrDefault();

Edit:

если у вас есть массив имен элементов управления, вы можете найти их:

var names = new[] { "C1", "C2", "C3" };

// search for specified names only within textboxes
var controls = this.Controls
    .OfType<TextBox>()
    .Where(c => names.Contains(c.Name));

// put the search result into a Dictionary<TextBox, string>
var dic = controls.ToDictionary(k => k, v => v.Text); 

(для всего выше требуется .NET 3.5)

Если у вас его нет, вы можете сделать следующее:

Control[] controls = this.Controls.Find("MyControl1");
if(controls.Lenght == 1) // 0 means not found, more - there are several controls with the same name
{
    TextBox control = controls[0] as TextBox;
    if(control != null)
    {
        control.Text = "Hello";
    }
}
2 голосов
/ 30 мая 2010

Более простой способ сделать что-то вроде этого:

string TMT = "myButton";    
// later in the code ...
(Controls[TMT] as Button).Text = "Hullo";

например.

1 голос
/ 30 мая 2010

Вы можете сделать что-то вроде этого:

        foreach (var c in this.Controls)
        {
            if (c is Label)
            {
                var x = (Label)c;
                if (x.Name == "label1")
                {
                    x.Text = "WE FOUND YOU";
                    break;
                }
            }
        }

Однако, лучшая практика - избегать таких случаев ... Если бы вы могли немного больше рассуждать, зачем вам это нужно, вероятно, будет лучшее решение.

- редактировать: спасибо, что заметили / typeof ..

...