C#从父表单

时间:2016-10-12 21:44:21

标签: c# forms winforms

到目前为止,我有这个代码,我想用它来调用子窗体中的相同函数。

父母表格代码:

FormGame frmGame; // i put this here so that in the second function it doesnt complain about frmGame not being set.
    public void CreateGame(string Level) // this function is called first
    {
        FormGame frmGame = new FormGame(this); // i need both functions to be able to access this instance of the child form
        frmGame.SetLevel(Level); // sets the text of a label in the child form
        frmGame.Show();
    }

    public void UpdateGame(string Level) // then this function is called second 
    {
        frmGame.SetLevel(Level); // to update the same label as set in the first method
    }

这段代码的问题是,虽然是的,但是当它只是坐在那里时没有出现任何错误,但是当调用第二个函数时调试它时它无法找到第一个设置的FormGame实例功能所以frmGame为空。

我尝试过:

  1. 在这两个函数之外拉出整个表单初始化语句 FormGame frmGame = new FormGame(this);
    但它不喜欢"这"不在函数内部并从该行中删除它然后在运行时删除错误但是当告诉
  2. 时标签永远不会改变
  3. 顶部代码中显示的内容
  4. 具有
    FormGame frmGame = new FormGame(this); 在两个函数的顶部,但每次我尝试更新它时,只是将表单重置为初始表单
  5. 在第二个函数中使用Refresh()并在标签文本更改后使用子窗体内部尝试但无效。
  6. 还有一些,但他们离开我认为是正确的。

    所以我的目标是能够在第一个函数中创建表单并在其上设置标签,然后当使用新字符串调用第二个函数时,我希望能够在不关闭打开表单的情况下更新相同的标签。 / LI>

1 个答案:

答案 0 :(得分:4)

您的代码会创建FormGame的新实例,其范围仅在该函数内。这绝不会影响您在方法 之外定义的frmGame变量。

FormGame frmGame = new FormGame(this);

为避免在致电UpdateGame时出现错误,请勿在方法内定义新变量。

public void CreateGame(string Level)
{
   frmGame = new FormGame(this);  // use the class-level field
   ...