2010-12-02 7 views
0

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

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

ответ

1

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

Сказанное здесь, , вы можете изменить это поведение, обратившись к KeyDown event для 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 + Вкладка или Ctrl +Page Up/Page Down будет переключаться между закладками. Если это также нежелательно, вам также нужно будет посмотреть и отменить эти комбинации клавиш.
Каждый раз, когда вы начинаете пытаться переопределить поведение по умолчанию, у вас гораздо больше проблем, чем при разработке приложения. Если есть определенная причина, по которой вы хотите, чтобы клавиша Enter блокировала переключение на вкладке, мы могли бы помочь вам придумать более легкое и лучшее решение.

+0

Awoseme .. Спасибо. Верьте или нет, я пытался воспроизвести поведение вкладки Windows, используемое для окон браузера в IE и Chrome. У меня есть вкладка с «+» на ней, которую я использую для добавления вкладок, как в браузере. (Думаю, я мог бы создать кнопку «добавить» и поплавать рядом с вкладкой, но я думаю, что это упрощает код). Я закончил создание переменных «currentTab» и «previousTab» и переключил их на событие tabControl_Selected. (вариант: http: // efreedom.com/Question/1-1323470/Tell-Tab-Moving-NET-Tab-Control) – KevinDeus 2010-12-02 22:53:27

0

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

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

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