2013-10-10 81 views
0

我的项目中有2个winforms。当我点击Form1上的“设置”按钮时,它会显示设置窗体,我正在对文本框进行一些更改,并且当我单击第二窗体上的保存按钮时,它将这些值保存到文本文件中,我想传递这些值首先形成,但我无法通过它们。将C#中Form2传递给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(); 
} 

能否请你帮我这个问题?

感谢

+0

什么你的意思是“无法通过他们”?你有错误吗? –

+0

几件事情:1)你似乎只想覆盖配置文件。你不需要检查它是否存在,删除它,然后重写它,默认情况下'StreamWriter'会覆盖它,除非你明确地告诉它不存在。 2)不管怎样,这两个书写块看起来都做同样的事情。3)不要调用'.Close()',把它放在'using'块中为你做,最后4)它怎么不起作用?远?你得到什么错误? – Arran

回答

0

定义你的第一个形式:

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

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

并在代码中其他frm任何地方obj

的东西取而代之的是,你必须每次都指的当前实例另一种形式,而不是开一个新的

0

你需要在窗体上创建一个公共属性访问器2与您想要存储的数据进行比较。在form2关闭之后,只要你没有使用form2.MySpecialData,你仍然可以访问这些数据。这个问题在stackoverflow上已经被问及很多次了,并且有很多很好的例子。

Communicate between two windows forms in C#

public Form2() 
    { 
     InitializeComponent(); 
    } 

    private string mySpecialData; 

    public string MySpecialData 
    { 
     get { return mySpecialData; } 
     set { mySpecialData = value; } 
    } 
0

添加一个属性设置返回 “TemsPath” 值。然后,而不是关闭(),设置的DialogResult来确定:

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(),而不是显示()和访问属性,当它返回:

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

} 
相关问题