C# 在表单之间传递值(winforms)
向第二个表单传递值和从第二个表单传递值时的Wierd行为C# 在表单之间传递值(winforms),c#,winforms,.net-3.5,C#,Winforms,.net 3.5,向第二个表单传递值和从第二个表单传递值时的Wierd行为 ParameterForm pf = new ParameterForm(testString); 工作 没有(testString定义为公共字符串) 也许我错过了什么?无论如何,我想让第二个变量正常工作,就像现在一样-它返回空对象引用错误 谢谢你的帮助 在此发布更多代码: 召唤 Button ParametersButton = new Button(); ParametersButton.Click += delegate
ParameterForm pf = new ParameterForm(testString);
工作
没有(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);
}
}
结果:
提交-空对象引用
test-null对象引用当您想使用第二个变量时,必须使用getString()-方法,在该方法中可以放置例如“testString”的值。按照您编写它的方式,“testString”应该是一个方法(并带有括号) 编辑(更精确一点): 你可以写:
pf.getString(testString);
,如果“pf”是您自己类的实例,否则您必须查找,是否可以检索该类中的字符串。
是一个阻塞调用,因此pf.ShowDialog(这个)
pf.Submit+=new ParameterForm.ParameterSubmitResult(pf_Submit)代码>从未到达:切换顺序
Submit(这个,这个.node)代码>抛出空对象引用,因为没有为其分配任何事件(请参见上文)。通常,您应该首先检查:
if(Submit!=null)Submit(this,this.node)代码>
- 您应该更改``pf.ShowDialog(this)<代码>到pf.Show(这个);`这样,当对话框打开时,主窗体不会被禁用(如果您需要的话),或者使用下面的模型(典型的对话框)
我不确定pfu 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()
}
}
事情按顺序进行:) 及 应该早就设定好了
pf.ShowDialog(this);
我的错误是在显示第二个表单后可以传递参数
thnx for answers我可以看看您使用的构造函数吗?它是如何工作的,什么时候出现空对象引用错误?据您所知,testString是一个没有明显原因的首字母小写的属性。如果OP遵循Microsoft的命名约定(不是很好),那么它可能是一个公共字段。“定义为公共字符串“似乎暗示它不是一个属性。我假设窗体与其他类相同,因此它只对标准和某人的眼睛有影响:)是的,窗体与其他类一样,但与其他类一样,有一些命名约定,使其他人更容易查看您的代码,和封装原则,以防止对象在您不知情的情况下被更改(除其他事项外)。您应该研究这两个方面-它使您的代码更加专业,并帮助那些试图帮助您的人(如我们)!如果你的问题已经解决,你一般应该接受这个答案,而不是把它当作你自己的答案别担心。很高兴我能帮忙!我也是,我喜欢这样的地方,即使没有我需要的答案,它也会推进解决方案:)
pf.Submit += new ParameterForm.ParameterSubmitResult(pf_Submit);
pf.Test = "test";
pf.ShowDialog(this);