当前位置: 首页 > news >正文

C#用户控件usercontrol中的子控件事件及属性的传递

也不知道这个标题怎么写,但是问题是个老问题,大家都可能遇到过,不过有同学问到,那就写出来。其实很简单。只不过有的同学看了其他博文后脑子还是懵懵的。所以这里就分两部分来说明一下。

文章目录

  • 一、属性的传递
    • 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


http://www.mrgr.cn/news/3339.html

相关文章:

  • 有哪些方法可以查看服务器是否配置了RAID?
  • IP in IP 协议
  • Qt QTextEdit调用append数据重复的问题
  • M-Fedya and Array(cf1793)
  • avalonia学习之按钮
  • Python爬虫图片:从入门到精通
  • startData
  • RabbitMQ与ElasticSearch面试
  • 5IUX极简主页搜索源码/自定义你的浏览器主页
  • Rust: 技术介绍
  • 【设计模式反模式:UML图示有那些常见误用?】
  • 计算机毕业设计选题推荐-养老院管理系统-Java/Python项目实战
  • 用户体验的优化:观测云在用户行为分析中的应用
  • wireshark启动之后找不到本地接口问题
  • 智慧楼宇公厕系统小程序,提高卫生间管理使用效率
  • Golang | Leetcode Golang题解之第343题整数拆分
  • wsl2安装ebpf教程
  • Redis远程字典服务器(9)—— 类型补充
  • [Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
  • Linux 音媒体小项目练手