我如何将值从第一个表单传递到第二个表单messageBox ?它会显示为0

本文关键字:表单 messageBox 第二个 显示 第一个 | 更新日期: 2023-09-27 18:13:15

这是第一个表单(包含一个OK按钮和一个文本框)

namespace Testt
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public int dimx;
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            this.Hide();
            f2.ShowDialog();
            this.Show();
            dimx = int.Parse(textBox1.Text);
            MessageBox.Show(dimx.ToString());

        }
    }
}

这是第二个表单(它包含一个OK按钮+当OK被按下时的消息框)

namespace Testt
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 f=new Form1();
            MessageBox.Show(f.dimx.ToString());
        }
    }
}

我想在文本框中写入6的值,按OK,然后弹出form2,当我在第二个表单上按OK时,它应该显示6而不是0..我做错了什么?

我如何将值从第一个表单传递到第二个表单messageBox ?它会显示为0

你可以让你的表单把dimx作为一个变量,所以它看起来像这样

public partial class Form2 : Form
{
    private int dimX;
    public Form2(int dimx)
    {
        InitializeComponent();
        dimX = dimx;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(dimX.ToString());
    }
}

或者你可以传递表单本身,改变

public Form2(int dimx)

public Form2(Form1 f1)

您还必须替换

private int dimX;
//and
dimX = dimx;
//and
MessageBox.Show(dimX.ToString());

private Form1 f;
//and
f = f1;
//and
MessageBox.Show(f.dimx.ToString());

您正在创建一个新的窗体对象在每个onclick事件,这不是它的工作方式…

private void button1_Click(object sender, EventArgs e)
{
      Form1 f=new Form1();  // no that way!!!
      MessageBox.Show(f.dimx.ToString());
}

使用回调,delegate

我现在使用这个

Form1:

namespace Testt
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public int dimx;
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2(this);
                this.Hide();
                f2.ShowDialog();
                this.Show();
                dimx = int.Parse(textBox1.Text);
                //MessageBox.Show(dimx.ToString());

            }
        }
    }

和Form2:

namespace Testt
{
    public partial class Form2 : Form
    {
        private Form1 f;
        public Form2(Form1 f1)
        {
            InitializeComponent();
            f=f1;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(f.dimx.ToString());
        }
    }
}