首页 > 代码库 > 事件委托应用:在父控件中创建子控件,并接收值
事件委托应用:在父控件中创建子控件,并接收值
传值过程使用委托方法
定义一个打开按扭,一个文本框
1 /// <summary> 2 /// 增加父控件 3 /// </summary> 4 public void AddParent(BaseControl ctl) 5 { 6 foreach (Control ct2 in this.Parent.Controls) 7 { 8 if (ct2.Name == ctl.Name) { 9 ct2.Focus();10 return;11 } 12 } 13 ctl.Width = 400; 14 ctl.Dock = DockStyle.Right;15 ctl.DisposedPassingChanged += Ctl_DisposedPassingChanged;//用于在【父>子】控件关闭时接收值16 //this.textEdit1.Text = ( ctl.Passing).Text;17 Console.WriteLine("方法4:开始创建子窗体");18 //ctl.Parent = this; 19 this.Parent.Controls.Add(ctl); 20 }21 22 //用于在【父>子】控件关闭时接收值23 private void Ctl_DisposedPassingChanged(object sender, PassingEventArgs e)24 {25 ShowSunControl source = sender as ShowSunControl;26 if(source!=null) 27 Console.WriteLine("方法5.1:已调用:" + source.Name.ToString());28 this.textEdit1.Text = ((DevExpress.XtraEditors.TextEdit)source.Passing).ToString();29 Console.WriteLine("方法5.2:已接受返回来的数据:" + source.Name.ToString());30 }
定义一个关闭按扭,一个文本框
1 public ShowSunControl() 2 { 3 InitializeComponent(); 4 this.barButtonItem1.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem1_ItemClick); 5 this.Passing = this.textEdit1;//传值绑定 6 Console.WriteLine("方法1:窗体加载" ); 7 } 8 9 // 关闭的时候执行10 private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)11 {12 Console.WriteLine("方法2:您单击了关闭窗体。");13 this.Dispose();//触发传值14 }15 16 // 操作的时候执行17 private void textEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)18 { 19 Console.WriteLine("方法3:您正在输入值。");20 21 }
BaseControl.cs
定义委托、自定义事件
1 public partial class BaseControl : UserControl 2 { 3 object passing; 4 public object Passing 5 { 6 get { return passing; } 7 set { passing = value; } 8 } 9 public object LogoPassing10 {11 get { return passing; }12 set { passing = value; }13 }14 public BaseControl():this(null) 15 {16 InitializeComponent();17 }18 19 public BaseControl(object value)20 {21 InitializeComponent();22 this.Disposed += BaseControl_Disposed1; 23 Passing = value; 24 }25 //事件发行者 关闭调用的时候先执行26 private void BaseControl_Disposed1(object sender, EventArgs e)27 {28 DisposedPassingChanged?.Invoke(this, new PassingEventArgs(Passing));29 Console.WriteLine("方法0:DisposedPassingChanged 已发生事件,目标已传出,查看调用窗体是否接收到数据。");30 this.Dispose();31 }32 33 public delegate void PassingEventHandler(object sender, PassingEventArgs e);34 public event PassingEventHandler DisposedPassingChanged;35 36 }37 public class PassingEventArgs : EventArgs38 {39 private object passing = string.Empty;40 public PassingEventArgs(object args) 41 {42 passing = args;43 }44 public object Passing 45 {46 get { return passing; }47 }48 49 }
程序调用后,Console.WriteLine 输入结果如下:
1 //方法1:窗体加载2 //方法4:开始创建子窗体3 //方法3:您正在输入值。4 //方法2:您单击了关闭窗体。5 //方法5:已调用:ShowSunControl6 //方法5:已接受返回来的数据:ShowSunControl7 //方法0:DisposedPassingChanged 已发生事件,目标已传出,查看调用窗体是否接收到数据。
窗体中也接收到了数据,
事件委托应用:在父控件中创建子控件,并接收值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。