【问题标题】:Getting String from one from to another c#从一个到另一个c#获取字符串
【发布时间】:2013-02-25 06:23:57
【问题描述】:

我已经看了一段时间了,但我似乎无法理解。我必须将字符串从一种形式获取到另一种形式,但它不起作用,我尝试使用 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();
    }

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

最诚挚的问候,

史考博

【问题讨论】:

  • 您遇到了什么错误?
  • 您能否提供完整的错误/堆栈跟踪?
  • 主窗体是否可以在第一次创建子窗体时将字符串传递给子窗体,或者是在创建子窗体后点击保存按钮之前修改父窗体(从而强制您在按下按钮时正确传递数据)?
  • 我已经尝试了代码,它可以正常工作......
  • @Servy 不,基本上它只是打开表单,当您单击保存按钮时,它会获取数据并将其写入文件。当保存对话框打开时,用户不应该修改它。我稍后会限制它,但目前我认为你可以修改它,但这不会发生。另外我得到的错误是:错误3当前上下文中不存在名称'get' D:\Projects\Software\Quick Backup Utility\Quick Backup Utility\Form1.cs 204 13 Quick Backup Utility

标签: c# forms get


【解决方案1】:

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

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

public string SavePath {get;set;}

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

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

【讨论】:

  • 我应该对所有数据执行此操作,有一组来自主表单的数据要写入,并且保存路径仅设置为单个文件夹,用户可以输入一个文件名。
  • 哦,get 走出了一个方法,进入了类。我现在明白了。非常感谢!你是我的英雄。这一切都有效,最重要的是我现在了解如何使用“get”。你是一个绅士和一个学者。
【解决方案2】:

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

例如 - 打开第二个表单的主表单按钮:

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。这就是我们在这里所做的。

【讨论】:

  • 这确实不是一个好习惯,因为您将子表单与父表单非常紧密地耦合在一起。您可以让父表单在第一次创建子表单时将字符串提供给子表单,这意味着子表单不需要知道父表单的任何信息。
  • 他是新人这一事实使得从一开始就学习如何正确做事比及早养成他需要的坏习惯更为重要将来忘掉。
  • 我的意思是我还是新手,应该使用您的解决方案。 :) 我只是想帮忙。没有伤害。
【解决方案3】:

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

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

【讨论】:

  • 并将string saveData = mainForm.SavePoint();更改为string saveData = mainForm.SavePoint;
  • 属性基本上是一种语法略有不同的方法。这个答案也没有解决 OP 的问题是访问父表单的正确实例。
  • 这正是我尝试过的,它告诉我 get 在当前上下文中不存在。
  • @user2106265,您正在创建一个新的 MainForm 而不是引用当前的。尝试以新形式创建一个方法/属性,您可以在其中传递对 Mainform 的引用。在 vb.net 中,无需额外工作即可轻松获取参考。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2014-07-08
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多