在表单之间传递值(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的答案