您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

C#窗体间传值方法汇总

时间:2023-03-09 14:18:01  来源:今日头条  作者:逍遥总遥

昨天被骂惨了!

因为我写了一个C#父窗体控制子窗体的方法,我把modifiers属性改成了public。本来只是说一下有这么个属性,没想到引起了这顿喷哈哈,虚心接受,感谢朋友们的支持。

我错了!我重新写!

最终效果,就是点主窗体的按钮,更改子窗体picturebox的图片

 

新建项目,添加一个主窗体Form1和子窗体Form2,,,我们的任务是,在主窗体点击按钮控制子窗体的picturebox控件

1、第一种方法:基本是被高手不齿,不过还是比我昨天用的方法好哈哈

Form2子窗体代码:

namespace FormConnections
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        //建立一个公共函数用来更改pictureBox1的图片
        public void SetPic()
        {
            pictureBox1.ImageLocation = "c#.jpg";
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            //点击图片清空,为了调试用
            pictureBox1.Image = null;
        }
    }
}

Form1调用这个函数就可以了:

namespace FormConnections
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //实例化两个子窗体
        Form2 f2 = null;

        private void Form1_Load(object sender, EventArgs e)
        {
            //打开子窗体
            f2 = new Form2();
            f2.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //执行Form2的公共函数
            f2.SetPic();
        }
    }
}

2、第二种方法,用委托

子窗体代码不变,父窗体代码:

namespace FormConnections
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Form2 f2 = new Form2();

        private void Form1_Load(object sender, EventArgs e)
        {
            //打开子窗体
            f2.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //用委托去执行子窗体的内容
            this.Invoke(new Action(() => 
            {
                f2.SetPic();
            }));
        }
    }
}

3、第三种方法,用事件解决此类问题

父窗体代码:

namespace FormConnections
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //定义绑定FORM2更改图片操作的事件
        public event EventHandler ChangeForm2Pic;

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            //父窗体加载时,实例化Form2,并绑定事件
            ChangeForm2Pic += f2.ChangePicEvent;
            f2.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //点击按钮,执行事件
            ChangeForm2Pic(this, new Form2.PicPathArg() { PicPath = "C#.jpg" });
        }
    }
}

子窗体代码:

namespace FormConnections
{
    public partial class Form2 : Form
    {

        public Form2()
        {
            InitializeComponent();
        }

        //内部函数
        void GoSetPic(string picpath)
        {
            pictureBox1.ImageLocation = picpath;
        }

        internal void ChangePicEvent(object sender, EventArgs e)
        {
            //执行事件时,得到传递来的参数
            PicPathArg thepicpath = (PicPathArg)e;
            //执行内部函数
            this.GoSetPic(thepicpath.PicPath);
        }

        public class PicPathArg : EventArgs
        {
            //传递主窗体的数据信息
            public string PicPath { get; set; }
        }
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            //点击图片清空,为了调试用
            pictureBox1.Image = null;
        }
    }
}

我其实比较喜欢用委托,因为代码少,不过高手似乎都是用事件的。



Tags:C#   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
昨天被骂惨了!因为我写了一个C#父窗体控制子窗体的方法,我把modifiers属性改成了public。本来只是说一下有这么个属性,没想到引起了这顿喷哈哈,虚心接受,感谢朋友们的支持。我错...【详细内容】
2023-03-09  Tags: C#  点击:(0)  评论:(0)  加入收藏
一:背景前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的?其实简而言之就是线程的远程注入,这一篇就展...【详细内容】
2023-01-04  Tags: C#  点击:(36)  评论:(0)  加入收藏
一:背景1. 讲故事前些天看到一个奇怪的 Function 函数,调用的是 C# 链接库中的一个 UserLogin 方法,参考代码如下:CREATE FUNCTION dbo.clr_UserLogin( @name AS NVARCHAR(1...【详细内容】
2023-01-03  Tags: C#  点击:(32)  评论:(0)  加入收藏
作者 | 苏宓出品 | CSDN(ID:CSDNnews)如果说此前 Kotlin、Dart、Julia、Carbon 等后起之秀向老牌编程语言发起挑战进攻都是小打小闹,那么这一次 C、C++ 这几种常青藤编程语言则...【详细内容】
2022-11-15  Tags: C#  点击:(74)  评论:(0)  加入收藏
上升沿和下降沿在我们开发上位机时使用率非常高,常见于消息触发、脉冲归档等。但是在C#中没有类似PLC中的上升沿、下降沿那样的指令,需要我们自己编码来实现。首先我们创建一...【详细内容】
2022-09-27  Tags: C#  点击:(384)  评论:(0)  加入收藏
FreeIM 是什么?FreeIM 使用 websocket 协议实现简易、高性能(单机支持5万+连接)、集群即时通讯组件,支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。 ImCore 已...【详细内容】
2022-09-02  Tags: C#  点击:(129)  评论:(0)  加入收藏
本示例主要是讲明sql解析的原理。前言阅读本文需要有一定正则表达式基础 正则表达式基础教程 ,和编译原理的基础。有使用过VUE的伙伴可能知道vue是自定了模版解析编译器的,vue...【详细内容】
2022-09-01  Tags: C#  点击:(120)  评论:(0)  加入收藏
CS架构Ribbin版C#开发框架源码源码全开源免费分享,开源地址:访问:淘源码(源码编号:MF00078)系统概述:架构采用 C# + sql2008 + WCF 时下最流行组合。支持通过数据表快速开发业务单...【详细内容】
2022-08-24  Tags: C#  点击:(202)  评论:(0)  加入收藏
今天给大家推荐一个C#开发工具箱,涵盖了所有常用操作类,体积小、功能强大。项目简介C# 开发工具箱。大都是静态类,加密解密,反射操作,权重随机筛选算法,分布式短id,表达式树,linq扩...【详细内容】
2022-08-03  Tags: C#  点击:(158)  评论:(0)  加入收藏
个把月之前我做了一款PC端录音机软件,主要是因为windows自带的录音机很拉跨,无法同时录mic和声卡(也就是无法同时录话筒声音和对方说话的声音,虽然可以通过混音器解决,但一般人很...【详细内容】
2022-07-28  Tags: C#  点击:(150)  评论:(0)  加入收藏
▌简易百科推荐
昨天被骂惨了!因为我写了一个C#父窗体控制子窗体的方法,我把modifiers属性改成了public。本来只是说一下有这么个属性,没想到引起了这顿喷哈哈,虚心接受,感谢朋友们的支持。我错...【详细内容】
2023-03-09  逍遥总遥  今日头条  Tags:C#   点击:(0)  评论:(0)  加入收藏
去年我们官宣了 Visual Studio Code 可以直接导入 ST 项目,今天再次宣布:它的好兄弟 Visual Studio 2022 17.6 也支持此功能,详细请看下文。在 ARM 微控制器领域,有许多芯片供应...【详细内容】
2023-03-09  漫漫开发路  今日头条  Tags:Visual Studio   点击:(2)  评论:(0)  加入收藏
六个月以来,国际C++标准化工作组已经召开了两次会议。在第一次会议上,委员会集中于完善C++23的特性,其中包括: 静态运算符[] 静态常量表达式 在 常数表达式 函数 基于安全范围 ...【详细内容】
2023-02-21  xTech  今日头条  Tags:C++   点击:(190)  评论:(0)  加入收藏
当Windows操作系统启动一个程序时,它调用的就是该程序的WinMain函数( 实际是由插入到可执行文件中的启动代码调用的)。 WinMain是Windows程序的入口点函数,与DOS程序的入口点函...【详细内容】
2023-02-19  黑猫编程  51CTO  Tags:C++   点击:(21)  评论:(0)  加入收藏
1.1 nullptr  nullptr 出现的目的时为了替代 NULL。在某种意义上说,传统 C++ 会把NULL、0视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为(...【详细内容】
2023-02-17  Qt技术开发老jie  今日头条  Tags:C++   点击:(20)  评论:(0)  加入收藏
对于广大C语言开发者来说,缺乏类似C++ STL和Boost的库会让开发受制于基础库的匮乏,也因此导致了开发效率的骤降。这也使得例如libevent这类事件库(基础组件库)一时间大红大紫。...【详细内容】
2023-01-16  码哥比特  今日头条  Tags:C语言   点击:(39)  评论:(0)  加入收藏
最初开始禁用 C++ STL,更多的是早期项目编码实践中留下的惯例,被后来的程序员继承下来。老项目中这种选择尤其地多。不过如果有人将其上升到公司行为在不同项目中全面禁用 STL...【详细内容】
2023-01-15  那就随梦而飞     Tags:C++   点击:(41)  评论:(0)  加入收藏
概念 类模板 std::function 是通用多态函数包装器。 std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——...【详细内容】
2023-01-12  骇客遇见AI  今日头条  Tags:C++   点击:(33)  评论:(0)  加入收藏
C 是用于开发系统软件和任何微处理器软件的经典语言。 Linux,大部分Windows和MacOS都是写在上面的。 如果你使用任何现代可穿戴小工具或电子设备,在大多数情况下它们也会在 C...【详细内容】
2023-01-07  启辰8  今日头条  Tags:C++   点击:(42)  评论:(0)  加入收藏
众所周知,C语言在嵌入式开发中占据着十分重要的地位,为什么嵌入式开发要选择C语言?嵌入式开发的方向可以分为单片机开发、Linx应用开发和现场可编辑逻辑门阵列(FPGA)开发,不同于...【详细内容】
2023-01-03  沐沐渥生    Tags:嵌入式开发   点击:(26)  评论:(0)  加入收藏
站内最新
站内热门
站内头条