8
votes

Sélectionnez la page Onglet dans TabControl sans voler Focus

Utilisation de tabcontrol.selectThab ("...") montre l'onglet, mais cela donne également la mise au point de l'onglet. Je voudrais montrer un onglet particulier, mais garder la concentration là où c'est.

J'ai des rangées de données dans une grille. Basé sur les propriétés de la ligne sélectionnée, je montre une page d'onglet différente pour avoir une disposition d'interface utilisateur différente. Mais lorsque vous utilisez des touches fléchées pour faire défiler les lignes, la mise au point bascule sur l'onglet sélectionné - que je ne veux pas arriver.

Merci.


0 commentaires

4 Réponses :


4
votes

Je ne pense pas qu'il y ait une fonction intégrée, mais vous pouvez faire de cette manière: xxx

ici, je sauvegarde le contrôle ciblé actuel, sélectionnez l'onglet souhaité et enfin Définissez la mise au point sur le contrôle d'origine.

Sauter Boolean est nécessaire, car vous donnez l'accent sur la grille que vous déclenchez sélectionnez à nouveau à nouveau, causant une boucle infinie.


3 commentaires

Bien que je ne pense pas que ce soit une solution idéale, cette idée a fini par travailler mieux dans mon application. Merci.


Je ne sais pas si cette solution fonctionnera dans tous les cas, voir Cette question .


J'ai essayé cela et je n'ai pas aimé parce que vous voyez le formulaire clignotant sur le terrain, puis à l'arrière-plan. C'est une sollicitude laid. La solution de Josh fonctionne de manière transparente.



15
votes

Vous pouvez essayer de désactiver le tabcontrol code> avant de définir l'onglet Sélectionné, puis réactivez-la. Cela l'empêchera de prendre la mise au point. J'ai testé cela sur un contrôle de tabulation avec quelques contrôles à ce sujet, et je n'ai vu aucun changement visuel, mais vous devrez l'essayer dans votre UI et voir s'il vous convient bien pour vous.

tabControl1.Enabled = false;
tabControl1.SelectTab("tabPage4");
tabControl1.Enabled = true;


6 commentaires

C'est une bonne idée et cela fonctionne correctement, mais la performance n'est pas très bonne pour activer / désactiver le contrôle. La raison en est que chacune de mes pages d'onglets a beaucoup de commandes, de sorte que chacune est désactivée / activée, qui prend beaucoup de temps et ne semble pas superbe dans l'interface utilisateur.


@Thesan, je ne sais pas s'il y a une autre façon de l'arrêter de prendre la mise au point. Je suppose que la mise au point de la commande de l'onglet après que l'utilisateur sélectionne une nouvelle ligne de la grille ne fonctionne pas pour vous?


J'ai précédemment supprimé ma solution, car est un peu hacky / sanguant, mais peut-être plus rapide que de désactiver / activer le tabcontrol. Je l'informe si tu veux essayer;)


Cela fonctionne, mais sa lente en raison du grand nombre de contrôles dans mon tabcontrol.


La désactivation de la commande de l'onglet a des effets secondaires différents pour les contrôles contenus. Ainsi, faites attention si vous appelez cette méthode comme une réaction à un événement de l'un des contrôles contenus.


Il est préférable de désactiver une seule page d'onglet plutôt que de tout le contrôle comme supposé par Josh.



1
votes

Ceci sélectionne les pages à onglet tout en gardant la mise au point sur le dessus, comme on l'a demandé ci-dessus: xxx

tc est ici mon cas pour le type TABControl (c'est-à-dire Est mon contrôle de tabulation et il y a quelques "pages à tabulation"). Cela fonctionne correctement pour moi. Mon but est de boucler ces pages à tabulation avec les touches gauche et droite (flèches) i. e. Lorsque je vais en avant (par clé.right.right ) et jetez le dernier livre Tabpage Je souhaite avoir mon objectif sur [0] sans activer le < Strong> DataGridView que j'ai dans cette page, et quand je reviendrai en arrière (par key.left ) et atteindre [0] je veux avoir [tc.tabcount - 1] activé, qui est le dernier. Le code de ce cas est le suivant: xxx

Le morceau de code complet est le suivant: xxx

Ce bool keytc est renvoyé dans un cas dans une instruction de commutation pour l'évaluation clé dans: xxx


2 commentaires

N'est-ce pas l'essence la même réponse que @AnDrift?


Il est préférable de désactiver un seul tabage plutôt que le contrôle entier ou de modifier manuellement la mise au point des formulaires, car vous ne voyez rien de clignoter. Cette réponse devrait être la réponse acceptée. J'ai essayé toutes les réponses et celle-ci fonctionne mieux.



0
votes

base sur la solution proposée par "Jeff Ogata: vous pouvez essayer de désactiver le tabcontrol avant de définir l'onglet Sélectionné, puis la réaffectant-la. Cela l'empêchera de prendre la mise au point", ci-dessous ma solution:

tabMain.SelectedPageChanging += (s, e) =>
        { 
            tabMain.Enabled = false;
        };

        tabMain.SelectedPageChanged += (s, e) =>
        {
            tabMain.Enabled = true;                
        };


1 commentaires

Il est préférable de désactiver une seule page d'onglet plutôt que de tout le contrôle comme supposé par Josh.