当前位置:   article > 正文

c# 学习笔记 (2) 窗体之间互相调用的方法_c#同级别的窗体调用方法

c#同级别的窗体调用方法

c# 学习笔记 (2) 窗体之间互相调用的方法

创建一个winform工程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

创建两个窗体

一个子窗体,一个父窗体,这里为了演示,子窗体和父窗体上都有一个文本框和按键,点击任意一个窗体上的按键,窗体上文本框的内容会同步到另外一个窗体的文本框上。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
添加控件textbox和button,然后双击button,添加按键单击事件,子窗体类似。
在这里插入图片描述

父窗体向子窗体传值

最常见的方法就是子窗体中创建一个public方法,在父窗体中调用该方法将参数传递给子窗体

子窗体中声明一个txbPrint方法,将接收到的str显示在子窗体文本框内

        public void txbPrint(string str)
        {
            txbInfo.Text = str;
        }
  • 1
  • 2
  • 3
  • 4

父窗体

		FormChild formChild = new FormChild();
        private void FormMain_Load(object sender, EventArgs e)
        {
            formChild.Show();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            formChild.txbPrint(txbInfo.Text);
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

子窗体向父窗体传值

方法一 通过静态字段传值
  • 像上面父窗体向子窗体传值一样,子窗体也可以通过类似的方法向父窗体传值,不过一般不要这样用,会破坏代码封装性,别人看了会嫌弃的

在主窗体中添加一个静态字段,窗体加载时将this指针赋值给formMain,然后在子窗体中就可以通过静态字段formMain操作类中的public方法

	//主窗体
	public partial class FormMain : Form
    {
        public static FormMain formMain;
        public FormMain()
        {
            InitializeComponent();
        }

        FormChild formChild = new FormChild();
        private void FormMain_Load(object sender, EventArgs e)
        {
            formMain = this;
            formChild.Show();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            formChild.txbPrint(txbInfo.Text);
        }
    }
	
	//子窗体
    public partial class FormChild : Form
    {
        public FormChild()
        {
            InitializeComponent();
        }

        public void txbPrint(string str)
        {
            txbInfo.Text = str;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            //通过静态字段传值
            FormMain.formMain.txbPrint("txbInfo.Text");
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
方法二 通过委托传值
  • 个人感觉C# 中的委托和C语言中的指针函数有点类似。
  • 通过委托传值,首先声明一个委托类 本例子中 public delegate void SendLogDelegate(string str); 这个委托类可以生成 参数是string类型 没有返回值的委托,和C语言中声明指针函数类似
  • 然后通过这个委托类在子窗体中实例化一个委托 public SendLogDelegate sendLogDelegate;
  • 最后在主窗体中,实例化子窗体时,给委托 sendLogDelegate 赋值 txbPrint
  • 然后在子窗体中使用该委托,就相当于调用了主窗体中的 txbPrint函数
	//主窗体
	public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }

        FormChild formChild = new FormChild();
        private void FormMain_Load(object sender, EventArgs e)
        {
            //给委托赋值 调用该委托即调用 txbPrint方法
            formChild.sendLogDelegate = txbPrint;
            formChild.Show();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            formChild.txbPrint(txbInfo.Text);
        }

        public void txbPrint(string str)
        {
            txbInfo.Text = str;
        }
    }

	//创建一个委托类 这个委托类可以 生成参数是string类型 没有返回值的委托
    public delegate void SendLogDelegate(string str);
	//子窗体
    public partial class FormChild : Form
    {
        //实例化一个委托 
        public SendLogDelegate sendLogDelegate;

        public FormChild()
        {
            InitializeComponent();
        }

        public void txbPrint(string str)
        {
            txbInfo.Text = str;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if(sendLogDelegate != null)
            {
                //调用委托 
                sendLogDelegate(txbInfo.Text);
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
方法三 传递简单参数
  • 一些情况下,主窗体仅需要获取子窗体关闭后的一些简单状态,如true或者false,这里可以使用窗体中的自带的字段来解决 this.DialogResult ,这个一般用在关闭子窗体时,修改子窗体的 this.DialogResult ,然后在主窗体中检查子窗体的 DialogResult 来传递参数,用的不多。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/690646
推荐阅读
相关标签
  

闽ICP备14008679号