WinForms и фокус ввода
От: VVVa  
Дата: 21.11.21 16:42
Оценка:
есть UserControl на ворме почему события KeyDown приходят то в него то на родительскую форму
это из-за фокуса ввода?
как это поправить? или чтобы весь фокус был на UserControl.
Re: WinForms и фокус ввода
От: BlackEric http://black-eric.lj.ru
Дата: 21.11.21 18:34
Оценка: 3 (1)
Здравствуйте, VVVa, Вы писали:

VVV>есть UserControl на ворме почему события KeyDown приходят то в него то на родительскую форму

VVV>это из-за фокуса ввода?
VVV>как это поправить? или чтобы весь фокус был на UserControl.

this.Parent.KeyDown += new KeyEventHandler(MyControl_KeyDown);
https://github.com/BlackEric001
Re[2]: WinForms и фокус ввода
От: VVVa  
Дата: 22.11.21 15:59
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>
BE>this.Parent.KeyDown += new KeyEventHandler(MyControl_KeyDown);
BE>

а можно что-то сделать с контролом чтобы вобще фокус не захватывал (например ScrollBar-ру)
Re[2]: WinForms и фокус ввода
От: VVVa  
Дата: 22.11.21 16:08
Оценка:
Здравствуйте, BlackEric, Вы писали:


BE>
BE>this.Parent.KeyDown += new KeyEventHandler(MyControl_KeyDown);
BE>


а не подскажите из-за чего у меня
this.Parent == nul

как — то не сработало
Re: ещё один вопрос
От: VVVa  
Дата: 22.11.21 16:22
Оценка:
    private void CodeView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left)
                позицыя_курсора++;
            if (e.KeyCode == Keys.Right)
                позицыя_курсора--;

            Invalidate();
        }

не работает почему-то никогда (даже если в фокусе)...
а можно ли Keys.Left и Keys.Right какнибудь получить
Re[2]: ещё один вопрос
От: VVVa  
Дата: 22.11.21 16:37
Оценка:
Здравствуйте, VVVa, Вы писали:
VVV>не работает почему-то никогда (даже если в фокусе)...
VVV>а можно ли Keys.Left и Keys.Right какнибудь получить
protected override bool IsInputKey(Keys keyData)
        {
            switch (keyData)
            {
                case Keys.Right:
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                    return true;
            }
            return base.IsInputKey(keyData);
        }

вылечилось но вопросы с фокусом ещё остались
Re[3]: ещё один вопрос
От: Ромашка Украина  
Дата: 22.11.21 16:47
Оценка: 3 (1)
Здравствуйте, VVVa, Вы писали:
VVV>вылечилось но вопросы с фокусом ещё остались

Смотри, у тебя события приходят в контрол, который находится в фокусе. Это не UserControl, это какой-нибудь TextBox на твоем UserControl. Именно он обрабатывает события, на UserControl_KeyDown не придет ничего.

Если ты хочешь ловить события KeyDown на форме делай приблизительно так:

this.FindForm().KeyPreview = true;
this.FindForm().KeyDown += new KeyEventHandler(MyControl_KeyDown);
https://brunets.name/ua_developer.gif

Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[3]: WinForms и фокус ввода
От: Ромашка Украина  
Дата: 22.11.21 16:50
Оценка: 3 (1)
Здравствуйте, VVVa, Вы писали:
VVV>а не подскажите из-за чего у меня
VVV>
VVV>this.Parent == nul
VVV>


Как-то криво добавляешь контрол на форму.
https://brunets.name/ua_developer.gif

Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[4]: WinForms и фокус ввода
От: VVVa  
Дата: 23.11.21 16:33
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Как-то криво добавляешь контрол на форму.

конструктором добавляю и всёравно nul (а он там есть)
Re[5]: WinForms и фокус ввода
От: Ромашка Украина  
Дата: 23.11.21 16:41
Оценка: 3 (1)
Здравствуйте, VVVa, Вы писали:
VVV>конструктором добавляю и всёравно nul (а он там есть)

Значит пытаешься получить Parent до того, как отрисовалась форма. В конструкторе? Попробуй вызвать в Form_Load
https://brunets.name/ua_developer.gif

Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[4]: ещё один вопрос
От: VVVa  
Дата: 25.11.21 15:57
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>
Р>this.FindForm().KeyPreview = true;
Р>this.FindForm().KeyDown += new KeyEventHandler(MyControl_KeyDown);
Р>


дак это просто подписаться на события другого контрола
а запретить фокус нельзя?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.