Accueil > Forum > > > > Evenement dynamique (new EventHandler())
Evenement dynamique (new EventHandler())
mardi 5 juillet 2005 à 20:33:56 |
Evenement dynamique (new EventHandler())

bgcode
|
Bonjour , je m'explique : Ce que je veux concevoir , Sur une form , par un clic sur un bouton je dessine sur celle ci un composant nommé GraphPicture puis j'y construit un menu : AOGie. GraphPicture tab = new AOGie.GraphPicture(); tab.Name = "table" + nb_click; //Identifiant tab.Location = new Point(200, 200); //Place par défaut dans la fenetre tab.Size = new Size(table_x, table_y); //taille tab.BackColor = Color.Aqua; tab.ToolTipText = "Clic droit pour modifier la table"; this.graphContainer1.Controls.Add(tab);
ContextMenu ctxMenu = new ContextMenu(); // ON creé plusieurs menuitem puis pour chaque on definit un evenement (defini par nous meme) ctxMenu.MenuItems.Add( new MenuItem("Champs de la table",new EventHandler(modifs_champs))); ctxMenu.MenuItems.Add(new MenuItem("Modifier les dimensions", new EventHandler(changer_dimensions))); ctxMenu.MenuItems.Add(new MenuItem("Changer les couleurs", new EventHandler(changer_couleurs))); tab.ContextMenu = ctxMenu; //on l'affiche !
Voila ca ca fonctionne , ca me construit bien mon menu sur chaque composant dynamique sur ma feuille Mais ca se complique lorsque je veux savoir de quelle composant ou j'y ai cliqué sur un item du menu.
private void changer_couleurs(object sender, EventArgs e) { Cet evenement a été provoqué par quel composant géneré dynamiquement ? Comment le savoir ? } Vous sauriez me dire de quel composant géneré dynamiquement correspond le clic sur son item. Si vous voyez ce que je veux dire . Merci bcp !
|
|
mardi 5 juillet 2005 à 20:57:14 |
Re : Evenement dynamique (new EventHandler())

Fildomen
|
MenuItem fildo = (MenuItem) e;
c l'item qui l'a généré, tu peux mettre dans son tag qlq chose pour se souvenir de lui
Bonne chance... YaoYao !! 1 + 1 = 10
|
|
mardi 5 juillet 2005 à 20:57:54 |
Re : Evenement dynamique (new EventHandler())

Fildomen
|
MenuItem fildo = (MenuItem) sender;
c l'item qui l'a généré, tu peux mettre dans son tag qlq chose pour se souvenir de lui
Excuse pour la faute
Bonne chance...
YaoYao !! 1 + 1 = 10
|
|
mardi 5 juillet 2005 à 21:06:27 |
Re : Evenement dynamique (new EventHandler())

aogie
|
Bonsoir, Le fait que les objets GraphLine ne soient pas des contrôles visuels, permet une superposition des lignes grâce à gestion effectuée par GraphContainer. Le point négatif c'est que c'est lui qui gère la position de la souris et qui est reconnu comme SourceControl par le menu contextuel. Dans l'événement de clic sur menu : MenuItem mn = (MenuItem)sender; ContextMenu ctxMenu = mn.GetContextMenu(); Control ctl = ctxMenu.SourceControl; Le contrôle ctl est le GraphContainer et non l'objet GraphLine...
Solutions : - 1) Implémenter une méthode GetGraphLineAt(Point pt). Ce n'est pas trop difficile car il suffit de s'inspirer de la méthode privée "ProcessMouseMove" pour trouver l'objet GraphLine à retourner. - 2) Créer un menu contextuel différent pour chaque objet GraphLine. On peut ainsi reconnaître l'appelant...
La solution 1) est la plus propre. En cas de difficulté. Je me tiens à ta disposition pour créer cette méthode dans l'objet GraphContainer.
-- AOGie --
|
|
mardi 5 juillet 2005 à 21:17:42 |
Re : Evenement dynamique (new EventHandler())

bgcode
|
je comprends absolument rien lol ;) tu peux expliquer ou tu veux en venir ? Merci
|
|
mardi 5 juillet 2005 à 22:06:41 |
Re : Evenement dynamique (new EventHandler())

aogie
|
Si tu consultes le code des objets du projet GraphContainer, tu remarqueras que les objets GraphLine ne sont pas des "contrôles visuels". L'événement MouseMove est géré par le GraphContainer et les coordonnées de la souris sont dans le référenciel du GraphContainer et non de l'objet GraphLine survolé. C'est pour cette raison que l'affichage du menu contextuel possède l'objet GraphContainer comme contrôle associé.
-- AOGie --
|
|
mardi 5 juillet 2005 à 22:27:18 |
Re : Evenement dynamique (new EventHandler())

aogie
|
Solutions : 1) Pour connaître l'objet GraphLine à l'origine du menu contextuel. Inscription sur l'événement MouseUp de chaque objet GraphLine comprenant le menu contextuel. (Tu peux éventuellement utiliser le même handler pour tous et tester le sender) Ensuite, if (e.Button = = MouseButtons.Right) c'est que le menu contextuel va s'afficher. Tu conserve dans une variable membre le dernier contrôle ayant affiché le menu contextuel (sender). Lors du clic sur un élément du menu, tu consultes cette variable... 2) Pour éventuellement obtenir un objet GraphLine à partir de coordonnées dans le référentiel du GraphContainer, ajoute cette méthode dans la région des méthodes publiques de l'objet GraphContainer : #region GetLineAt /// <summary> /// Extrait l'objet GraphLine situé à l'emplacement spécifié. /// </summary> /// <param name="pt">Coordonnées à tester.</param> /// <returns>Objet GraphLine ou null.</returns> public GraphLine GetLineAt(Point pt) { lock (_lines.SyncRoot) { foreach (GraphLine line in _lines) { if (line.ContainsMouse(pt)) return line; } } return null; } #endregion Bon code -- AOGie --
|
|
mardi 5 juillet 2005 à 23:46:08 |
Re : Evenement dynamique (new EventHandler())

Lutinore
|
Ohlala j'ai rien compris non plus, lol ! Aogie tu veux dire que c'est pas la peine de caster le sender en MenuItem, ca ne renvoie pas vraiment l'objet à l'origine de l'événement ?
|
|
mercredi 6 juillet 2005 à 07:15:46 |
Re : Evenement dynamique (new EventHandler())

aogie
|
Imaginons 2 lignes : line1 et line2 et une variable membre _lastLine de type GraphLine. 1ère possibilité :
line1.MouseUp += new MouseEventHandler(line1_MouseUp); line2.MouseUp += new MouseEventHandler(line2_MouseUp); private void line1_MouseUp(object sender, MouseEventArgs e) {
if (e.Button = = MouseButtons.Right) _lastLine = line1; // mise à jour de la variable membre de type GraphLine }
private void line2_MouseUp(object sender, MouseEventArgs e) {
if (e.Button = = MouseButtons.Right) _lastLine = line2; // mise à jour de la variable membre de type GraphLine }
ou
2ème possibilité :
line1.MouseUp += new MouseEventHandler(lines_MouseUp); line2.MouseUp += new MouseEventHandler(lines_MouseUp);
private void lines_MouseUp(object sender, MouseEventArgs e) {
if (e.Button = = MouseButtons.Right) _lastLine = (GraphLine)sender; // mise à jour de la variable membre de type GraphLine }
Dans l'événement de clic sur un élément de menu, la variable _lastLine te donne l'objet à l'origine du menu contextuel...
-- AOGie --
|
|
mercredi 6 juillet 2005 à 09:38:01 |
Re : Evenement dynamique (new EventHandler())

Lutinore
|
Réponse acceptée !
Là c'est plus simple à comprendre ; )
|
|
Cette discussion est classée dans : table, composant, tab, eventhandler, ctxmenu
Répondre à ce message
Sujets en rapport avec ce message
EventHandler [ par azraeht ]
Bonjour! Je suis en train de développer un composant (un planning) qui hérite du contrôle ASP.NET Table. Je suis en train d'essayer de gérer les Even
treeview [ par manelfeki ]
Bonjour, je veux remplir ma treeviews a partir des tables differents(base de donner sql server 2005).les noeuts parents se remlies a partir d'ube tabl
insertion [ par soniafeki ]
Bonjour, voici mon code, mais ca ne lmarche pas pour l'insertion dans la table dans laquel je veux inserer connection.Open(); // Creation
NullReferenceException [ par khawlaaa ]
bonjour tous le monde , voila un bout de code de mon programme : [code] public static void Main() { trame oTrame = new trame(); I
connexion [ par soniafeki ]
Bonjour je travaille en c# et je veux savoir si une connecxion c'est bien effectuer c'est a dire su je donne le nom d'une base de donne et je demande
XML vers Access [ par sveleg ]
Bonjour. Je gère un entrepôt logistique pour des produits industriels variés. J'ai de bonnes notions en Access mais aucunes pour le language XML. J'ai
Object reference not set to an instance of an object(.length) [ par baby85 ]
bonsoir,j'ai un probleme au niveau de .lengthj ai fais une methode qui prend comme parmetre une variable stringpublic string getstrg(string tx)
Recherche automatique [ par RODRIGUEZMOLINE ]
Salut,J'aimerais trouver un composant qui me permet de faire des selections automatiques dans un champs texte. par exemple, si je tappe "A", tous les
Mon code est trop lent ! [ par alexbesn ]
Bonjour à tous. J'ai écris du code mais il est beaucoup trop lent, j'aurai besoin de l'avis d'experts ! Je souhaiterai écrire un programme qui vérif
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|