web-dev-qa-db-fra.com

Afficher l'info-bulle sur l'entrée de zone de texte

J'ai un textbox qui nécessite que les données soient saisies d'une certaine manière. J'ai mis en œuvre des techniques de validation de cellule pour vérifier les données après leur saisie, mais je voudrais fournir à l'utilisateur quelques informations avant de saisir les données.

À cette fin, je voudrais ajouter un tooltip au textbox qui apparaît lorsque l'utilisateur entre dans la boîte à outils, puis quitte quand il commence à taper.

Par exemple, j'ai le code suivant:

private void YearEdit_Enter(object sender, EventArgs e)
  {
        ToolTip tt = new ToolTip();
        tt.IsBalloon = true;
        tt.InitialDelay = 0;
        tt.ShowAlways = true;
        tt.SetToolTip(YearEdit, "Enter 4 digit year.");
    }

Cela s'exécute lorsque l'utilisateur entre le textbox, mais le tooltip n'apparaît que lorsque la souris survole le textbox. Quelqu'un at-il des idées pour contourner cela? Je pensais que peut-être tt.ShowAlways = true pourrait fonctionner, mais évidemment pas.

19
Lukas Bystricky

Connectez-vous à l'événement textbox.enter et utilisez le code suivant:

private void textBox1_Enter(object sender, EventArgs e)
    {
        TextBox TB = (TextBox)sender;
        int VisibleTime = 1000;  //in milliseconds

        ToolTip tt = new ToolTip();
        tt.Show("Test ToolTip",TB,0,0,VisibleTime);
    }

Jouez avec les valeurs X/Y pour le déplacer où vous le souhaitez. Le temps visible est combien de temps jusqu'à ce qu'il disparaisse.

28
Lee Harrison

Les info-bulles n'apparaissent que lorsque la souris est encore par conception.

Vous pouvez essayer de définir InitialDelay sur 0:

tt.InitialDelay = 0;

Mais cela nécessiterait encore que la souris soit immobile pendant un instant.

Cependant, il existe d'autres approches. Une manière courante de montrer quelle entrée est requise consiste à utiliser un filigrane (texte décoloré) dans la zone de texte qui affiche la mise en forme requise jusqu'à ce que l'utilisateur commence à taper.

Si vous voulez vraiment une info-bulle, vous pouvez soit ajouter une icône d'information (généralement un "i") qui affichera l'info-bulle lorsqu'elle est survolée, soit implémenter la vôtre.

Cela peut également fonctionner si vous divisez la date en parties (jour, mois, année séparés). Cela vous permettra de mieux contrôler ce que l'utilisateur peut saisir - le mois peut devenir une liste déroulante/combinée, c'est donc toujours le bon format.

3
ChrisF

vous pouvez également afficher une info-bulle comme celle-ci:

ToolTip t = new ToolTip();
t.Show("Hello World", textBox1, 1000);
2
lamiinek

Essaye ça. (basé sur une réponse ci-dessus) Ajoutez des gestionnaires d'événements pour tous les contrôles pour lesquels vous souhaitez avoir une info-bulle. Pointez tous les gestionnaires d'événements vers la même méthode. Construisez ensuite votre méthode de manipulation comme celle-ci

private void procToolTips(object sender, EventArgs e)
{
   ToolTip tt = new ToolTip();
   Control o = (Control)sender;
   if ( o.Name == "label1") {
     tt.Show("Lorem ipsum dolor sit ame", o, 1000);
   }
}
1
user2283985

Vous devez utiliser if ( o.Name == label1.Name) au lieu de if ( o.Name == "label1"), car si vous renommez label1, cette ligne sera également modifiée.

Plus: if(o.equals(label1))...

0
Gilles Mignard