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

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

  最近导师安排C#写桌面GIS开发。碰到诸多问题。无奈不是计算机出身的我早就把编程基础还给老师了。开发过程属于敲代码两分钟翻博客两小时的状态,这边将自己的问题及解决方案总结。希望有所帮助。
  主要两个内容:①父窗口给子窗口传递参数,②子窗口给父窗口传递参数。



1. 父给子
2. 子给父
3. 说明

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即可。


欢迎大家反馈交流。
本文链接:https://blog.csdn.net/qq_38560619/article/details/107049844

  • 15
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# WinForm中,可以通过以下几种方式实现窗体之间参数传递: 1. 构造函数传参:在打开新窗体时,在构造函数中传入参数,并在新窗体中接收参数。示例代码如下: ``` // 在父窗体中打开子窗体 ChildForm childForm = new ChildForm(param1, param2); childForm.Show(); // 在子窗体中接收参数 public ChildForm(string param1, int param2) { InitializeComponent(); // 对参数进行操作 } ``` 2. 属性传参:在打开新窗体时,在新窗体中定义公共属性,通过属性传递参数。示例代码如下: ``` // 在父窗体中打开子窗体 ChildForm childForm = new ChildForm(); childForm.Param1 = param1; childForm.Param2 = param2; childForm.Show(); // 在子窗体中定义公共属性 public string Param1 { get; set; } public int Param2 { get; set; } // 在子窗体中使用属性 private void ChildForm_Load(object sender, EventArgs e) { // 对属性进行操作 } ``` 3. 静态变量传参:在打开新窗体时,在新窗体中定义静态变量,通过静态变量传递参数。示例代码如下: ``` // 在父窗体中打开子窗体 ChildForm.Param1 = param1; ChildForm.Param2 = param2; ChildForm childForm = new ChildForm(); childForm.Show(); // 在子窗体中定义静态变量 public static string Param1 { get; set; } public static int Param2 { get; set; } // 在子窗体中使用静态变量 private void ChildForm_Load(object sender, EventArgs e) { // 对静态变量进行操作 } ``` 以上三种方式都可以实现窗体之间参数传递,具体选择哪种方式取决于应用场景和个人习惯。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值