也不知道这个标题怎么写,但是问题是个老问题,大家都可能遇到过,不过有同学问到,那就写出来。其实很简单。只不过有的同学看了其他博文后脑子还是懵懵的。所以这里就分两部分来说明一下。
文章目录
- 一、属性的传递
- 1、原理
- 2、步骤
- 3、实例代码
- 二、事件传递
- 1、原理
- 2、步骤
- 3、实例代码
文章原出处: https://blog.csdn.net/haigear/article/details/141399915
一、属性的传递
你的要求其实很简单,就是在主窗体的代码中能够控制userControl中的某控件的属性,比如文本属性,这里我们就以userControl中的textBox的text属性为例子来说明其原理和步骤:
1、原理
通过设置属性的方式传递,这个与你给一个类添加任意的属性是一回事。这不多讲了,如果这个基础都没有,那么你就要恶补一下C#的基础了。你也可以参考一下我前面出的专门介绍用户控件的博文。
2、步骤
首先,我们在用户控件类中声明你想要传递的子控件对外的名称,这里我们好比定好了为analyzicText ,实现的方法就是使用最简单的set 与get来分别来设置和获取你要传递控件的值(假定你要传递的控件为textBox1)。
完成上述步骤后,编译一次你的工程,你就会在你的用户控件中看到刚刚我们设置的这个属性的名称,效果如下:
3、实例代码
用户控件中的代码
[Description("参考分析内容")] //新建控件说明 用来描述控件的作用public string analyzicText {get { return textBox1.Text; } set {textBox1.Text=value;}}
private void TestForm_Load(object sender, EventArgs e){answerControl1.analyzicText = "这里就是答案分析的文本框内容了";}
我们为了方便举例,就直接在form的load事件中调用了,我们前面的用户控件answerControl1de 的analyzicText 属性
二、事件传递
在主窗体的代码中能够控制userControl中的某控件的事件,比如单击事件、鼠标拖动事件等,这里我们就以userControl中的Button的click事件为例子来说明其原理和步骤:
1、原理
通过事件代理来完成,没有基础的需要参考我们前面的介绍C#代理相关的博文。
2、步骤
首先,我们必须在用户控件中声明一个事件代理,然后将想要传递事件的控件的对应事件,比如这里我们就传递button_click,那么就在控件编辑状态下双击按钮,自动生成button_click事件,在事件中写一个触发语句即可:SubmitClick?.Invoke(this, EventArgs.Empty);
最后,我们启动工程编译一下,就可以在主窗体下的用户控件中看到这个事件名称了,这里我们使用的是SubmitClick,双击之后就可以使用了(无须单独做事件绑定,也称之为订阅,因为双击的时候系统自动为你在form.designer.cs中为你绑定了)
3、实例代码
[Description("提交的点击事件")]public event EventHandler SubmitClick; //声明一个事件private void button3_Click(object sender, EventArgs e){SubmitClick?.Invoke(this, EventArgs.Empty);}
窗体中的调用代码:
private void navigationControl1_SubmitClick(object sender, EventArgs e){MessageBox.Show("Submit");}
如果要手动绑定,就使用这样的方式,其实系统会为你自动绑定:
this.navigationControl1.SubmitClick += new System.EventHandler(this.navigationControl1_SubmitClick);
点击后触发的效果:
对于自定义事件,我们在用户控件中则要单独自己绑定为好,而且用户控件内的事件代码实现也不一样,下一篇我们单独介绍。
文章可能随时更新,请关注文章原出处:https://blog.csdn.net/haigear/article/details/141399915