窗体之间的值传递,网上都有很多方法解决。比较正统的方法都是修改弹出窗口的构造函数,为其添加一些参数,这些参数就是窗体之间要传递的值。如果想在弹出窗体直接修改主窗体的内容,一般都将要修改的数据做成引用类型的参数传递过去。但是遇到string类型数据这种方法可能无效。
以下是弹出窗体的代码:
public partial class PopForm : Form { //弹出窗口的成员 private string m_strChange; //修改后的构造函数 public PopForm (ref string pStr) { InitializeComponent(); m_strChange= pStr; } //修改引用主窗口的字符串 private void Button1_Click(object sender, EventArgs e) { m_strChange+="456"; this.Close(); } }
主窗体调用的代码:
string temp="123"; PopForm pop=new PopForm(ref temp); pop.ShowDialog();
这种情况下,主窗口的temp不会变成“123456”。因为虽然在这里字符串是引用类型,但是由于字符串的操作十分特殊,在赋值操作中是重新申请一段内存来记录新的内容,所以即使用来引用类型,但是仍然不能改变主窗口的值。
如何解决这个问题呢?我们可以使用StringBuilder来代替string。
弹出窗体代码:
public partial class PopForm : Form { //弹出窗口的成员 private StringBuilder m_strChange; //修改后的构造函数 public PopForm (ref StringBuilder pStr) { InitializeComponent(); m_strChange= pStr; } //修改引用主窗口的字符串 private void Button1_Click(object sender, EventArgs e) { m_strChange.Append("456"); this.Close(); } }
主窗体调用代码:
StringBuilder temp="123"; PopForm pop=new PopForm(ref temp); pop.ShowDialog();
这样执行完PopForm后,temp就变成“123456”了