2016-09-13 2 views
2

У меня есть 50 UserControls, которые я динамически добавляю в flowlayoutPanel. Мне нужно настроить фокус на пользовательский элемент управления, но он не работает. Я много искал, но не могу найти ни одного примера, который я понимаю.Как настроить фокус на Usercontrol

Единственный пример, который я нахожу это Setting Focus to a .NET UserControl...?

Я пытался использовать userCtrl.Focus(); но это не сработало. Как я уже читал, usercontrol не любит фокусироваться.

+0

В 'UserControls' содержатся другие элементы управления? Если это так, вы можете сосредоточиться на одном из них. – adv12

+0

this.ActiveControl = YourControl; –

+0

Установите ActiveControl, как прокомментировали другие. Кроме того, это ваш UserControls! Если вы дадите им общедоступный метод и код FocusOnMe(), этот метод позволяет установить фокус там, где вы хотите, тогда ваша форма может сказать myUserControl.FocusOnMe(). –

ответ

0

Вы можете установить фокус на элемент управления с помощью ActiveControl Недвижимости

this.ActiveControl = myUserControl; 
1

Для активации какого-либо контроля, в том числе фокуса UserControl использовать Control.Select().

Если вы сделаете это для текстового поля, вы увидите, что выбор гарантирует, что он получит фокус ввода.

Я думаю, вы хотите что-то сделать с выбранным пользователем элементом управления (с фокусом), например, изменить его внешний вид или выбрать любой элемент управления на нем. Чтобы сделать это, ваш класс управления пользователь должен подписаться на Control.Enter событий и Control.Leave

Я создал пользовательский элемент управления с флажком, который проверяется каждый раз, когда выбран пользовательский элемент управления:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
    } 

    private void InitializeComponent() 
    { 
     this.checkBox1 = new System.Windows.Forms.CheckBox(); 
     ... 
     this.Enter += new System.EventHandler(this.OnEnterFocus); 
     this.Leave += new System.EventHandler(this.OnLeaveFocus); 
    } 

    private void OnEnterFocus(object sender, EventArgs e) 
    { 
     this.checkBox1.Checked = true; 
    } 

    private void OnLeaveFocus(object sender, EventArgs e) 
    { 
     this.checkBox1.Checked = false; 
    } 
} 

у меня есть форма с кнопкой, и обработчик события, который вызывается при нажатии на кнопку:

private void OnButton1Clicked(object sender, EventArgs e) 
{ 
    this.userControl1.Select(); 
} 

Теперь, когда кнопка нажата, я вижу, что пользовательский элемент управления получает фокус, потому что флажок и всякий раз, когда я нажимаю в другом месте, флажок бесконтрольно.

1

Хотя вы не детализировали, что вы имели в виду, это не сработало, фокусировка имеет много аспектов традиционно.

1. Явные фокусировки

Вызов Focus() метода управления является таким же, как установка ActiveControl формы контейнера. Если CanFocus возвращает true (ваш контроль и все его родители видны и включены), он работает; однако у вас не будет визуальной обратной связи, за исключением некоторых косвенных намеков, например. первоначально сфокусированное управление (кнопка или текстовое поле) теряет фокус.

Для визуализации сфокусированного состояния вы можете использовать некоторые пользовательские краски:

protected override void OnPaintBackground(PaintEventArgs e) 
{ 
    e.Graphics.Clear(Focused ? SystemColors.Highlight : SystemColors.Control); 
} 

Если вы получите непосредственно от Control вместо UserControl, переопределить следующие два метода, чтобы заставить перекрасить об изменении сфокусированного состояния:

protected override void OnGotFocus(EventArgs e) 
{ 
    Invalidate(); 
    base.OnGotFocus(e); 
} 

protected override void OnLostFocus(EventArgs e) 
{ 
    base.OnLostFocus(e); 
    Invalidate(); 
} 

2.Фокусировка с помощью мыши

Чтобы получить фокус, нажав на кнопку управления добавить эту строку в конструктор:

SetStyle(ControlStyles.Selectable, true); 

Если вы получить непосредственно от Control вместо UserControl, переопределения OnMouseDown тоже:

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (!Focused) 
     Focus(); 
    base.OnMouseDown(e); 
} 

3. Фокусировка на клавиатуре

Чтобы получить фокус на TAB ключ просто установите TabStop собственности на true и отрегулируйте TabOrder.

0

Пример сосредоточиться на textBox1:

textBox1.Select(); 
0

вы можете попробовать вкладки индекс пользовательского элемента управления. Если вы установите индекс табуляции в 1, он будет сфокусирован после запуска программы.

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