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

2024-08-21 19:44

本文主要是介绍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

这篇关于C#用户控件usercontrol中的子控件事件及属性的传递的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094109

相关文章

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据