Faire circuler un événement d'un controle à un autre
3 réponses
metalseb
Sur un formulaire j'ai deux controles;
A gauche un treeview perso défini comme controle utilisateur qui affiche une
liste de répertoire.
A drroite un listview tout ce qu'il ya de plus classique sur lequel je veux
lister les fichiers présents dans le répertoire sélectionné sur l'autre
controle.
Je voudrais faire circuler l'info "répertoire sélectionné" du treeview vers
le listview. Je sais pour cela qu'il faut que je gère un système de "serveur
d'événement" avec des delegués. Ca reste très flou pour moi et les exemples
que je trouve ci et là ne m'avancent pas beaucoup.
Notez bien que je veux à tout prix conserver mon treeview comme controle
utilisateur car j'ai l'intention de réutiliser ce controle dans d'autres
applis. Il faut donc que le serveur d'event y soit intégré.
Je bute là dessus depuis deux jours, rien à faire !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gauthier Segay
Ma réponse n'est pas une solution toute faite,
il me semble que l'utilisation d'un classe accessible depuis le formulaire et les controles prenant en charge le "dispatch" des evenements a partir de l'instance de ton form serait le plus efficace si l'application est amenée a evoluer (en terme d'interactivité avec l'ui).
Niveau architecture, jette un coup d'oeil sur le design pattern MVC;
dans ton cas, il s'agit d'implémenter un "EventController" (le C) qui fasse réagir la Vue (le V). et qui puisse réagir (doit être accessible a tes controles ou a ton form) aux evenements sans pour autant mélanger ton code au code UI (celui "pondu" par le RAD).
Après tout dépend de ce que tu veux faire avec ton application, si c'est lister les fichiers sur le onclick du treeview et puis basta, code le tout dans ton form (j'aime pas trop faire ça, mais bon, y'en a qui le font).
Gauthier
metalseb wrote:
Sur un formulaire j'ai deux controles;
A gauche un treeview perso défini comme controle utilisateur qui affiche une liste de répertoire. A drroite un listview tout ce qu'il ya de plus classique sur lequel je veux lister les fichiers présents dans le répertoire sélectionné sur l'autre controle.
Je voudrais faire circuler l'info "répertoire sélectionné" du treeview vers le listview. Je sais pour cela qu'il faut que je gère un système de "serveur d'événement" avec des delegués. Ca reste très flou pour moi et les exemples que je trouve ci et là ne m'avancent pas beaucoup.
Notez bien que je veux à tout prix conserver mon treeview comme controle utilisateur car j'ai l'intention de réutiliser ce controle dans d'autres applis. Il faut donc que le serveur d'event y soit intégré.
Je bute là dessus depuis deux jours, rien à faire !
Ma réponse n'est pas une solution toute faite,
il me semble que l'utilisation d'un classe accessible depuis le
formulaire et les controles prenant en charge le "dispatch" des
evenements a partir de l'instance de ton form serait le plus efficace
si l'application est amenée a evoluer (en terme d'interactivité avec
l'ui).
Niveau architecture, jette un coup d'oeil sur le design pattern MVC;
dans ton cas, il s'agit d'implémenter un "EventController" (le C) qui
fasse réagir la Vue (le V). et qui puisse réagir (doit être accessible
a tes controles ou a ton form) aux evenements sans pour autant mélanger
ton code au code UI (celui "pondu" par le RAD).
Après tout dépend de ce que tu veux faire avec ton application, si
c'est lister les fichiers sur le onclick du treeview et puis basta,
code le tout dans ton form (j'aime pas trop faire ça, mais bon, y'en a
qui le font).
Gauthier
metalseb wrote:
Sur un formulaire j'ai deux controles;
A gauche un treeview perso défini comme controle utilisateur qui
affiche une liste de répertoire.
A drroite un listview tout ce qu'il ya de plus classique sur lequel
je veux lister les fichiers présents dans le répertoire sélectionné
sur l'autre controle.
Je voudrais faire circuler l'info "répertoire sélectionné" du
treeview vers le listview. Je sais pour cela qu'il faut que je gère
un système de "serveur d'événement" avec des delegués. Ca reste très
flou pour moi et les exemples que je trouve ci et là ne m'avancent
pas beaucoup.
Notez bien que je veux à tout prix conserver mon treeview comme
controle utilisateur car j'ai l'intention de réutiliser ce controle
dans d'autres applis. Il faut donc que le serveur d'event y soit
intégré.
Je bute là dessus depuis deux jours, rien à faire !
il me semble que l'utilisation d'un classe accessible depuis le formulaire et les controles prenant en charge le "dispatch" des evenements a partir de l'instance de ton form serait le plus efficace si l'application est amenée a evoluer (en terme d'interactivité avec l'ui).
Niveau architecture, jette un coup d'oeil sur le design pattern MVC;
dans ton cas, il s'agit d'implémenter un "EventController" (le C) qui fasse réagir la Vue (le V). et qui puisse réagir (doit être accessible a tes controles ou a ton form) aux evenements sans pour autant mélanger ton code au code UI (celui "pondu" par le RAD).
Après tout dépend de ce que tu veux faire avec ton application, si c'est lister les fichiers sur le onclick du treeview et puis basta, code le tout dans ton form (j'aime pas trop faire ça, mais bon, y'en a qui le font).
Gauthier
metalseb wrote:
Sur un formulaire j'ai deux controles;
A gauche un treeview perso défini comme controle utilisateur qui affiche une liste de répertoire. A drroite un listview tout ce qu'il ya de plus classique sur lequel je veux lister les fichiers présents dans le répertoire sélectionné sur l'autre controle.
Je voudrais faire circuler l'info "répertoire sélectionné" du treeview vers le listview. Je sais pour cela qu'il faut que je gère un système de "serveur d'événement" avec des delegués. Ca reste très flou pour moi et les exemples que je trouve ci et là ne m'avancent pas beaucoup.
Notez bien que je veux à tout prix conserver mon treeview comme controle utilisateur car j'ai l'intention de réutiliser ce controle dans d'autres applis. Il faut donc que le serveur d'event y soit intégré.
Je bute là dessus depuis deux jours, rien à faire !
Vko
Une solution pas trop compliquée :
1/ Définition d'un délégué :
public delegate void CustomEventHandler (object sender, string selectedValue);
1/ Tu déclares un evenement SelectionChanged sur ton User Control "treeView".
public event CustomEventHandler SelectionChanged;
2/ Dans le code du User Control, tu interceptes le message de AfterSelect (je suis pas sur que ce soit celui la) de ta treeview et tu rajoutes le code :
3/ Dans ton formulaire tu déclare une méthode avec le meme prototype définit par le délégué CustomEventHandler
private void SelectionChanged (object sender, string selectedValue) { // Ici tu place le code pour mettre a jour la listview }
4/ Dans ton formulaire tu interceptes l'évènement SelectionChanged de ton User Control :
[...] this.UC1.SelectionChange += new CustomEventHandler (SelectionChanged); [...]
J'èspère que cette solution peut convernir a ton problème.
-----Message d'origine----- Sur un formulaire j'ai deux controles;
A gauche un treeview perso défini comme controle
utilisateur qui affiche une
liste de répertoire. A drroite un listview tout ce qu'il ya de plus classique
sur lequel je veux
lister les fichiers présents dans le répertoire
sélectionné sur l'autre
controle.
Je voudrais faire circuler l'info "répertoire
sélectionné" du treeview vers
le listview. Je sais pour cela qu'il faut que je gère un
système de "serveur
d'événement" avec des delegués. Ca reste très flou pour
moi et les exemples
que je trouve ci et là ne m'avancent pas beaucoup.
Notez bien que je veux à tout prix conserver mon treeview
comme controle
utilisateur car j'ai l'intention de réutiliser ce
controle dans d'autres
applis. Il faut donc que le serveur d'event y soit
intégré.
Je bute là dessus depuis deux jours, rien à faire !
-- Seb
.
Une solution pas trop compliquée :
1/ Définition d'un délégué :
public delegate void CustomEventHandler (object sender,
string selectedValue);
1/ Tu déclares un evenement SelectionChanged sur ton User
Control "treeView".
public event CustomEventHandler SelectionChanged;
2/ Dans le code du User Control, tu interceptes le message
de AfterSelect (je suis pas sur que ce soit celui la) de
ta treeview et tu rajoutes le code :
public delegate void CustomEventHandler (object sender, string selectedValue);
1/ Tu déclares un evenement SelectionChanged sur ton User Control "treeView".
public event CustomEventHandler SelectionChanged;
2/ Dans le code du User Control, tu interceptes le message de AfterSelect (je suis pas sur que ce soit celui la) de ta treeview et tu rajoutes le code :