1

I have been looking at this for a while and I can't seem to get it. I have to get a string from one form to another but it doesn't work, I tried using get but it just threw that "get" didn't exist in this context. Here is my code. This is on the main form:

  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;
  }

And this is on the form that is trying to access the data:

    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();
    }

I am learning which is one of the reasons I'm making this software.

Kindest regards,

Scobbo

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

メイン フォームから表示する前に、2 番目のフォームに所有者を設定できます。次に、2 番目のフォームからメイン フォームにアクセスできます。

例は次のようになります - 2 番目のフォームを開くメイン フォーム ボタン:

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

次に、2 番目のフォームがあります。メイン フォームからデータを取得します。

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 に答える