C# 从一个c到另一个c获取字符串#

C# 从一个c到另一个c获取字符串#,c#,forms,get,C#,Forms,Get,我已经看了一段时间了,我似乎不明白。我必须从一个表单到另一个表单获取一个字符串,但它不起作用,我尝试使用get,但它只是抛出了在这个上下文中不存在的“get”。这是我的密码。 这在主窗体上: public string SavePoint() { string settings = ""; string archive = ""; if (rb_Backup.Checked) { setti

我已经看了一段时间了,我似乎不明白。我必须从一个表单到另一个表单获取一个字符串,但它不起作用,我尝试使用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();
    }
我正在学习这是我制作这个软件的原因之一

最亲切的问候


Scobbo

要获得积分,应该使用属性而不是方法。这应该是

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

要获得点,应该使用属性而不是方法。这应该是

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

在从主窗体显示第二个窗体之前,可以在该窗体上设置所有者。然后可以从第二个窗体访问主窗体

示例是-主窗体按钮,它将打开第二个窗体:

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
        }

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

在从主窗体显示第二个窗体之前,您可以在第二个窗体上设置所有者。然后可以从第二个窗体访问主窗体

示例是-主窗体按钮,它将打开第二个窗体:

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
        }

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

而不是等到
btn\u Save\u单击
方法尝试从父窗体获取信息;在首次创建子窗体时,让父窗体传递信息

只需在子窗体上创建如下简单属性:

public string SavePath {get;set;}
然后,在主窗体首次创建时设置它:

SaveDialog child = new SaveDialog();
child.SavePath = SavePoint();
child.ShowDialog();

不要等到
btn\u Save\u单击
方法,尝试从父窗体获取信息;在首次创建子窗体时,让父窗体传递信息

只需在子窗体上创建如下简单属性:

public string SavePath {get;set;}
然后,在主窗体首次创建时设置它:

SaveDialog child = new SaveDialog();
child.SavePath = SavePoint();
child.ShowDialog();


您遇到的错误是什么?能否提供完整的错误/堆栈跟踪?主窗体是否可以在首次创建子窗体时将字符串传递给子窗体,或者在创建子窗体后单击“保存”按钮之前修改父窗体(因此,当按下按钮时,强制您向右传递数据)?我已经尝试了代码,它可以正常工作…@Servy no,基本上它只是打开表单,当你单击“保存”按钮时,它会获取数据并将其写入文件。当“保存”对话框打开时,用户不应该对其进行修改。我稍后会对此进行限制,但目前我认为你可以修改,但这不会发生。还有我得到的错误是:错误3当前上下文中不存在名称“get”D:\Projects\Software\Quick Backup Utility\Quick Backup Utility\Form1.cs 204 13 Quick Backup Utility您得到的错误是什么?能否提供完整的错误/堆栈跟踪?当子窗体是第一个c时,主窗体能否将字符串传递给子窗体已创建,或者父窗体在创建子窗体后单击“保存”按钮之前正在修改(因此,当按下按钮时,强制您向右传递数据)?我已经尝试了代码,它可以正常工作…@Servy no,基本上它只是打开表单,当你单击“保存”按钮时,它会获取数据并将其写入文件。当“保存”对话框打开时,用户不应该对其进行修改。我稍后会对此进行限制,但目前我认为你可以修改,但这不会发生。还有我得到的错误是:错误3当前上下文中不存在名称“get”\D:\Projects\Software\Quick Backup Utility\Quick Backup Utility\Form1.cs 204 13 Quick Backup Utility and change
string saveData=mainForm.SavePoint()
to
string saveData=mainForm.SavePoint;
属性基本上是一个语法稍有不同的方法。这个答案也没有解决OP在访问父窗体的正确实例时遇到的问题。这正是我尝试过的,它告诉我get在当前上下文中不存在。@user2106265,您正在创建一个新的MainForm,而不是引用当前的MainForm。请尝试在新表单中创建一个方法/属性,以便将引用传递给MainForm。在vb.net中,无需额外工作即可轻松获取引用。并更改
string saveData=MainForm.SavePoint()
to
string saveData=mainForm.SavePoint;
属性基本上是一个语法稍有不同的方法。这个答案也没有解决OP在访问父窗体的正确实例时遇到的问题。这正是我尝试过的,它告诉我get在当前上下文中不存在。@user2106265,您正在创建一个新的MainForm,而不是引用当前的MainForm。请尝试在新表单中创建一个方法/属性,以便将引用传递给MainForm。在vb.net中,无需额外工作就可以轻松获取引用。这确实不是一个好做法,因为您将子表单与父表单紧密耦合。您可以当孩子第一次被创建时,不要让父窗体向子窗体提供字符串,这意味着孩子不需要知道关于父窗体的任何信息。事实上,他是新来的,这使得从一开始就学习如何正确地做事情变得更为重要,而不是过早地养成坏习惯,因为他需要在以后的时间里忘记这些坏习惯未来,我是说我