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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|