6
votes

Pourrait étiqueter un objectif?

J'ai une question sur le test de mon université à propos de C #. pourrait étiqueter une mise au point? Comme je peux le voir sur le site MSDN, tous les contrôles peuvent se mettre au point, mais certains d'entre eux ne sont pas sélectionnés. Il me semble donc que la bonne réponse est "L'étiquette pourrait avoir une focalisation, mais ne pouvait pas être sélectionnée". L'étiquette a également une méthode Focus (). S'il vous plaît, aidez-moi à comprendre. Merci.


0 commentaires

6 Réponses :


2
votes

Il est facile de trouver la fin de la tâche si l'autorité de contrôle d'un contrôle se concentre. Il suffit de lire la propriété xxx

héritée à partir de la classe de contrôle.

Les contrôles de formulaires Windows dans la liste suivante ne sont pas sélectionnés. Les commandes dérivées de ces commandes ne sont également pas sélectionnées. (Voir Documentation MSDN )

  • Panneau
  • groupbox
  • Picturebox
  • ProgressBar
  • Splitter
  • Étiquette
  • linklabel (quand il n'y a pas de lien présent dans la commande)

    Aussi:

    La méthode de mise au point renvoie true si le Contrôler avec succès les entrées reçues concentrer. Le contrôle peut avoir l'entrée Concentrez-vous tout en affichant de visuel des indices d'avoir le focus. Cette le comportement est principalement observé par le Commandes non sélectionnées énumérées ci-dessous, ou des contrôles dérivés d'eux.

    Un contrôle peut être sélectionné et recevoir mise au point de saisie si tous les éléments suivants sont True: la valeur sélectionnable de contrôlstyles est défini sur vrai , il est contenus dans un autre contrôle, et tout Ses contrôles parent sont tous deux visibles et activé.

    Si vous avez besoin d'un contrôle semblable à une étiquette que vous pouvez vous concentrer, utilisez simplement une zone de texte et faites-la en liberté. Définissez quelques autres propriétés (styles, non sélectionnables, etc.) et vous avez terminé.


0 commentaires

2
votes

Vous verrez qu'il existe une propriété en lecture seule appelée Canfocus sur une étiquette, si vous avez un coup d'œil à cette propriété tout en débogage, vous le verrez est faux.

Chaque contrôle qui hérite d'un contrôle a la méthode de mise au point, mais cela ne signifie pas que cela peut être concentré.


2 commentaires

Alors l'étiquette ne pouvait pas se concentrer sur la mise au point?


Non, l'étiquette elle-même ne peut pas se concentrer, même si la méthode est exposée



9
votes

du Documentation :

Un contrôle peut être sélectionné et recevoir mise au point de saisie si tous les éléments suivants sont True: la valeur sélectionnable de contrôlstyles est défini sur vrai , il est contenus dans un autre contrôle, et tous Ses contrôles parent sont tous deux visibles et activé.

depuis un Label contrôle n'est pas Sélectionnable, il ne peut pas recevoir la mise au point d'entrée, même s'il hérite d'une méthode Focus () à partir de Contrôle . Par conséquent, la réponse est aucun .


1 commentaires

Oui, c'est la bonne réponse. La présence de focus ou canfocus est vraiment non pertinent. L'API Windows (WinFormes est basée sur) a une règle difficile sur laquelle les contrôles peuvent recevoir la mise au point. Une étiquette (utilisée pour afficher statique texte) est l'une de celles qui peuvent jamais se concentrer sur. Aucune exception.



1
votes

L'étiquette obtient le focus, mais il l'escalade au champ d'entrée spécifié dans son attribut "pour". Comme:

<label for="firstname">First Name</label><input type="text" name="firstname" />


1 commentaires

Je pense que c'était une question C #, pas une question HTML.



8
votes

Oui, il existe un Focus () méthode sur l'étiquette et oui, il est absolument correct. mais se comporter différemment. laissez-moi essayer d'expliquer

Une étiquette peut être associée à une seule commande d'entrée, par exemple une étiquette pour un champ de texte de nom d'utilisateur, il existe donc un concept de Contrôle associé avec l'étiquette. AssociateControlid sur MSDN

Vous pouvez donc associer une commande d'entrée avec une étiquette et chaque étiquette est sélectionnée le contrôle transmis à la commande d'entrée associée.

exemple ici Cliquez sur Email ou par courrier électronique dans la zone de connexion et voyez ce qui s'est passé, de la même manière que vous appelez la méthode de la mise au point Sur l'étiquette, la mise au point sera transmise au contrôle associé.


2 commentaires

merci beaucoup c'est très clair. Mais je n'ai pas marqué que la réponse était sur .net 2.0! Donc, l'étiquette n'a pas cette propriété là-bas. Et est-il disponible juste pour ASP .NET? Quoi qu'il en soit, merci beaucoup.


@Daria: Pour Winforms, le contrôle avec l'index d'onglets suivant recevra la mise au point lorsque vous essayez de définir la mise au point sur une étiquette . Donc, par exemple, que vous avez une étiquette avec un indice de tabulation de 0 et une zone de texte avec un indice de tabulation de 1. Lorsque vous essayez de définir la mise au point sur l'étiquette, la zone de texte obtiendra automatiquement la mise au point.



1
votes

C'est un an, mais j'ai eu un problème similaire que l'OP. Dans mon cas, il s'agissait d'un contrôle utilisateur qui comptait une seule étiquette (amarré à remplir) dessus (il a d'autres fonctions situées dans les coulisses - il s'agit d'un contrôle de calendrier et apparaît un sélecteur de date - pas la standard - dans un panneau (popunder) ou un formulaire (popup)).

Le problème Il y avait que les usercontrols étaient vraiment destinés à des conteneurs et à la résistance à la mise au point (en le poussant sur les contrôles des enfants) - Comme l'étiquette est le seul contrôle des enfants, il arrête le USERCONTROL se concentrer. Utilisation de la zone de texte réadonny est un substitut médiocre car il manque d'alignement vertical et doit être multiligne pour former la hauteur.

La raison pour laquelle j'ajoute ce qui suit comme une réponse ici est parce que c'est possible (désolé les gars qui ont dit ici N'est-ce pas) et j'ai trouvé ce post et beaucoup comme celui qui était peu d'aide quand j'ai regardé. Quoi qu'il en soit, la façon de le faire est de remplacer l'étiquette et de définir le SetStyle - aussi l'ONPAINT pour dessiner un rectangle de mise au point (je dessine manuellement la mienne alors que ThelfocusRectangle ne semblait rien faire) - de sorte que ci-dessous: < PRE> XXX

Je ne me préoccupe pas de savoir s'il est correctement (Vue puriste) Droit de le faire, mais qu'il existe une fonte valide pour permettre une commande de sortie (comme étiquette) de se concentrer parfois. < / p>


1 commentaires

Pour moi, le code ci-dessus est de moitié fonctionne. Si je clique sur le SelectBlaLabel, il se concentre sur la mise au point, mais il semble impossible de sélectionner la commande à l'aide de la touche TAB - il semble être exclu de l'ordre des onglets.