shortcut for bubbling event in winform
bonjour jordi
Rien de semblable n'existe en winform qui permet de faire propager de haut en bas et de bas en haut les events et le binding des proprietes avec les avantages et les inconvenients (quand on ne veut pas du bubbling il faut ecrire du code un peu partout).
Mais avec le raccourci addHandler tu peux publier les events des sous-controles qui t'interessent et les traiter events au niveau du form :
Un exemple tu recuperes le click d'un hypothetique bouton btnSave place dans un userControl lambda au nivau du WinForm ou de l'application:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
//code du usercontrol dans une lib WinFormsControlLibrary
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinFormsControlLibrary
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
this.myTextBox1.Multiline = true;
this.myTextBox1.size = new Size(145, 55);
this.myTextBox1.Text = "";
}
//publication de l'evenement btnSave_Click
public event EventHandler SaveClickButton { add { this.btnSave.Click += value; } remove { this.btnSave.Click -= value; } }
//evenement btnSave_Click
private void btnSave_Click(object sender, EventArgs e)
{
this.myTextBox1.Text="your btnSave...";
}
private void myTextBox1_TextChanged(object sender, EventArgs e)
{
this.myTextBox1.Text = "your btnSave..."+" myTextBox a change";
}
}
}
//code du winform qui refrence la dll WinFormsControlLibrary
// et utilise le usercontrol myUserControl
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.myUserControl.Size = new Size(200, 145);
}
//traitement dans Form du SaveClickButton
private void myUserControl_SaveClickButton(object sender, EventArgs e)
{
this.label1.Text = "SaveClickButton is clicked ";
}
}
} |
Quant à WPF ce qui fait son interet c'est :
- la simplicite de conception du dessin de l'interface des controles
-le "double tunnel" binding des dependency proprietes
-le "double tunnel" du routage des evenements
-la gestion de tout ce qui est "input-gesture" qui utilise le routage d'evenement et les events attaches
-entre autres le VisualTreeHelper.hitTest pour la gestion des mvts souris et meme le LogicalTreeHelper pour les controles non visuels.
Evidemment toute facilite se paye .....il y a un nouveau paradigme de programmation qui oblige à revoir certaines methodes de programmation mais tout habitude (seconde nature) et aisance vient plus de la repetiton et non du bien fonde des choses.....
Autant ne pas chercher à justifier l'injustifiable......
bon code....