如何将值从一个窗体传递到另一个窗体,而不在c#中创建新的窗体实例?

如何将值从一个窗体传递到另一个窗体,而不在c#中创建新的窗体实例?,c#,winforms,C#,Winforms,是的,我很清楚调用另一个表单是使用 Form3 f3=新的Form3() f3.ShowDialog() 但我面临的困难是,我不想每次都创建form3的新实例,而且我甚至不能全局创建构造函数,因为我正在向它传递一些参数。 我的要求是表单1文本框值应传递给表单3数据网格。 怎么做? 我的表格1代码是 String l=null; String m= null; Decimal n=0; String o=null; private void Fo

是的,我很清楚调用另一个表单是使用

Form3 f3=新的Form3()

f3.ShowDialog()


但我面临的困难是,我不想每次都创建form3的新实例,而且我甚至不能全局创建构造函数,因为我正在向它传递一些参数。
我的要求是表单1文本框值应传递给表单3数据网格
怎么做?
我的表格1代码是

    String l=null;
    String m= null;
    Decimal n=0;
    String o=null;
    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {                       
        this.Cursor = Cursors.Default;
        Class1 a = new Class1(mold, mcur, mshape, mwidth, mcolor);
        ds.Add(a);
        int c = (mold.X > mcur.X ? mcur.X : mold.X);
        int b = (mold.Y > mcur.Y ? mcur.Y : mold.Y);
        int w = Math.Abs(mold.X - mcur.X);
        int h = Math.Abs(mold.Y - mcur.Y);
        String line = LayerName.Text + "\t" + Material.Text+ "\t" + w.ToString() + "\t" + h.ToString() + "\t" + c.ToString() + "\t" + b.ToString() + "\t" + numericUpDown1.Value + "\t" + comboBox3.Text + Environment.NewLine;
         l=LayerName.Text;
         m=Material.Text;
         n=numericUpDown1.Value;
         o=comboBox3.Text;
         Form3 f3 = new Form3(l, m, n, o);
         f3.ShowDialog();
        string path = @"C:\Users\pri\Desktop\efg.txt";
        if (!File.Exists(path))
        {
            File.Create(path);
            TextWriter tw = new StreamWriter(path);
            tw.WriteLine(line);
            tsw.Close();
        }
        else if (File.Exists(path))
        {
            TextWriter tw = new StreamWriter(path, true);
            tw.WriteLine(line);
            tw.Close();
        }  
    }
表格3:

    public Form3(string myString, string rek, decimal myvalue, string text1)
    {
        InitializeComponent();

        string[] Rows = new string[2];

        for (int i = 0; i < Rows.Length; i++)
        {
            DataGridViewRow Row = new DataGridViewRow();
            Row.CreateCells(dataGridView1);
            if (myString != null)
                dataGridView1.Rows[i].Cells[0].Value = myString;
            if (rek != null)
                dataGridView1.Rows[i].Cells[1].Value = rek;
            if (myvalue != 0)
                dataGridView1.Rows[i].Cells[2].Value = myvalue;
            if (text1 != null)
                dataGridView1.Rows[i].Cells[3].Value = text1;
            // int index = this.dataGridView1.Rows.Count;

            dataGridView1.Rows.Add(Rows);
        }
    }
public Form3(string myString、string rek、decimal myvalue、string text1)
{
初始化组件();
字符串[]行=新字符串[2];
for(int i=0;i
问题:文本框值每次在同一行中替换,而不在新行中更新。

第一种方式:

在表格1中

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        var frm2 = new Form2(dataGridView1.Rows[0].Cells[0].Value.ToString());
        frm2.Show();
    }
}
表格2

第二种方式:

public event EventHandler<Form2EventArgs> Form2Event;

public class Form2EventArgs : EventArgs
{
   public object Data {get;set;}
}

Event listener in Form1:

private void GetData(object sender, Form2EventArgs args)
{
    object data = args.Data;

}

 calling the event,

   Form2 form2 = new Form2();
   form2.Form2Event += GetData;
   if(Form2Event != null)
   form2Event(this, new Form2EventArgs {Data = data});
公共事件处理程序Form2Event;
公共类Form2EventArgs:EventArgs
{
公共对象数据{get;set;}
}
Form1中的事件侦听器:
私有void GetData(对象发送方,Form2EventArgs参数)
{
对象数据=args.data;
}
召集这次活动,
Form2 Form2=新Form2();
form2.Form2Event+=GetData;
如果(Form2Event!=null)
form2Event(这是新的Form2EventArgs{Data=Data});

创建一个包含属性(模具,…)的类,可能类似于“Class1”。
将您的数据缓存为联系人中的某个列表,因此,操纵列表并最终将其全部提取到网格中。

您可以使用静态变量,也可以将其存储在类中。

我不熟悉第二种方法。但在第一种方法中,我的datagrid是第二种形式,因此不需要。我尝试了另一种方法,喜欢将textbox值作为参数传递。但它只适用于一种行。正在更新同一行
public event EventHandler<Form2EventArgs> Form2Event;

public class Form2EventArgs : EventArgs
{
   public object Data {get;set;}
}

Event listener in Form1:

private void GetData(object sender, Form2EventArgs args)
{
    object data = args.Data;

}

 calling the event,

   Form2 form2 = new Form2();
   form2.Form2Event += GetData;
   if(Form2Event != null)
   form2Event(this, new Form2EventArgs {Data = data});