2013-10-10 3 views
-1

Как я могу получить текст элемента управления, который был создан во время выполнения?C# - Получить текст управления, созданный во время выполнения

private void button1_Click(object sender, EventArgs e) 
{ 
    Button btn = new Button(); 
    btn.Top = 50; 
    btn.Left = 50; 
    btn.Name = "mybtn"; 
    btn.Text = "My button"; 
    this.Controls.Add(btn); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    Console.WriteLine(mybtn.text); // error 
} 
+1

'Console.WriteLine (this.Controls.Find («mybtn») [0] .text);' – Damith

+1

Предположительно в Вашем приложении не жёстко текст этой кнопки, она основана на какой-то другой тип данных. (Если он жестко закодирован, просто оба обработчика ссылок ссылаются на одну строку 'const'). Вместо того, чтобы «хранить ваши данные в пользовательском интерфейсе» и иметь второй обработчик кликов, чтобы попасть в эту кнопку, чтобы получить ее данные, получите данные из исходного источника, которые кнопка использовала для определения того, что она должна делать. Не зная больше о вашей программе, я не могу дать конкретных подробностей. – Servy

ответ

2
var b = this.Controls.OfType<Button>().FirstOrDefault(b => b.Name == "mybtn"); 
if (b == null) { return; } 

Console.WriteLine(b.Text); 
1
private void button2_Click(object sender, EventArgs e) 
{ 
    // find mybtn 
    Button mybtn = this.Controls.FirstOrDefault(i => i.Name == "mybtn") as Button; 
    if (mybtn != null) 
    { 
     Console.WriteLine(mybtn.Text); 
    } 
} 
1

Либо объявить вновь созданный контроль в качестве члена класса (свойство или поле):

Button btn ; 
private void button1_Click(object sender, EventArgs e) 
{ 
    btn = new Button(); 
    btn.Top = 50; 
    btn.Left = 50; 
    btn.Name = "mybtn"; 
    btn.Text = "My button"; 
    this.Controls.Add(btn); 
} 

ИЛИ

поиск его через управления формы:

private void button2_Click(object sender, EventArgs e) 
{ 
    Console.WriteLine(this.Controls.Cast<Control>().Single(p=>p.Name == "mybtn").Text); 
} 
+0

@Servy Спасибо за редактирование – Alireza

0
private void button2_Click(object sender, EventArgs e) 
{ 
    Console.WriteLine(this.Controls.Find("myBtn", false).FirstOrDefault().Text); 
} 
Смежные вопросы