Как вы позволите клавишам со стрелками переместить фокус в WinForms TableLayoutPanel? - PullRequest
2 голосов
/ 06 января 2012

Кажется, что по умолчанию клавиши «вверх» и «влево» переходят к предыдущей остановке, а клавиши «вниз» / вправо - к следующей остановке. У меня есть TableLayoutPanel, каждая с одной кнопкой. Есть ли простой способ заставить клавиши со стрелками фокусировать кнопку в ячейке в соответствующем направлении в TableLayoutPanel вместо того, чтобы просто следовать стопам?

1 Ответ

8 голосов
/ 06 января 2012

Да, нет проблем.Просто создайте свое собственное переопределение TableLayoutPanel и заставьте его обрабатывать клавиши курсора, чтобы получить то, что вы хотите.Добавьте новый класс в ваш проект и вставьте код, показанный ниже.Компиляция.Перетащите новую панель из верхней части панели инструментов на форму, заменив старую.

using System;
using System.Windows.Forms;

class MyLayoutPanel : TableLayoutPanel {
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        var ctl = this.FindForm().ActiveControl;
        if (ctl.Parent == this) {
            int col = this.GetColumn(ctl);
            int row = this.GetRow(ctl);
            if (keyData == Keys.Left && col > 0) {
                var newctl = this.GetControlFromPosition(col - 1, row);
                if (newctl != null) newctl.Focus();
                return true;
            }
            // etc..
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...