我不能从另一个类调用公共方法

时间:2013-06-22 11:34:27

标签: c# winforms

这是带方法的类

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
  }
}

我收到错误消息:

  

错误1
  'System.Windows.Forms.Form'不包含的定义   'GetGameName'并且没有扩展方法'GetGameName'接受第一个   可以找到类型'System.Windows.Forms.Form'的参数(是吗?   缺少using指令或程序集   引用?)

几个星期前我写了类似的代码,它完美无缺。

3 个答案:

答案 0 :(得分:6)

替换

Form newGame = new NewGame();

NewGame newGame = new NewGame();

您的newGame变量属于Form类型,不包含这些方法。 您已在NewGame类中定义了这些方法,因此如果使用正确的类型,它们将可见

如果您确实需要使用父类型(Form),则可以将对象转换为NewGame

Form newGame = new NewGame();
string gameName = ((NewGame)newGame).GetGameName();

答案 1 :(得分:1)

变量newGame的静态类型为Form,因此只有Form的方法可见,即使变量实际指向NewGame对象。使变量的类型与对象的实际类型匹配,并且可以访问这些方法。

NewGame newGame = new NewGame();

答案 2 :(得分: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
  }
}