我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#实现不同窗体之间传递参数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#实现不同窗体之间传递参数

C#不同窗体之间传递参数

最近导师安排C#写桌面GIS开发。碰到诸多问题。无奈不是计算机出身的我早就把编程基础还给老师了。

开发过程属于敲代码两分钟翻博客两小时的状态,这边将自己的问题及解决方案总结。

主要两个内容:

①父窗口给子窗口传递参数,

②子窗口给父窗口传递参数。

1.父窗口向子窗口传递参数

这个就比较简单了,级别高一点访问也轻松一点。具体的原理我就不讲了(感觉说不清楚OJ2…),总之使用类的私有变量然后父窗口赋值就可以了。

父窗口(mainForm)代码:

namespace demo_Params
{
    public partial class mainForm : Form
    {
        public mainForm()
        {
            InitializeComponent();
        }
        
        //传递变量到子窗口
        private void btn_Input_BtnClick(object sender, EventArgs e)
        {
            childForm childForm = new childForm();//childForm为新建窗口类
            childForm.str = this.tb_MainFormIn.InputText ;//str为子类的公有变量
            if (childForm.ShowDialog() == DialogResult.OK) return;
        }

        
    }
}

子窗口(childForm)代码:

namespace demo_Params
{
    public partial class childForm : Form
    {
        public childForm()
        {
            InitializeComponent();
        }

        //私有变量和赋值,value值在父窗口传递
        private string w_str;
        public string str
        {
            set
            {
                w_str = value;
            }
        }
        //显示父窗口的变量到文本框
        private void btn_getPara_BtnClick(object sender, EventArgs e)
        {
            this.tb_childFormIn.Text = w_str;
        }
    }
}

父窗口向子窗口传递

2.子窗口向父窗口传递参数

这个就比较麻烦了,看了很多,自己用起来感觉不错的是通过委托事件和事件触发执行函数来解决参数的传递和接受。道理就不说了,直接COPY用起来。

父窗口(mainForm)代码:

namespace demo_Params
{
    public partial class mainForm : Form
    {
        public mainForm()
        {
            InitializeComponent();
        }
        //接受参数初始化
        string str = "";      
        //打开子窗口childForm
        private void btn_openWin_BtnClick(object sender, EventArgs e)
        {

            childForm childForm = new childForm();
            childForm.getParam += new backParam(fun_GetChildParam);//绑定事件
            if (childForm.ShowDialog() == DialogResult.OK) return;
        }
        //委托事件执行方法
        void fun_GetChildParam(string w_childpara) 
        {
            str = w_childpara;
        }
        //显示参数到文本框,看看参数能不能调用
        private void btn_Output_BtnClick(object sender, EventArgs e)
        {
            tb_MainFormOut.InputText = str;
        }
    }
}

子窗口(childForm)代码:

namespace demo_Params
{

    public delegate void backParam(string str);//声明委托
    public partial class childForm : Form
    {
        public childForm()
        {
            InitializeComponent();
        }
        public event backParam getParam;//委托事件,接受一个string变量
        
        //传回变量 关闭窗口
        private void btn_childFormBack_BtnClick(object sender, EventArgs e)
        {
            getParam(this.tb_childFormIn.Text);//将变量委托
            this.DialogResult = DialogResult.OK;
        }
    }
}


3.代码说明

两种传递参数的情况,我写在了一个程序里面。整理时为了区分,有所删改。(子传父代码块内不含父传子内容)

直接复制代码至WPF项目中,应该不能运行。 使用了第三方控件,部分控件属性、事件命名不同。大家如要复现使用TextBox和Button即可。

C#子窗体与父窗体之间的参数传输

最近在做项目时涉及到了子窗体与父窗体之间的参数传输问题,通过查阅与学习总结了一种方法。

1.子窗体传父窗体

Form1为主窗体,Form2为子窗体。

实现:在Form1上添加一个button1,点击button1后显示Form2,再点击Form2的button1 在button1_Click事件中通过this.Owner将Form2的textBox2的值设置给Form1的textBox1(也可以将Form2中的某个值传给Form1,然后在Form1进行后续的处理,将示例代码修改一下即可)

示例代码:

    //Form1上的代码(主窗体)
    public partial class Form1 : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //显示Form2
            Form2 childForm = new Form2();
            childForm.Show();
            //定义Form2的“爸爸”为Form1 
            calForm.Owner = this;
            
 
            或者
            //Form2 childForm = new Form2();
            //childForm.Show(this);
        }
    }
 
 
    //Form2上的代码(子窗体)
    public partial class Form2 : Form
    {
        public CalibrationForm()
        {
            InitializeComponent();
        }
        private void button_Click(object sender, EventArgs e)
        {
            MainForm mForm = (MainForm)this.Owner;
            //注意 如果textBox1是放在panel1中的 则先找panel1 再找textBox1
            ((TextBox)mForm.Controls["textBox1"]).Text = this.textBox2.Text;
 
            //也可直接将控件的属性Modifiers修改为public 然后直接调用
            mForm.textBox1.Text = this.textBox2.Text;
        }
     }

2.父窗体传子窗体

Form1为主窗体,Form2为子窗体。

实现:在Form1上添加一个button1,点击button1后显示Form2,然后点击Form2的button1显示Form1中的某个参数。(用构造函数来实例化Form2窗体,然后把Form1的this指针传进去,这样就可以在Form2中调用Form1的参数(此参数必须是public属性的))

示例代码:

    //Form1上的代码(主窗体)
    public partial class Form1 : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
        
        public string str = "你好!";
        private void button1_Click(object sender, EventArgs e)
        {
            //实例化子窗体,并将父窗体的指针this传入
            Form2 childForm = new Form2(this);
            childForm.Show();
        }
    }
 
 
    //Form2上的代码(子窗体)
    public partial class Form2 : Form
    {
        public CalibrationForm()
        {
            InitializeComponent();
        }
 
        private Form1 frmMain;
        public Form2(Form1 mForm)
        {
            InitializeComponent();
            this.frmMain = mForm;
        }
 
        private void button1_Click(object sender,EventArgs e)
 
        {
 
             this.textBox1.Text = mForm.str;  
 
        }
     }

子窗体与父窗体之间的参数传输方法不止这一种,还可以用委托等,这里只总结了个人认为较为简单的一种方法,如果以后涉及委托会进行补充。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#实现不同窗体之间传递参数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#实现不同窗体之间传递参数

这篇文章主要介绍了C#实现不同窗体之间传递参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-26

C#如何实现不同窗体之间传递参数

今天小编给大家分享一下C#如何实现不同窗体之间传递参数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C#不同窗体之间传递参数
2023-07-05

java不同类之间怎么传递参数

在Java中,可以通过以下几种方式在不同类之间传递参数:1. 方法参数传递:在调用一个类的方法时,可以将参数作为方法的参数进行传递。例如:```javapublic class ClassA {public void methodA(int
2023-09-15

java不同类之间的参数怎么传递

在Java中,不同类之间传递参数可以通过以下几种方式实现:通过方法参数传递:在调用一个类的方法时,可以将参数作为实参传递给该方法。例如:public class ClassA {public void methodA(String para
java不同类之间的参数怎么传递
2024-02-29

c#跨窗体传递数据怎么实现

在C#中,可以通过使用委托来实现跨窗体的数据传递。首先,在发送数据的窗体中定义一个委托类型和事件,用于传递数据:public delegate void DataTransferDelegate(string data);public
c#跨窗体传递数据怎么实现
2024-03-02

Vue不同项目之间传递、接收参数问题

这篇文章主要介绍了Vue不同项目之间传递、接收参数问题,主要针对是登录操作,我们为了完成SSO(SingleSignOn)的效果,认证和授权在UC完成,用户发起资源请求,服务网关会进行过滤,本文给大家介绍的非常详细,需要的朋友可以参考下
2023-05-17

C++ thread传递参数怎么实现

在C++中,可以通过以下几种方式传递参数给线程:传递参数作为线程函数的参数:#include #include void myFunction(int parameter) {std::cout <<
C++ thread传递参数怎么实现
2024-02-29

C#怎么实现按值传递参数

这篇文章主要讲解了“C#怎么实现按值传递参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现按值传递参数”吧!按值传递参数这是参数传递的默认方式。在这种方式下,当调用一个方法时,会
2023-06-17

python不同类间参数传递的方法是什么

在Python中,不同类间的参数传递可以通过以下几种方法实现:1. 构造函数:通过在一个类的构造函数中传递参数,然后在另一个类的对象创建时将参数传递给构造函数。例如:```pythonclass ClassA:def __init__(se
2023-09-27

C#线程传递参数实现方法

这篇文章主要讲解了“C#线程传递参数实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#线程传递参数实现方法”吧!C#线程传递参数的实现是如何进行的呢?那么这里我们使用MyThread
2023-06-17

C#怎么实现按引用传递参数

今天小编给大家分享一下C#怎么实现按引用传递参数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。按引用传递参数引用参数是一个对
2023-06-17

Android 中怎么实现Activity 间传递参数

这篇文章将为大家详细讲解有关Android 中怎么实现Activity 间传递参数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.传递简单数据在A Activity中findViewByI
2023-05-30

C#怎么实现按输出传递参数

这篇文章主要讲解了“C#怎么实现按输出传递参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现按输出传递参数”吧!按输出传递参数return 语句可用于只从函数中返回一个值。但是,
2023-06-17

python文件间传递参数怎么实现

在Python中,可以使用命令行参数、环境变量、文件等方式在不同的Python文件之间传递参数。1. 命令行参数:可以使用`sys.argv`获取命令行参数。`sys.argv[0]`表示当前Python文件路径,`sys.argv[1:]
2023-09-27

C++ 函数参数详解:不定参数传递的实现方式与优缺点

c++++不定参数传递:通过 ... 运算符实现,可接受任意数量的附加参数,优点包括灵活性、可扩展性和简化代码,缺点包括性能开销、调试困难和类型安全。常见实战案例包括 printf() 和 std::cout,它们使用 va_list 处理
C++ 函数参数详解:不定参数传递的实现方式与优缺点
2024-04-28

C++ 函数默认参数传递的实现原理

c++++ 函数默认参数传递的实现原理:编译时解析函数声明,分配内存单元存储默认参数值。函数调用时检查实参存在性:若存在,使用传入值;否则,使用默认参数值。x86 架构中,默认参数通常存储在寄存器中,并在函数调用时压入栈中;实参值会覆盖默认
C++ 函数默认参数传递的实现原理
2024-04-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录