0

我的项目中有 2 个 winform。当我单击 Form1 上的“设置”按钮时,它会显示“设置”表单,我正在对文本框进行一些更改,当我单击第二个表单上的“保存”按钮时,它将这些值保存到文本文件中,我想传递这些值到第一种形式,但我无法通过它们。

这是我的代码的某些部分;

此代码是设置按钮单击(在 Form1 上)

private void button3_Click(object sender, EventArgs e)
{
    Settings frm = new Settings();
    frm.Show();  
}

public void funData(TextBox txtForm1)
{
    label3.Text = txtForm1.Text;
}

此代码是保存按钮单击(第二种形式)

private void button5_Click(object sender, EventArgs e)
{
    if (File.Exists(ConfigFile))
    {
        File.Delete(ConfigFile);
        using (StreamWriter writer = new StreamWriter(ConfigFile))
        {
          writer.WriteLine(txtTemsPath.Text);
          writer.WriteLine(txtVodafonePath.Text);
          writer.WriteLine(txtTurkcellPath.Text);
          writer.WriteLine(txtAveaPath.Text);
          writer.Close();
        }
    }
    else
    {
       using (StreamWriter writer = new StreamWriter(ConfigFile))
        {
            writer.WriteLine(txtTemsPath.Text);
            writer.WriteLine(txtVodafonePath.Text);
            writer.WriteLine(txtTurkcellPath.Text);
            writer.WriteLine(txtAveaPath.Text);
            writer.Close();
        }
    }
    Form1 frm = new Form1();
    delPassData del = new delPassData(frm.funData);
    del(this.txtTemsPath);
    frm.getSettings();
    frm.TemsPath = TemsPath;
    frm.Activate();
    frm.Refresh();
    this.Close();
}

你能帮我解决这个问题吗?

谢谢

4

3 回答 3

0

在您的第一个表单上定义:

 Settings obj = (Settings)Application.OpenForms["Settings"];

private void button3_Click(object sender, EventArgs e)
    {
        Settings obj = new Settings();
        obj.Show();  
    }

并在您的代码中的其他任何地方替换frmobj

问题是您每次都必须参考另一个表单的当前实例,而不是打开一个新的

于 2013-10-10T13:26:58.370 回答
0

您需要使用要存储的数据在 form2 上创建一个公共属性访问器。在 form2 关闭后,只要您没有取消它,您仍然可以使用 form2.MySpecialData 访问此数据。这个问题已经在stackoverflow上被问过很多次,并且有很多很好的例子。

在 C# 中的两个窗体之间进行通信

    public Form2()
    {
        InitializeComponent();
    }

    private string mySpecialData;

    public string MySpecialData
    {
        get { return mySpecialData; }
        set { mySpecialData = value; }
    }
于 2013-10-10T13:40:41.937 回答
0

将属性添加到设置以返回“TemsPath”值。然后,将 DialogResult 设置为 OK,而不是 Close():

public partial class Settings : Form
{

    public string TemsPath
    {
        get { return txtTemsPath.Text; }
    }

    private void button5_Click(object sender, EventArgs e)
    {

        // ... your save code ...

        this.DialogResult = System.Windows.Forms.DialogResult.OK;
    }

}

现在,回到 Form1,使用 ShowDialog() 而不是 Show() 并在它返回时访问该属性:

public partial class Form1 : Form
{

    private void button3_Click(object sender, EventArgs e)
    {
        Settings frm = new Settings();
        if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            label3.Text = frm.TemsPath;
        }
    }

}
于 2013-10-10T14:41:51.827 回答