向第二种形式传递值时的奇怪行为.
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对象引用
test – null对象引用
最佳答案 > pf.ShowDialog(this);是一个阻塞调用,所以pf.Submit = new ParameterForm.ParameterSubmitResult(pf_Submit);永远不会到达:切换订单.
>提交(this,this.node);抛出一个空对象引用,因为没有为它分配任何事件(见上文).通常,您应该首先检查:if(Submit!= null)Submit(this,this.node);
>您应该更改“pf.ShowDialog(this); topf.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()
}
}