2013-06-22 57 views
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 
    } 
} 

我得到一个错误信息:

错误1
'System.Windows.Forms.Form'不包含 'GetGameName'的定义,并且没有扩展离子法“GetGameName”接受类型“System.Windows.Forms.Form中”的第一 参数可以发现(是否 缺少using指令或程序集 引用?)

几个星期前我写类似的代码,它的工作完美无瑕。

+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

静态变量类型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 
    } 
}