向第二种形式传递值时的奇怪行为。
ParameterForm pf = new ParameterForm(testString);
作品
ParameterForm pf = new ParameterForm();
pf.testString="test";
没有(testString定义为公共字符串)
也许我错过了什么?无论如何,我想让第二个变体正常工作,就像现在一样 - 它返回空对象引用错误。
感谢您的帮助。
在此处发布更多代码:
调用
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对象引用
答案 0 :(得分:2)
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
应该做什么,所以这可能不是在您的应用程序中实现它的最佳方式,但这是一般的“继续?是/否”问题的工作方式。< / p>
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()
}
}
答案 1 :(得分:0)
当您想要使用第二个变体时,您必须使用getString() - Method,您可以在其中使用例如“的TestString”。你写它的方式,“testString”应该是一个方法(并得到括号)。
编辑(更准确一点):
你可以写:
pf.getString(testString);
,如果“pf”是您自己的类的实例,否则您必须查找,是否可以在此类中检索字符串。
答案 2 :(得分:0)
事情按顺序排列:)
pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit);
和
pf.Test = "test";
应该在
之前设置 pf.ShowDialog(this);
我的错误是在第二个表格显示后可以传递该参数
thnx寻求答案