在表单之间传递值(winforms)

向第二种forms传递值时的奇怪行为。

ParameterForm pf = new ParameterForm(testString); 

作品

 ParameterForm pf = new ParameterForm(); pf.testString="test"; 

不(testString定义为公共字符串)

也许我错过了什么? 无论如何,我想让第二个变体正常工作,就像现在一样 – 它返回null对象引用错误。

感谢帮助。

在这里发布更多代码:

调用

 Button ParametersButton = new Button(); ParametersButton.Click += delegate { ParameterForm pf = new ParameterForm(doc.GetElementById(ParametersButton.Tag.ToString())); pf.ShowDialog(this); pf.test = "test"; pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit); }; 

定义和使用

  public partial class ParameterForm : Form { public string test; public XmlElement node; public delegate void ParameterSubmitResult(object sender, XmlElement e); public event ParameterSubmitResult Submit; public void SubmitButton_Click(object sender, EventArgs e) { Submit(this,this.node); Debug.WriteLine(test); } } 

结果:提交 – null对象引用测试 – null对象引用

  • pf.ShowDialog(this); 是一个阻塞调用,所以pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit); 永远不会到达:切换订单。

  • Submit(this,this.node); 抛出一个空对象引用,因为没有为它分配任何事件(见上文)。 通常,您应该首先检查: if (Submit != null) Submit(this,this.node);

  • 你应该改变“pf.ShowDialog(this); to pf.Show(this);`以便在对话框打开时不会禁用主窗体,如果这是你想要的,或使用下面的模型(典型的对话框)。


我不确定pf_Submit应该做什么,所以这可能不是在你的应用程序中实现它的最好方法,但它是如何通用的“继续?是/否”问题。

 Button ParametersButton = new Button(); ParametersButton.Click += delegate { ParameterForm pf = new ParameterForm(testString); pf.ShowDialog(this); // Blocks until user submits // Do whatever pf_Submit did here. }; public partial class ParameterForm : Form { public string test; // Generally, encapsulate these public XmlElement node; // in properties public void SubmitButton_Click(object sender, EventArgs e) { Debug.WriteLine(test); this.Close(); // Returns from ShowDialog() } } 

当您想要使用第二个变体时,必须使用getString() – Method,您可以在其中放置例如“testString”。 你写它的方式,“testString”应该是一个方法(并得到括号)。

编辑(更精确一点):

你可以写:

 pf.getString(testString); 

,如果“pf”是您自己的类的实例,否则您必须查找,是否可以在此类中检索String。

事情是按顺序:)

 pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit); 

 pf.Test = "test"; 

应该已经设定过

  pf.ShowDialog(this); 

我的错误是在显示第二个表单后可以传递该参数

thnx的答案