1

我已经看了一段时间了,我似乎无法理解。我必须将字符串从一种形式获取到另一种形式,但它不起作用,我尝试使用 get 但它只是抛出“get”在这种情况下不存在。这是我的代码。这是在主窗体上:

  public string SavePoint()
  {     
        string settings = "";
        string archive = "";
        if (rb_Backup.Checked)
        {
            settings = "backup";
        }
        else if (rb_Restore.Checked)
        {
            settings = "restore";
        }
        else if (rb_Sync.Checked)
        {
            settings = "sync";
        }
        if (cb_Archive.Checked)
        {
            archive = "true";
        }
        else
        {
            archive = "false";
        }

        string savePoint = txt_From.Text + "\r\n" + txt_To.Text + "\r\n" + settings + "\r\n" + archive;
        return savePoint;
  }

这是在试图访问数据的表单上:

    private void btn_Save_Click(object sender, EventArgs e)
    {
        frm_Main mainForm = new frm_Main();
        string saveData = mainForm.SavePoint();
        string savePath = AppDomain.CurrentDomain.BaseDirectory + "\\Profiles";
        if (!Directory.Exists(savePath))
        {
            Directory.CreateDirectory(savePath);
        }
        StreamWriter saveFile = new StreamWriter(savePath + "\\" + txt_Save.Text + ".txt");
        saveFile.WriteLine(saveData);
        saveFile.Close();
        this.Close();
    }

我正在学习这是我制作这个软件的原因之一。

最亲切的问候,

斯科博

4

3 回答 3

2

而不是等到btn_Save_Click方法尝试从父表单获取信息;让父表单在首次创建子表单时传递信息。

只需在子窗体上创建一个像这样的简单属性:

public string SavePath {get;set;}

然后在第一次创建主窗体时设置它:

SaveDialog child = new SaveDialog();
child.SavePath = SavePoint();
child.ShowDialog();
于 2013-02-25T06:54:56.053 回答
1

您可以在第二个表单上设置所有者,然后再从主表单中显示它。然后您可以从第二个表单访问主表单。

示例是 - 将打开第二个表单的主表单按钮:

private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Owner = this;
            frm.ShowDialog();
        }

然后我们有第二种形式——我们想从主窗体中提取数据:

private void button1_Click(object sender, EventArgs e)
        {
            //Get our owner form i.e: Form1.cs

            Form1 frm = (Form1)this.Owner;  // Here we cast the owner form as Form1
            MessageBox.Show(frm.teststr()); // You can access the functions/procedure from the main form here
        }

您不想继续创建主窗体的新实例,因为新实例意味着在当前主窗体上完成的所有数据/处理都设置为默认值。所以你想将当前的 Main Form 对象传递给 Second Form。这就是我们在这里所做的。

于 2013-02-25T06:53:59.007 回答
-2

要明白这一点,您应该使用属性而不是方法。这应该看起来像

public string SavePoint
{
   get
   {
       string settings = "";
       string archive = "";
       if (rb_Backup.Checked)
       {
           settings = "backup";
       }
       else if (rb_Restore.Checked)
       {
           settings = "restore";
       }
       else if (rb_Sync.Checked)
       {
           settings = "sync";
       }
       if (cb_Archive.Checked)
       {
           archive = "true";
       }
       else
       {
           archive = "false";
       }

       string savePoint = txt_From.Text + "\r\n" + txt_To.Text + "\r\n" + settings + "\r\n" + archive;
       return savePoint;
   }
}
于 2013-02-25T06:29:10.717 回答