在windows窗体之间传递字符串,不使用.show()方法[不刷新窗体]

本文关键字:窗体 show 方法 刷新 之间 字符串 windows | 更新日期: 2023-09-27 17:53:13

我有两个表单。

在form1上有一个名为textbox1的文本框和一个按钮[以及许多其他文本框]

点击按钮,会打开一个新表单form2

表单2有一个2列的datagridview。

单击datagridview单元格[存在于form2中]使用:

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e),所选行的第一列的内容必须转到form1中的textbox1中,不能刷新或重新打开form1。

我如何做到这一点,而不使用。show()方法,因为它会刷新我的form1,并因此失去所有用户类型的信息在其他文本框?

注意: 从datagridview检索到字符串形式由:

dataGridView.SelectedRows[0].Cells[1].Value.ToString()

在windows窗体之间传递字符串,不使用.show()方法[不刷新窗体]

将该单元格值放入public property中,如

public string gridcellValue
{
  get; set;
}

在你的dataGridView_CellMouseClick(事件处理程序设置属性说

this.gridcellValue = dataGridView.SelectedRows[0].Cells[1].Value.ToString();

然后在您的form1中,您可以使用form2的实例访问它(因为您从form1创建了form2实例)

textbox1.Text = frm2.gridcellValue;

另一种方法是将该文本框设置为公共属性并在form2构造函数中传递form1实例并将文本框设置为

在Form1

public TextBox Form1Text
{
  get {return this.testbox1;} 
  set {this.testbox1 = value;}
}
Form2 frm2 = new Form2(this);
frm2.Show();
在Form2

public class Form2 : Form
{
  Form _form1;
public Form2(Form1 frm)
{
  _form1 = frm;
}
//In event handler
private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
   //set the value
   ((TextBox)_form1.Form1Text).Text = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
}
}

我解决了这个问题,我想我的答案可以帮助那些需要帮助的人[像我一样]

基本上,在Form1中,您创建了一个公共静态字符串,如

public static string mystring = "";

然后在指向Form2的按钮上执行以下操作:

private void button_Click(object sender, EventArgs e) {

       Form2 frm = new Form2();
        if (frm.ShowDialog() == DialogResult.OK)
        {
            this.txt_box.Text = Form1.mystring;
        }
    }

在form2中,:

private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            Form1.mystring = dataGridView.SelectedRows[0].Cells[1].Value.ToString();
            this.DialogResult = DialogResult.OK;
            this.Close();

        }

就是这样!祝你好运