c#winform如何把另一窗口中的textbox值调用过来

急急急

步骤1:在Form1上,布置一个TextBox(textBox1)和一个按钮(button1)

步骤2:在项目中添加一个窗体Form2。在Form2上布置一个Label(label1)。Form2的后台Form2.cs代码如下:

using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        // 新编写一个构造函数
        public Form2(string text) : this()
        {
            label1.Text = text;
        }
    }
}

步骤3:Form1的后台代码Form1.cs如下

using System;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            // 用我们自己编写的构造函数创建Form2,传入文本框text1.Text
            Form2 f2 = new Form2(textBox1.Text);
            f2.Show();
        }
    }
}

运行结果如下:

追问

我想在form2中点击button然后在form2中的textbox中出现form1中某个textbox的值,这样可以吗?

追答

可以。这样做:

1)修改Form1后台代码Form1.cs,增加一个属性

public partial class Form1 : Form
{
  ……   
 // 增加一个属性Message 
 public string Message
 { 
   get{ return text1.Text;}
 }   
        
 private void button1_Click(object sender,EventArgs e)
  {
    // 用造函数创建Form2
    Form2 f2 = new Form2(this);
     f2.Show();
 }
}

2)在Form2上增加一个Button(button1);后台代码Form2.cs

public partial class Form2 : Form
{
  ……        
 private Form1 form1;
 // 新编写一个构造函数,参数是Form1实例        
 public Form2(Form1 f1) : this()
 {
   form1 = f1;
 }
  
 public void button1_Click(object sendor,EventArgs e)
 {
   // 通过Form1的属性Message取得文本信息
   lable1.Text = f1.Message;
 }
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-05-12

软糖来回答把。

C#和VB.net不一样,窗体是类,而不是唯一的对象,所以必须指向该Form才能引用其中的对象。

首先在Form2定义一个全局静态字段 存储当前窗体

public Form2 curForm2;
private void Form2_Load(object sender, EventArgs e) {
    curForm2 = this;
}

然后在Form5中即可调用,注意,如果Form2从未启动,则会引发null错误。

curForm2.textbox

满意请采纳,谢谢。

追问

是这样引用吗?

还是出问题呀,怎么解决

追答

加个static Form3 curForm3

追问

能不能具体的操作代码写一下,我很菜,谢谢

我还是实现不了

显示要先判定是否为null什么的

现在我还有个问题是form3调试后有计算数据,但是在调试过程中从form4返回form3的时候,刚刚form3计算调试的数据都没有了,和没有调试之前的窗口一样,这个怎么解决

当我返回上一页的时候,又是空的了

追答

重新做了一个,实测可以。

点击Form1的按钮打开Form2,关闭后返回Form1,每次打开Form2文本框都递增一个A字母。

注意要给Form2添加一个FormClosing事件,里面把关闭改为隐藏,使用e.Cancel=true取消关闭事件。还要给Form2添加一个FormLoad事件,把控件textbox1赋值给变量tbox1。

追问

具体代码有没有,这些我觉得我写出来有问题

拜托啦

发生了null错误,但是我的form启动的呀

代码是if(curForm3.textBox37.Text!=null)
{textBox4.Text=curForm3.textBox37.Text;}
else
{}

本回答被网友采纳
第2个回答  2019-05-12
直接去另一个form取值,Form2.Textbox1.text就可以了。
相似回答