簡體   English   中英

從Form2中的值更新Form1中的變量

[英]Update variable in Form1 from value in Form2

我有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。 但是它給出空值。

先生有什么建議。

因為您在這些代碼中新建了另一個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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM