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