OVH Cloud OVH Cloud

Faire circuler un événement d'un controle à un autre

3 réponses
Avatar
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 !

--
Seb

3 réponses

Avatar
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 !


Avatar
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 :

private void treeView1_AfterSelect(..)
{
if (this.SelectionChanged != null)
this.SelectionChange(this,
this.treeView1.SelectedNode.Text);
}

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


.



Avatar
metalseb
Vko wrote:
Une solution pas trop compliquée :


[....]
J'èspère que cette solution peut convernir a ton problème.



Excellent !!! Grace à ton exemple je commence à bien comprendre le
fonctionnement de la génération d'événements et des délégués.

Merci infiniment de ton aide !

--
Seb