2017-03-07 4 views
1

J'ai créé un contrôle personnalisé et j'ai besoin de faire de ce contrôle personnalisé une info-bulle pour les étiquettes ou les boutons.Comment définir le contrôle personnalisé comme info-bulle pour un bouton ou une étiquette?

Mais je ne pouvais pas trouver un moyen de définir le contrôle personnalisé en tant que ToolTip.

N'importe qui m'aidera s'il vous plaît à régler le contrôle personnalisé comme ToolTip.

Remarque: Je n'ai pas besoin de solution pour afficher le contrôle personnalisé dans les événements mouse_hover des contrôles. S'il vous plaît me suggérer des idées pour faire le contrôle personnalisé en tant que ToolTip par défaut de manière standard.

Cordialement,

Raj Amal

Répondre

1

Je suppose que vous savez déjà sur le remplacement de l'événement de peinture, je ne vais pas entrer dans cela. Si vous voulez quelque chose d'un peu plus compliqué, dériver du contrôle ToolTip pour l'étendre à vos besoins n'aura pas beaucoup de sens puisque vous rencontrerez des restrictions assez rapidement.

Ce que vous devez faire est d'implémenter votre propre contrôle ToolTip en réutilisant certains bits importants de l'original. Si vous vous sentez aventureux, vous pouvez suivre ces étapes pour commencer. Je vais me référer à votre contrôle personnalisé comme infobulle désormais:

  1. Si vous voulez afficher un texte personnalisé ou quelque chose d'autre pour chaque contrôle qui utilise votre infobulle, vous devez implémenter IExtenderProvider dans votre classe . Here's plus à ce sujet.
  2. Vous devez effectuer le suivi des contrôles qui utilisent votre info-bulle et les valeurs personnalisées que vous avez définies pour eux. En interne, l'infobulle Windows Forms utilise un HashTable à cette fin. Key est le contrôle montrant votre info-bulle et la valeur est le texte de l'info-bulle (ou quelque chose d'autre que vous voulez lier à votre info-bulle).
  3. Si vous souhaitez afficher plus d'une chaîne (titre, description, image, etc.), vous pouvez avoir plusieurs HashTables.
  4. Lorsque vous ajoutez l'info-bulle à un contrôle, abonnez-vous aux événements de la souris (entrez, déplacez, quittez) pour savoir quand afficher l'info-bulle. Si vous voulez avoir un délai avant de montrer le contrôle, vous devez utiliser une minuterie interne pour garder une trace du temps.
  5. Vous souhaiterez probablement que l'info-bulle s'étende en dehors des limites du formulaire principal. Vous pouvez envelopper votre info-bulle dans un formulaire sans en-tête ou un alpha blended form pour autoriser d'autres formes que le rectangle.

Ce sont les premières étapes très généralisées. En réalité, il y a encore beaucoup à faire. Cela fait quelques années que j'ai mis en place mon contrôle ToolTip personnalisé, donc j'oublie peut-être quelque chose de crucial. Cependant, si vous passez du temps à fouiller dans le code de la classe Windows Forms's ToolTip, vous aurez une bonne idée de ce qui se passe derrière les rideaux.

Je n'ai pas examiné le code moi-même, mais à en juger par les notes, cet article vous donnera un bon point de départ aussi: A ToolTip with Title, Multiline Contents, and Image. C'est dans VB.NET mais vous pouvez facilement le convertir en C# en utilisant Telerik's converter ou tout autre.

+0

J'ai créé un contrôle comme neuf, non dérivé de ToolTip.Et j'ai créé une classe Controller avec ExtenderProvider for ToolTip. Normalement, le contrôle de ToolTip et le contrôle ajouté pour ToolTip seront configurés via SendMessage. Mais SendMessage renvoie 0 comme un échec pour ma mise en œuvre. Connaissez-vous une possibilité pour cet échec? – Amal

+0

s'il vous plaît se référer à http://stackoverflow.com/questions/42626873/how-to-show-created-tooltipcontrol-from-tooltip-component pour mon code de mise en œuvre – Amal

+0

@Amal Oh, on dirait que vous étiez déjà assez loin avec la mise en œuvre ! Je vais jeter un coup d'oeil quand j'arriverai sur mon ordinateur Windows. – hankide