2012-08-07 3 views
2

Le but de ce programme est de permettre à un utilisateur d'allumer un certain nombre de LED sur un panneau en les choisissant à l'écran. J'ai un tableau de boutons construit où actuellement, un utilisateur doit cliquer sur tous les boutons individuellement. Le tableau contient 1536 LED, c'est beaucoup de clics. J'aimerais que l'utilisateur puisse maintenir le bouton de la souris enfoncé et allumer toutes les DEL qu'ils croisent. Je veux dire quelque chose comme:Mouse Event Handler

buttonArray[row, column].MouseLeave += new System.Windows.Forms.MouseEventHandler(ClickButton); 

Et alors une routine comme:

private void ClickButton(Object sender, System.Windows.Forms.MouseEventArgs e) 
{ 
    if (e.Button==MouseButtons.Left) 
    { 
     //blah blah 
    } 
} 

qui déclenchera une fois que la souris de l'utilisateur va sur un bouton, puis je vais vérifier pour voir si elles tenaient le bouton. En ce moment, je reçois cette erreur:

Error 1 Cannot implicitly convert type 'System.Windows.Forms.MouseEventHandler' to 'System.EventHandler'.

On dirait que je n'ai pas le match droit de délégué et gestionnaire, ou que je ne comprends pas la chose namespace ... un peu nouveau pour C#. Je suis tombé sur le MSDN pendant un moment maintenant et je trouve plein d'exemples qui ressemblent au mien.

+0

Un programme de peinture n'utilise pas de contrôle pour chaque pixel. Votre programme est juste un programme de peinture avec des pixels gras. Arrêtez d'utiliser les contrôles, le reste est simple. –

+0

Un problème que vous allez avoir avec la façon dont vous essayez ceci est l'événement 'MouseLeave' ne sera pas tiré alors que le bouton de la souris est en panne. Le contrôle qui reçoit l'événement MouseDown capture la souris jusqu'à ce que le bouton soit activé. Vous avez vraiment besoin de regarder dans la suggestion de Hans. –

Répondre

0

Le problème est celui de type. L'événement Click transmet en System.EventArgs. Pour utiliser System.MouseEventArgs, vous devez vous lier à l'événement MouseClick. Ce que je ferais dans ce scénario est de créer un gestionnaire MouseDown qui définit un indicateur Boolean privé pour indiquer que la souris est à True et un gestionnaire MouseUp pour le remettre à False. Vous utiliserez ensuite un gestionnaire MouseEnter et examinerez si l'indicateur est défini et, s'il est défini, basculez ou définissez l'état de la représentation LED sur votre formulaire. Ensuite, vous pouvez lier tous ces éléments à ces trois gestionnaires, et cela devrait vous permettre de dire si votre souris est éteinte lorsque vous entrez dans l'espace de contrôle. Editer: Je vais modifier celui-ci, car l'exemple que je préparais ne fonctionne pas comme je l'avais imaginé. Allez comprendre.

+0

bon thinkin ... semble que cela fonctionnerait, ouais je me trompais d'utiliser l'événement congé, entrer fait beaucoup plus de sens. Une partie de mon problème est que je ne comprends pas comment monter un gestionnaire MouseDown de nulle part, ou la bonne syntaxe, et je ne sais pas ce que vous voulez dire par 'bind'. Vous semblez certainement être sur la bonne page, merci pour votre aide – user1583208