父窗体与子窗体传递问题

 

 需求:父窗体一TextBox点击后弹出子窗体,在子窗体中数值计算后返回结果给父窗体中的TextBox.

设计:

1、父窗体:一TextBox控件

2、子窗体:两个TextBox控件,分别用于接受两个数值;一个Combobox控件用于选中运算符,一Lable控件;一Button控件,取结果返回并关闭子窗体。

实现:

1、Program.cs

namespace CalculateForWhat
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            //Application.Run(new Form2());
        }
    }
}

2、Form1父窗体:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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

        private void txtbox_ReceiveVal_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2(this);//注意将当前父窗体实例传递到Form2
            f.Show();
        }
    }
}

3、Form2子窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace CalculateForWhat
{
    public partial class Form2 : Form
    {
        Form1 _frm1;
        public Form2(Form1 frm1)
        {
            InitializeComponent();
            this.BindCombobox();

            this._frm1 = frm1;//接受父窗体实例,这样就可用_frm1调用父窗体控件
        }

        private void BindCombobox()
        {
            //throw new Exception("The method or operation is not implemented.");
            ArrayList al = new ArrayList();
            al.Add("+");
            al.Add("-");
            al.Add("*");
            al.Add("/");
            this.comboBox1.DataSource = al;

        }

        private void btn_GetVal_Click(object sender, EventArgs e)
        {
            double val1, val2;
            double finalVal;
            try
            {
                val1 = Convert.ToDouble(this.textBox1.Text.Trim());
                val2 = Convert.ToDouble(this.textBox2.Text.Trim());
            }
            catch
            {
                MessageBox.Show("请在文本框中输入数值!!", "出错啦", MessageBoxButtons.OK);
                return;
            }

            string flag = this.comboBox1.SelectedValue.ToString();
            switch (flag)
            {
                case "+":
                    finalVal = val1 + val2;
                    break;

                case "-":
                    finalVal = val1 - val2;
                    break;

                case "*":
                    finalVal = val1 * val2;
                    break;

                case "/":
                    finalVal = val1 / val2;
                    break;
                default: throw new Exception("错误的运算符!!");
                    break;
            }
            this._frm1.txtbox_ReceiveVal.Text = finalVal.ToString();//Success   


            this.Close();//关闭当前窗体

        }


    }
}

--------------------------------------------

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 WinForm 中,可以通过使用委托将消息从传递。委托是一种允许我们在一个中定义一个事件,并在其他中响应该事件的机制。 首先,在中定义一个委托类型的事件,并创建一个触发事件的方法。例如: ``` // 中定义委托事件 public delegate void MyEventHandler(string message); public event MyEventHandler MyEvent; // 触发事件的方法 private void SendMessageToChild() { if (MyEvent != null) { MyEvent("这是来自的消息"); } } ``` 然后,在中订阅这个事件,并定义一个处理事件的方法。例如: ``` // 中订阅事件 private void SubscribeParentEvent() { ParentForm parent = (ParentForm)this.ParentForm; parent.MyEvent += new MyEventHandler(ReceiveMessageFromParent); } // 处理事件的方法 private void ReceiveMessageFromParent(string message) { // 在中处理传递过来的消息 Console.WriteLine(message); } ``` 最后,在中创建的实例并显示。在需要传递消息的时候,调用的触发事件方法。例如: ``` // 创建并显示 ChildForm child = new ChildForm(); child.SubscribeParentEvent(); child.Show(); // 在需要传递消息的时候调用的方法 ParentForm parent = new ParentForm(); parent.SendMessageToChild(); ``` 通过上述步骤,我们就可以在之间通过委托实现消息的传递。优点是可以实现之间的松耦合,可以通过委托监听中的事件并作出相应处理。 ### 回答2: 要实现winform中委托传递的功能,可以按照以下步骤进行操作: 1. 在中定义一个委托类型和事件,用于传递需要在中执行的方法。例如: ``` public delegate void MyDelegate(string message); public event MyDelegate SendMessageEvent; ``` 2. 在需要的时候,触发这个事件并传递相应的参数。例如: ``` SendMessageEvent?.Invoke("Hello, !"); ``` 3. 在中定义一个接收委托类型的方法,并在需要的时候注册这个方法到的事件中。例如: ``` public void ReceiveMessage(string message) { MessageBox.Show(message); } // 在加载时注册接收方法到的事件中 private void ChildForm_Load(object sender, EventArgs e) { ParentForm parent = (ParentForm)this.Owner; parent.SendMessageEvent += ReceiveMessage; } ``` 通过以上操作,就可以实现在中定义委托,并在中接收并执行相应的方法。当触发事件时,中注册的方法会被调用,实现了委托的传递功能。 ### 回答3: 在WinForm中,可以通过委托将信息从传递。委托是一种特殊的数据类型,它允许将方法作为参数传递,并在需要时调用。 首先,在的类中定义一个委托,该委托代表的方法签名。例如,如果要传递一个字符串参数,可以定义一个委托如下: ```csharp public delegate void MyDelegate(string message); ``` 在中,实例化的对象,并创建一个委托的实例。然后,将的方法绑定到委托实例中。最后,将委托实例传递的构造函数或公共属性。例如: ```csharp public partial class ParentForm : Form { private ChildForm childForm; public ParentForm() { InitializeComponent(); childForm = new ChildForm(); MyDelegate myDelegate = new MyDelegate(this.SendMessage); childForm.MyEventHandler = myDelegate; } private void SendMessage(string message) { MessageBox.Show("Received message: " + message); } } ``` 在中,定义一个公共属性来接收委托的实例,并在需要时调用该委托。例如: ```csharp public partial class ChildForm : Form { public MyDelegate MyEventHandler { get; set; } private void Button_Click(object sender, EventArgs e) { MyEventHandler?.Invoke("Hello from child form!"); } } ``` 在中的按钮点击事件中,调用委托实例的Invoke方法,并传递需要发送的信息。 这样,当中的按钮被点击时,委托会调用中定义的方法,并将消息传递会弹出一个消息框显示接收到的信息。 以上就是使用委托在WinForm中实现传递信息的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值