Как предотвратить отображение вкладки при ее выборе? - PullRequest
0 голосов
/ 02 декабря 2010

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

Можно подумать, что краскаСобытие будет участвовать, но я не знаю, как «отменить» его, если бы это даже сделало свою работу ..

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

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

Тем не менее, вы можетепереопределите это поведение, обрабатывая событие KeyDown для TabControl, определяя, когда была нажата одна из клавиш со стрелками, и отменяя его. Например:

private void myTabControl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    //Check to see if an arrow key was pressed
    if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right))
    {
        //Cancel the keypress by indicating it was handled
        e.Handled = true;
    }
}

Однако, как только вы это сделаете, у пользователя не будет возможности установить фокус на вкладке конкретной вкладки, потому что, как только вкладка получает фокус, страница вкладки сразу открывается.Это обрабатывается родителем TabControl и не связано с событием Paint (которое отвечает за то, как отображается элемент управления, а не когда и почему).

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

Также помните, что нажатие Ctrl + Tab или Ctrl + Page Up / Page Down будет переключаться между вкладками.Если это также нежелательно, вам необходимо следить за этими комбинациями клавиш и отменять их.
Каждый раз, когда вы начинаете пытаться переопределить поведение по умолчанию, у вас возникает гораздо больше проблем, чемесли вы просто разрабатываете приложение вокруг него.Если есть конкретная причина, по которой вы хотите, чтобы клавиша Enter выполняла переключение страниц вкладок, мы могли бы помочь вам найти более простое и лучшее решение.

0 голосов
/ 02 декабря 2010

Я не уверен, что понимаю, что вы пытаетесь выполнить, но похоже, что вы можете сделать это, используя свойство Visible.

Вы должны иметь возможность установить видимость TabPage на false, когдапользователь переключается на него, а затем устанавливает его в true только тогда, когда вы хотите.

...