无法从字符串转换为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
,并且Form
有Show
法一个不同的签名。相反,告诉它哪个具体的类型的Form
它是 - 一个WinnerForm
也许(你的类名称...)。或者使用不同的方法名称(Show
会引起混淆)。
答
Form xWinnerForm = new xWinnerForm();
这条线是你的问题。因为你声明你的变量为Form
,编译器不知道你的Show(string)
函数。
另一方面,使用与其类型相同的变量名通常是不好的形式。
相反,做这样的事情:
xWinnerForm winner = new xWinnerForm();
winner.Show(b1.Text);