10
votes

Si un contrôle est désactivé et caché ou vient de cacher?

Lors de la manipulation de commandes sur une formulaire Windows .NET laquelle des options suivantes est la meilleure pratique et pourquoi?

//Hide control from user and stop control form being useable
oControl.Visible = false;


0 commentaires

8 Réponses :


9
votes

activé désigne si l'utilisateur peut ou non interagir avec le contrôle (c'est-à-dire si le contrôle est grisé ou non)

visible fait référence à Wehether ou non le contrôle est affiché (généralement si cela est faux, le contrôle n'est pas rendu du tout, mais pas tout le temps apparemment - voir les commentaires de ce poste). < / p>

Si le contrôle n'est pas rendu, la valeur de la propage activée n'aura aucun impact.


1 commentaires

Ce n'est pas tout à fait le cas; Voir mon commentaire sur Toolstripmenuitem sous la réponse de Chrisf.



8
votes

du MSDN : < / p>

éléments où la visibilité n'est pas Visible ne participe pas à une entrée événements (ou commandes), n'influence pas soit la mesure ou organiser des passes de la mise en page, ne sont pas dans une séquence d'onglets, et ne sera pas signalé en hit Test.

alors je pense que vous pouvez supposer que le réglage .enabled = false est inutile.

mise à jour

J'ai vérifié le Visibity Documentation sur le MSDN , mais malheureusement, cela ne dit rien de savoir si le contrôle est désactivé ou non.


2 commentaires

Notez que la documentation que vous avez liée va faire référence au WPF, pas Winforms. Par exemple, un outilstripmenuitem qui a une clé de raccourci attribué, visible = false et activé = true obtiendra son événement de clic invoqué lorsque la touche de raccourci est enfoncée, même si elle est cachée.


Désolé - je pensais que je perdais l'arbre des Winforms. Je dois avoir frappé le mauvais lien quelque part le long de la ligne.



2
votes

Sauf si il s'agit d'un contrôle spécial qui peut recevoir la concentration, même si invisible, je ne pense pas que vous devez le désactiver explicitement. Il suffit de désactiver la visibilité devrait être suffisant pour empêcher l'utilisateur d'interagir avec le contrôle.

Je ne dirais pas que c'est "faux", cependant. Je le décrivais comme "Overkill".


0 commentaires

5
votes

Un test rapide montre que le réglage visible en faux désactive également les touches d'accélérateur pour ce contrôle.

sous Win32 (c.-à-d. Ceci ne s'applique pas aux formulaires Windows), Les accélérateurs restent activés lorsque le contrôle est masqué mais non désactivé. Je suppose que c'est la référence que vous envisagiez de.


0 commentaires

3
votes

Pour les commandes de base telles que des étiquettes ou des zones de texte, je ne pense pas que cela fait une différence réelle quelle méthode que vous utilisez.

Mais envisagez un contrôle plus complexe, contenant une minuterie pour vérifier s'il y a de nouvelles données à afficher; La désactivation du contrôle désactive également la minuterie.

Si vous le faites invisible sans le désactiver, la minuterie incendie toujours les événements et toutes les nouvelles données sont toujours traitées. Si vous le désactivez également, de nouvelles données ne sont pas traitées. Cela dépend du cas spécifique, lequel des deux comportements que vous souhaitez.

FWIW, je suis en désaccord avec la personne qui vous a dit que c'était faux à cacher et à désactiver. Je pense que c'est inutile, dans la plupart des cas.


0 commentaires

1
votes

Pas sûr de .NET, mais ActionScript / Flex a trois propriétés distinctes pour les contrôles qui prennent des valeurs booléennes.

activé

visible

InclusinLayout

Réglage de la propriété visible False le garde autour et peut effectuer la mise en page. Il est toujours dessiné par le rendu d'affichage. Le réglage includeLeLayOut La propriété le garde de la part d'être rendue ensemble. Souvent, je trouve utile d'inclure toutes les propriétés en fonction de ce que je veux arriver avec le contrôle et de mon avis. Il peut y avoir une propriété similaire à .NET. Mais je ne suis pas sûr.


0 commentaires

3
votes

Si vous posez aussi une question de convivialité plutôt que de simplement des questions techniques, je ne vous recommanderai pas de masquer des choses (sauf si vous ne changez pas complètement la "vue" actuelle de votre application), car il est généralement moins gênant trouver un contrôle Désactivé (cela vous donne un retour d'information sur l'action que vous souhaitez faire n'est pas encore prêt) que de passer quelques secondes à la recherche, juste pour réaliser après un certain temps qu'il doit être désactivé car les conditions préalables à utiliser ne sont pas satisfaites.

Si vous étiez déjà au courant de cela, ignorez-le simplement :-p


0 commentaires

10
votes

si vous devrez définir activé = false lors de la masquage d'un contrôle dépend du contrôle en question et de quel type d'interaction il offre. Pour de nombreuses commandes (telles que la case ou une case à cocher ), réglage visible = false suffire à éviter toute interaction entre l'utilisateur et le contrôle .

Mais certains contrôles (il semble être particulièrement celles-ci offrant une propriété de clé de raccourci), offrira toujours une interaction utilisateur lorsqu'elle n'est pas visible. Par exemple, le Toolstripmenuitem (et "ancien" menuitem ) aura toujours leur Cliquez sur l'événement appelé lorsque la touche de raccourci est enfoncée, peu importe < Code> visible étant true ou false .

Réglage Enabled = FALSE empêchera d'appeler l'événement sur via des touches de raccourci dans ces cas. De ce point de vue, je voudrais pas conseils contre la définition activé = false lors de la masquage d'une commande dans une application WinForms.


0 commentaires