2012-06-23 2 views
0

У меня есть 25 текстовых полей. У меня есть одна кнопка, которая будет вставлять информацию в выбранное текстовое поле (тот, который сфокусирован). Вот код, я использовал:Получение целенаправленного текстового поля в C#?

foreach (Control z in this.Controls) 
     { 
      if (z is TextBox) 
      { 
       ((TextBox)(z)).Paste();   
      } 
     } 

Когда я использую это, все текстовые поля получают вставили в мне нужно только целенаправленный один.. Я полностью в тупике. Как исправить эту проблему?

+4

Сделайте свою кнопку ToolStripButton, она не украдет фокус, когда вы нажмете на нее. Теперь вы можете использовать свойство ActiveControl. –

+0

В дополнение к комментарию от @HansPassant этот вопрос освещает то, что вам нужно http://stackoverflow.com/questions/435433/what-is-the-preferred-way-to-find-focused-control-in-winforms-app –

ответ

2

Вы можете использовать LINQ, чтобы получить сфокусированное TextBox и пасту.

TextBox focusedTextBox = this.Controls.OfType<TextBox>().FirstOrDefault(tb => tb.IsFocused); 
if (focusedTextBox != null) 
{ 
    focusedTextBox.Paste(); 
} 

Для WPF/Silverlight, то IsFocused свойство следует использовать. Если вы используете winforms, вы должны использовать свойство Focused.

1

Вы можете попробовать тестирование Средоточия свойства коллекции элементов управления

foreach (Control z in this.Controls) 
{ 
    if (z is TextBox && z.Focused) 
     ((TextBox)(z)).Paste();   
} 

Однако это может стать более сложным, если TextBox содержится внутри различных рамок группы или других контейнеров управления.
В этом случае вам необходимо рекурсивная функция

private void PasteInFocusedTextBox(ControlCollection ctrls) 
{ 
    foreach (Control z in ctrls) 
    { 
     if(z.Controls != null && z.Controls.Count > 1) 
      PasteInFocusedTextBox(z.Controls); 

     if (z is TextBox && z.Focused) 
      ((TextBox)(z)).Paste();   
    } 
} 

EDIT: Перечитывая свой вопрос у меня есть сомнения. Если вы нажмете кнопку, чтобы выполнить операцию вставки, то фокус будет переключен на эту кнопку, и вы больше не сможете использовать сфокусированное свойство.

В этом случае вам нужно сохранить глобальное var последнее текстовое поле с фокусом до нажмите на кнопку команды

Смежные вопросы