0

我有 2 个表格,名字 HomeForm 和第二个名字 cfgForm

我有变量,HomeForm 中的名称 strCNF,cfgForm 中变量 CNF 的 strCNF 值。

这是来自 HomeForm 的代码:

private void cnfRulesMenu_Click(object sender, EventArgs e)
{
    try
    {
        cfgForm cfgForm = new cfgForm(this);
        cfgForm.Show();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString(), "Error");
    }
}

// other parts....
public cfgForm cfg;
string strCNF = "";
strCNF = ((cfgForm)this.cfg).CNF;

然后,在另一种形式 cfgForm 中,代码如下:

public string CNF = "S -> NP VP" + System.Environment.NewLine +
                        "NP -> DT NN | QT NN | NP PP | NP RC | n | p" + System.Environment.NewLine +
                        "DT -> d" + System.Environment.NewLine +
                        "NN -> JJ NN | n" + System.Environment.NewLine +
                        "JJ -> JJ JJ | j" + System.Environment.NewLine +
                        "QT -> q" + System.Environment.NewLine +
                        "PP -> PT NP | GG PP" + System.Environment.NewLine +
                        "PT -> i" + System.Environment.NewLine +
                        "GG -> g" + System.Environment.NewLine +
                        "RC -> WH NP | WH VP" + System.Environment.NewLine +
                        "WH -> w" + System.Environment.NewLine;

    public cfgForm(HomeForm homeForm)
    {
        // TODO: Complete member initialization
        InitializeComponent();
        this.homeForm = homeForm;
    }

    private void btnDefaultCFG_Click(object sender, EventArgs e)
    {
        tbCNF.Text = CNF;
    }

    private void cfgForm_Load(object sender, EventArgs e)
    {
        tbCNF.Text = CNF;
        btnApplyCNF.Enabled = false;
    }

    private void btnApplyCNF_Click(object sender, EventArgs e)
    {
        //CNF = "";
        CNF = tbCNF.Text;
        HomeForm homeForm = new HomeForm();
        homeForm.cfg = this;
        //homeForm.ShowDialog(); 
        this.Hide();// doesn't work
    }

到目前为止,如果我使用 homeForm.ShowDialog(),这些代码运行良好。我的意思是,在 cnfRulesMenu_Click 处于活动状态并显示 cfgForm 支持 HomeForm 之后,然后我更新 cfgForm 中的 CNF 变量,然后返回 HomeForm 和 cfgForm.Hide。但它给出了空值。

任何建议先生..

4

1 回答 1

1

因为你HomeForm在这些代码中新了另一个。

private void btnApplyCNF_Click(object sender, EventArgs e)
{
    //CNF = "";
    CNF = tbCNF.Text;
    HomeForm homeForm = new HomeForm();
    homeForm.cfg = this;
    //homeForm.ShowDialog(); 
    this.Hide();// doesn't work
}

因此,这些代码没有按您的意愿工作。

public cfgForm cfg;
string strCNF = "";
strCNF = ((cfgForm)this.cfg).CNF;

将您的代码修改为这些可能会解决您的问题,但我必须说这些架构没有意义。

private void btnApplyCNF_Click(object sender, EventArgs e)
{
    //CNF = "";
    CNF = tbCNF.Text;
    this.homeForm.cfg = this;
    //homeForm.ShowDialog(); 
    this.Hide();// doesn't work
}
于 2013-04-02T03:53:37.227 回答