无法从另一个类中调用公共方法

3

这是一个带有方法的类

public partial class NewGame : Form
{
  public NewGame()
  {
    InitializeComponent();
    this.Icon = new Icon("Resources/iconG.ico");
    comboBoxGenre.Items.AddRange(Enum.GetNames(typeof(Game.Genre)));
  }

  public string GetGameName()
  {
    return txtbxGameName.Text.Trim();
  }

  public int GetGenreSelector()
  {
    return comboBoxGenre.SelectedIndex;
  }
}

这是我的主要表单

private void addGameToolStripMenuItem_Click(object sender, EventArgs e)
{
  Form newGame = new NewGame();
  newGame.ShowDialog(this);
  if (newGame.DialogResult==DialogResult.OK)
  {
    string gameName = newGame.GetGameName(); //this part doesn't work
  }
}

我收到一个错误信息:

Error 1
'System.Windows.Forms.Form' 没有包含 'GetGameName' 的定义,也没有扩展方法 'GetGameName' 接受类型为 'System.Windows.Forms.Form' 的第一个参数 (你是否缺少 using 指令或程序集引用?)

几周前我写了类似的代码,它完美地工作了。

你会后悔写这种代码的,它无法本地化。 - Hans Passant
3个回答

6

替换

Form newGame = new NewGame();

使用

NewGame newGame = new NewGame();

你的newGame变量的类型是Form,它不包含那些方法。 你已经在NewGame类中定义了这些方法,如果你使用正确的类型,它们将会被可见
如果你确实需要使用父类型(Form),那么你可以将你的对象强制转换为NewGame:
Form newGame = new NewGame();
string gameName = ((NewGame)newGame).GetGameName();

1
变量 newGame 的静态类型是 Form,因此只有 Form 的方法可见,即使变量实际上指向一个 NewGame 对象。将变量的类型与对象的实际类型匹配,就可以访问方法了。
NewGame newGame = new NewGame();

0

试一下这个

用这个方法替换你的方法

private void addGameToolStripMenuItem_Click(object sender, EventArgs e)
{
  NewGame newGame = new NewGame();
  newGame.ShowDialog(this);
  if (newGame.DialogResult==DialogResult.OK)
  {
    string gameName = newGame.GetGameName(); //this part doesn't work
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接