2014-08-11 2 views
0

мне нужно, чтобы получить компонент, который имеет фокус в данный момент с помощью Windows Forms и .NET Framework 2.0 - C# или VisualBasicПолучить сфокусированный компонент в Windows Forms

У меня есть событие, которое, в какой-то момент, получить текст, и он должен поместить этот текст внутри компонента TextBox. Но это не просто компонент. Должен быть сфокусированным компонентом. Моя ситуация такова: я работаю с низкоуровневыми приложениями и аппаратной связью, которые получают строку от аппаратного считывателя, и я должен добавить этот текст в фокус TextBox.

_device = new Device(Device.AvailableDevices[0].DeviceName); 
_leitor = new Reader(_device); 
_leitorDados = new ReaderData(ReaderDataTypes.Text, ReaderDataLengths.MaximumLabel); 
_leitor.Actions.Enable(); 
_leitor.Actions.Read(_leitorDados); 
_leitor.StatusNotify += delegate 
{ 
    if (_leitorDados.Text == String.Empty) return; 
    MessageBox.Show(_leitorDados.Text); 
    _leitorDados = new ReaderData(ReaderDataTypes.Text, ReaderDataLengths.MaximumLabel); 
    _leitor.Actions.Read(_leitorDados); 
}; 

Мой текст найден в _leitorDados.Text и, когда я получаю событие, мне нужно сделать

focusedControl.Text = _leitorDados.Text;

Но я использую очень ограниченную версию .NET Framework, 2.0 и у меня не так много возможностей сделать это. Спасибо заранее.

  • Этот вопрос отличается от остальных в переполнении стека, поскольку речь идет о определенной версии .NET Framework, у которой нет ресурсов, необходимых для выполнения этого.
  • В .NET Framework 2.0 нет this.ActiveControl. вместе с Win-CE

enter image description here

+0

Нет .net 2.5 Предположим. Также пометьте ваши вопросы, с какой версией фреймворка и Windows CE –

+0

Да. Я испортил. это .NET 2.0. Я проверил его сейчас в свойствах. Спасибо. –

+1

В соответствии с [документацией] (http://msdn.microsoft.com/en-us/library/system.windows.forms.containercontrol.activecontrol%28v=vs.80%29.aspx) поддерживается. Поддерживаемая платформа имеет Windows CE –

ответ

1

Вы должны сделать это с помощью рекурсивного подхода. Попробуйте следующее:

public static Control FindFocusedComponent(Control control) 
{ 
    foreach (Control child in control.Controls) 
    { 
     if (child.Focused) 
     { 
      return child; 
     } 
    } 

    foreach (Control child in control.Controls) 
    { 
     Control focused = FindFocusedComponent(child); 

     if (focused != null) 
     { 
      return focused; 
     } 
    } 

    return null; 
} 
Смежные вопросы