Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作。

实例介绍:两个窗体,Form1按钮打开Form2,然后在Form2的TextBox输入值在Form1的TextBox中显示出来。


一、项目结构

Form1窗体设计:

Form2窗体设计:

二、代码实现

在Form2的代码中声明一个委托(写在Form2类外)->

 public delegate void ChangeForm1TextBoxValue(string txt);

然后在Form2类内写一个委托事件->

public event ChangeForm1TextBoxValue ChangeTextBoxValue;

双击Form2的textbox给Form2的textbox添加值变化出发事件,并在此事件中调用委托事件->

private void textBox1_TextChanged(object sender, EventArgs e)
{
          ChangeTextBoxValue(this.textBox1.Text);//执行委托实例
}

Form2的完整代码如下:

using System;
using System.Windows.Forms;

namespace Test.FormsApp
{
    public delegate void ChangeForm1TextBoxValue(string txt);
    public partial class Form2 : Form
    {
        public event ChangeForm1TextBoxValue ChangeTextBoxValue;
        public Form2()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            ChangeTextBoxValue(this.textBox1.Text);//执行委托实例
        }
    }
}

然后我们切换到Form1的代码

button点击事件实例化Form2并调用Form2的委托事件->

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ChangeTextBoxValue += F2_ChangeTextBoxValue;
            f2.Show();
        }

在下面声明委托事件的操作方法->

        private void F2_ChangeTextBoxValue(string txt)
        {
            this.textBox1.Text = txt;
        }

上述步骤在输入+=号时可以双击两下Tab键,IDE(编译器)会自动将事件补全~

Form1的完整代码如下:

using System;
using System.Windows.Forms;

namespace Test.FormsApp.NETFramework461
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ChangeTextBoxValue += F2_ChangeTextBoxValue;
            f2.Show();
        }

        private void F2_ChangeTextBoxValue(string txt)
        {
            this.textBox1.Text = txt;
        }
    }
}

到这里,我们的实现基本完成,下面进入测试!

三、效果测试

然后在Form2的textbox中输入值

可以看到值已经实时显示到Form1的textbox中。

测试结果达到预期效果,项目实现成功!

一起成长,共同学习~

Winform跨窗体操作控件(使用委托)的更多相关文章

  1. C# 委托实例(跨窗体操作控件)

    在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“ ...

  2. C#跨窗体调用控件(委托回调函数使用例子)

    问题: 有两个窗体,FORM1(含一个label控件,一个名为显示form2的button控件)和FORM2(含一个button控件).启动时,FORM1中点击button控件显示form2使FORM ...

  3. winform 跨线程操作控件

    当进行winform的开发时,经常遇到用时比较久的操作,在传统的单线程程序中,用户必须等待这个耗时操作完成以后才能进行下一步的操作,这个时候,多线程编程就派上用场了,将这个耗时的操作放到一个新的子线程 ...

  4. winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏

    两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...

  5. WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)

    最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...

  6. C#跨线程操作控件的最简单实现探究

    随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同 ...

  7. C# 跨线程操作控件(简洁)

                                              C# 跨线程操作控件 .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生.解决此问题的方法有两个: 第一 ...

  8. winform跨线程访问控件

    首先说下,.net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性.所以除了控件所在的线程外的线程调用会抛异常 (Cross-thread operation not va ...

  9. WinForm中跨线程操作控件

    在WinForm编程时会遇到通过后台线程操作界面的情况,直接在后台线程执行的方法中直接操作控件会报错,这时候就要使用跨线程方式间接操作控件.下面是两种实现方式.   1.采用定义delegate的方式 ...

随机推荐

  1. IntelliJ IDEA(四) :Settings【Appearance and Behavior】

    前言 IDEA是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA?我们可以通过Settings功能来设置.Settings文件是IDEA的配置文件,通过他可以设置主题,项目,插件, ...

  2. javaweb学习总结(七)——HttpServletResponse对象(一)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3789624.html Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对 ...

  3. JAVA入门[1]--安装JDK

    1.下载JDK并安装 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  4. 什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)

    什么是 stack ?在回答这个问题之前我们先回忆一下前面部署 WordPress 应用的过程: 首先创建 secret. 然后创建 MySQL service,这是 WordPress 依赖的服务. ...

  5. java String,StringBuffer和StringBulder学习笔记

    1.String:不可改变的Unicode字符序列. 池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源以减少存储空间的开销. 在String类中,以字面值创建时,回到java方法空 ...

  6. Python datatime 格式转换,插入MySQL数据库

    Python datatime 格式转换,插入MySQL数据库 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-11-2 ...

  7. 微信小程序各类型的自定义组件篇

    由于本人最近在开发小程序项目,期间对小程序有花点时间去研究,同时也找了网上大牛的一些案例,在这里分享部分自定义组件,部分代码是copy大牛案例的,有对小程序有兴趣的伙伴拿走,不谢! 源码下载地址:ht ...

  8. Android开发之常见事件响应方式

    常见的事件有   (1)单击事件 onClickListener (2)长按事件 onLongClickListener (3)滑动事件 onTouchListener (4)键盘事件 onKeyLi ...

  9. 【java】获取当前日期时间:java.util.Date

    public class TestDate { public static void main(String[] args) { System.out.println(new java.util.Da ...

  10. 7、树莓派编程;gpio编程;led闪烁

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ12226981 1.树莓派接口对照,一定要找到对应的引脚,不要接错了.我画上箭头. 2.安装 下载地址,https://git.drogon.n ...