c# – 在表单之间传递值(winforms)

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

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()
    }
 }
点赞