无法从字符串转换为system.windows.forms.string iwin32window

问题描述:

这应该显示xWinner表单标签中的赢家,但我无法弄清楚。 xWinnerForm.Show(b1.Text);.我是新来的C#,所以你可以请外行解释说谢谢。无法从字符串转换为system.windows.forms.string iwin32window

 static public bool CheckWinner(Button[] myControls) 
    { 
     bool gameOver = false; 
     for (int i = 0; i < 8; i++) 
     { 
      int a = Winners[i, 0]; 
      int b = Winners[i, 1]; 
      int c = Winners[i, 2]; 

      Button b1 = myControls[a], b2 = myControls[b], b3 = myControls[c]; 
      if (b1.Text == "" || b2.Text == "" || b3.Text == "") 
       continue; 
      if (b1.Text == b2.Text && b2.Text == b3.Text) 
      { 
       gameOver = true; 

       Form xWinnerForm = new xWinnerForm(); 
       xWinnerForm.Show(b1.Text); 


      } 


    public void Show(string text) 
    { 
     this.xWinnerLabel.Text = text; 
     this.Show(); 
    } 

     } 
     return gameOver; 
    } 

这是你需要做的最小变化它的工作:

xWinnerForm xWinnerForm = new xWinnerForm(); 

虽然我建议除了这几个变化:类名

  • 使用PascalCase ,但是使用骆驼大小写来表示变量名称。

XWinnerForm xWinnerForm = new XWinnerForm();

  • 不要以这种方式过载Show。而是改变表单的构造函数以接受额外的数据,否则将一个setter添加到表单中。

XWinnerForm xWinnerForm = new XWinnerForm(b1.Text);

  • 不喜欢a, b, c, b1使用的名称:

XWinnerForm xWinnerForm = new XWinnerForm(labelWinner.Text);

目前变量(xWinnerForm)的类型为Form,并且FormShow法一个不同的签名。相反,告诉它哪个具体的类型Form它是 - 一个WinnerForm也许(你的类名称...)。或者使用不同的方法名称(Show会引起混淆)。

Form xWinnerForm = new xWinnerForm(); 

这条线是你的问题。因为你声明你的变量为Form,编译器不知道你的Show(string)函数。

另一方面,使用与其类型相同的变量名通常是不好的形式。

相反,做这样的事情:

xWinnerForm winner = new xWinnerForm(); 

winner.Show(b1.Text);