C# C在一个窗体上公开公共方法/属性,然后从另一个窗体调用它们

C# C在一个窗体上公开公共方法/属性,然后从另一个窗体调用它们,c#,forms,winforms,properties,C#,Forms,Winforms,Properties,这里是建议使用的线程,但我似乎不能调用FormToShowOnClose,因为我只收到一个空指针异常,我认为第一个表单QR没有被读取,对吗?还是无法读取QR表中的方法?它不会抛出任何其他错误 图例:表格A=QR,先加载,然后隐藏。接下来将加载表单B=帐户,其中用户选择数据库的条件。按下按钮,帐户关闭并显示QR,关闭时从帐户触发QR方法并加载数据库 这是我到目前为止得到的,告诉我我似乎错过了什么 QR上的暴露属性: public string BUName { get; set; }

这里是建议使用的线程,但我似乎不能调用FormToShowOnClose,因为我只收到一个空指针异常,我认为第一个表单QR没有被读取,对吗?还是无法读取QR表中的方法?它不会抛出任何其他错误

图例:表格A=QR,先加载,然后隐藏。接下来将加载表单B=帐户,其中用户选择数据库的条件。按下按钮,帐户关闭并显示QR,关闭时从帐户触发QR方法并加载数据库

这是我到目前为止得到的,告诉我我似乎错过了什么

QR上的暴露属性:

    public string BUName { get; set; }
    public string DOCUName { get; set; }
论公共利益

            InitializeComponent();
            this.Hide();
            Account AccountForms = new Account();
            AccountForms.FormToShowOnClose = this;
            AccountForm.ShowDialog();
LoadData从帐户加载条件以准备刷新,这是标准的从[表]中选择*:

    public void LoadData()
    {
        txtBUnow.Text = BUName;
        txtDOCUnow.Text = DOCUName;
        if (BUName != "")
        {
            int BUtoQRConv = Convert.ToInt32(BUName);
            theDictionary = new DictionaryInit();
            DictionaryFindTable(BUtoQRConv, theDictionary.BUtoQRs);
            Refresher();
        }
    }
账户形式:

    public static string passedBU;
    public static string passedDOCU;
    public QueryRefiner FormToShowOnClose { get; set; }
按钮按下:

        passedBU = lblBUitem.Text;
        passedDOCU = lblDOCUitem.Text;
        this.Close();
表格结束时:

    private void Account_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (FormToShowOnClose != null)
        {
        Console.WriteLine(passedBU + "!");
        FormToShowOnClose.BUName = passedBU;
        FormToShowOnClose.DOCUName = passedDOCU;
        FormToShowOnClose.LoadData();
        FormToShowOnClose.Show();
        }
    }
目前,没有编译器错误,当它运行时,if语句似乎没有被触发,当从if语句中提取时,我确实在formtoshownclose中遇到了null指针异常。
你知道我在这里遗漏了什么吗?据我所知,QR已经初始化,只是隐藏了。

移动此代码以加载QR表单的事件处理程序:

this.Hide();
Account AccountForms = new Account();
AccountForms.FormToShowOnClose = this;
AccountForm.ShowDialog();

您假定只有当用户按下按钮时对话框才会关闭。事实并非如此,还有很多理由让它关闭。就像用户单击关闭按钮,对话框的所有者窗口关闭,在对话框窗口上调用隐藏,其他代码调用应用程序.Exit,操作系统重新启动,可能还有一些我没有想到的。Kaboom,传递的变量为空。这不是使用对话框的正确方法,SuffCudio的返回值是关键的,对话框不应该知道关于另一个窗口的任何东西。嗯,是的,我确实考虑过通过这种方法来结束数据的可能性,但是,选择只处理视图上出现的数据。如果任何数据丢失,只会影响视图,仅此而已。实际上,当用户将FormB输入FormA时,他们的进程实际上是重新启动的。虽然这绝对是每个人在处理可能在运输途中丢失的数据时应该考虑的事情。你的建议是什么?处理主窗口上的所有业务数据@汉帕桑