Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Form2中的值更新Form1中的变量_C#_Winforms_Visual Studio 2010_Textbox - Fatal编程技术网

C# 从Form2中的值更新Form1中的变量

C# 从Form2中的值更新Form1中的变量,c#,winforms,visual-studio-2010,textbox,C#,Winforms,Visual Studio 2010,Textbox,我有两个表格,第一个名字是HomeForm,第二个名字是cfgForm 我有变量,HomeForm中的名称strCNF,cfgForm中的变量CNF中的strCNF值 以下是HomeForm中的代码: private void cnfRulesMenu_Click(object sender, EventArgs e) { try { cfgForm cfgForm = new cfgForm(this); cfgForm.Show();

我有两个表格,第一个名字是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_单击处于活动状态并显示由HomeForm支持的cfgForm之后,我更新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
}

在你的cfgForm中使用一个事件,然后在你的homeForm中订阅它。这是有效的,先生@J.C.,但只有当Btnaplycnf_点击处于活动状态时。然后,我如何在不打开cfgForm的情况下从cfgForm获取字符串CNF的值。先生……:)@BerryHarahap:如果您想在新建
cfgForm
后访问
CNF
,请尝试在构造函数中编写
this.homeForm.cfg=this
。但是,我建议您找到更好的方法在两个表单之间传输数据。可能会给你一些建议好的,先生@J.C.。我想试试。