我用xptables创建了两种形式。单击form1中的按钮时,将显示form2。我正在执行一些操作的地方。之后,结果将存储在form2的xptable中。单击form2中的导出按钮时,它应将form2 xptable的数据传递给form1 xptable,并保存在新的文本文件中。当我运行代码时,结果存储在文本文件中,而不存储在form1的xptable中。

编辑:从form1调用form2:

private void but_form2_Click(object sender, EventArgs e)
    {
        Form2 tempForm = new Form2();
        this.AddOwnedForm(tempForm);
        tempForm.Show();
    }


这是我从form2导出的编码。

private void btnExport_Click(object sender, EventArgs e)
    {
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.Filter = "Save as txt (*.txt)|*.txt|All Files(*.*)|";
        sfd.InitialDirectory = Application.StartupPath;
        sfd.ShowDialog();
        try
        {
            StreamWriter sw = new StreamWriter(new FileStream(sfd.FileName,
                FileMode.OpenOrCreate,
                FileAccess.Write));
            Form1 obj = new Form1();
            foreach (Row r in tblProxiesLive.Rows)
            {
                obj.loadsecondtable(r.Cells[1].Text);
                sw.Write(r.Cells[1].Text + "\r\n");



            }
            sw.Close();
        }
        catch (Exception x)
        {
            string xp = x.ToString();
        }
        Form2 h = new Form2();
        h.Hide();
        h.Close();
    }


。并在form1编码中:

public void loadsecondtable(string s)
    {

        int snumber = this.tabproxmodel.Rows.Count + 1;
        Row r = new Row();
        r.Cells.Add(new Cell(snumber, Color.DarkBlue, Color.FromArgb(234, 215, 184), f2));
        r.Cells.Add(new Cell(s, Color.FromArgb(225, 175, 91), Color.White, f2));
        r.Cells.Add(new Cell("", (Image)new Bitmap(10, 10), Color.YellowGreen, Color.White, f2));
        r.Cells.Add(new Cell("", (Image)new Bitmap(10, 10)));
        r.Cells.Add(new Cell("", (Image)new Bitmap(10, 10)));
        r.ForeColor = Color.FromArgb(6, 92, 155);
        this.tabproxmodel.Rows.Add(r);
    }


有人可以帮我吗?我需要改变什么?

提前致谢 ...

最佳答案

btnExport_Click方法中,应使用现有对象创建新的Form1对象。

好的解决方案是使用events
简便的解决方案是将Form1作为参数传递给Form2。码:

添加到Form2类:

 Form1 pointerToForm1;
 public Form2(Form1 pointerToForm1) {
      this.pointerToForm1 = pointerToForm1ł
 }


Form1更改方法中:

private void but_form2_Click(object sender, EventArgs e)
{
    Form2 tempForm = new Form2(this);
    this.AddOwnedForm(tempForm);
    tempForm.Show();
}


Form2更改方法中:

private void btnExport_Click(object sender, EventArgs e)
{
    (...)
        //Form1 obj = new Form1();
        Form1 obj = pointerToForm1;
        foreach (Row r in tblProxiesLive.Rows)
        {
            obj.loadsecondtable(r.Cells[1].Text);
            sw.Write(r.Cells[1].Text + "\r\n");
        }
    (...)
}

关于c# - 在两个WinForm之间传递XPTable数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18226133/

10-13 05:04