在表单之间传递值(winforms)

时间:2010-06-17 14:31:34

标签: c# winforms .net-3.5

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

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对象引用

3 个答案:

答案 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寻求答案