2010-12-02 35 views
0

Je voudrais être en mesure d'avoir un utilisateur capable de parcourir les onglets, en mettant l'accent sur chacun d'eux, mais seulement quand ils frappent entrer, l'onglet sera rendu.Comment empêcher l'affichage d'un onglet lorsqu'il est sélectionné?

On pourrait penser que l'événement de peinture serait impliqué, mais je ne sais pas comment « annulent » de celui-ci, si cela même faire le travail ..

Répondre

1

D'abord, je dois vous avertir que vous remplacez le comportement standard de Windows. Dans n'importe quelle boîte de dialogue de la page de propriétés ou n'importe où ailleurs dans les onglets de l'interface utilisateur, l'utilisation des touches fléchées gauche et droite permet de parcourir les onglets et d'afficher leur contenu dans le contrôle onglet. Il n'est pas nécessaire d'appuyer sur Entrée pour afficher la page à onglet sélectionnée. Assurez-vous que vos utilisateurs comprennent que votre application est différente (et que vous comprendre les besoins de vos utilisateurs) si vous décidez de suivre cette route.

Cela dit, vous pouvez modifier ce comportement par la manipulation du KeyDown event pour le TabControl, détecter quand l'une des touches fléchées a été pressée, et l'annuler. Par exemple:

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; 
    } 
} 

Cependant, une fois que vous faites cela, il n'y aura aucun moyen pour l'utilisateur de définir le focus à l'onglet d'une page onglet particulier, car une fois l'onglet obtient le focus, la page d'onglet est immédiatement mis en vue. Ceci est géré par le parent TabControl et n'est pas lié à l'événement Paint (qui est responsable de comment le contrôle est peint, pas quand ou pourquoi). Bien sûr, vous pouvez toujours déterminer si la touche Entrée a été enfoncée dans le même événement KeyDown et activer une page à onglet de votre choix (par exemple en utilisant une variable compteur qui est incrémentée/décrémentée chaque fois que la touche fléchée correspondante est pressé), mais il n'y aura pas d'indication visible à l'utilisateur qui sera alors affichée. Le rectangle de focus ne sera pas dessiné.

Il faut aussi savoir qu'en appuyant sur les touches Ctrl + Tab ou Ctrl +Page Up/Page Down passe entre les pages de l'onglet. Si cela est également indésirable, vous devrez également surveiller et annuler ces combinaisons de touches.
Chaque fois que vous commencez à remplacer les comportements par défaut, vous avez plus de problèmes que si vous concevez simplement votre application. S'il y a une raison particulière pour laquelle vous souhaitez que la commutation de la page de l'onglet Validation soit activée, nous pourrions vous aider à trouver une solution plus simple et plus efficace.

+0

Awoseme .. Merci. Croyez-le ou non, j'essayais de reproduire le comportement de l'onglet Windows utilisé pour les fenêtres de navigateur dans IE et Chrome. J'ai un onglet avec un '+' que j'utilise pour ajouter des onglets, comme dans le navigateur. (Je suppose que je pourrais créer un bouton "ajouter" et le faire flotter à côté de l'onglet, mais je pense que cela facilite le codage). J'ai fini par faire les variables 'currentTab' et 'previousTab' et les changer dans l'événement tabControl_Selected. (Une variation à ce sujet: http: // efreedom.com/Question/1-1323470/Tell-Tab-Déplacement-NET-Tab-Control) – KevinDeus

+0

oh ouais. Aussi, étant conscient du comportement clé, ma méthode réplique ce que les navigateurs font (si vous remarquez, vous ne pouvez pas tabuler sur le '+' dans le navigateur (probablement parce que c'est un bouton) – KevinDeus

+0

@KevinDeus: Ah, eh bien si c'est seulement l'onglet "nouvel onglet" qui vous inquiète, qui faciliterait grandement la résolution du problème Vous pouvez toujours conserver le comportement par défaut de vos onglets * réels *, tout en ne remplaçant ce comportement que lorsque l'onglet "nouvel onglet" ce-là devrait être un bouton. (De plus, il ne serait pas * difficile * de dessiner le contrôle de tabulation personnalisé et d'ajouter un bouton à l'extrême droite, si cela vous intéressait, c'est ce que IE/Chrome fait.) Quoi qu'il en soit, je suis content que cela ait fonctionné pour vous, et je me sens beaucoup mieux dans votre conception après votre explication. –

0

Je ne suis pas sûr de comprendre ce que vous essayez d'accomplir, mais il semble que vous puissiez le faire en utilisant la propriété Visible.

Vous devez pouvoir définir la visibilité de TabPage sur false lorsque l'utilisateur bascule dessus, puis la définir sur true uniquement lorsque vous le souhaitez.