2015-06-22 67 views
3

我想在類中引用一個事件處理程序,該類指向在該類中實例化的表單控件的事件。所有的類都存在於同一個名字空間中。C#不能從父類訪問表單的公共成員

該程序基於ApplicationContext表單應用程序。在static void Main()Program.cs

CustomApplicationContext applicationContext = new CustomApplicationContext(); 
Application.Run(applicationContext); 

public class CustomApplicationContext

public class CustomApplicationContext : ApplicationContext 
{ 
    //create the application form 
    Form appForm; 

    public CustomApplicationContext() 
    { 
     InitializeContext(); 

     //create instance of appForm 
     appForm = new AppForm(); 

     //subscribe event handler to form closing event 
     appForm.FormClosing += form_FormClosing; //this works fine 

     //subscribe event handler to form control click event 
     appForm.someToolStripMenuItem.Click += form_Click; //doesn't compile 

     //can't even find appForm.someToolStripmenuItem in code completion! 
    } 

    void form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     ... 
    } 

    void form_Click(object sender, EventArgs e) 
    { 
     ... 
    } 

    ... 
} 

而且從public partial class AppFormAppForm.Designer.cs這是由設計師,在那裏我做了控制修改public產生的,我所做的類public

public partial class AppForm //note that I made this public 
{ 
    ... 

    this.someToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 

    ... 

    // 
    // someToolStripMenuItem 
    // 
    this.someToolStripMenuItem.Name = "someToolStripMenuItem"; 
    this.someToolStripMenuItem.Size = new System.Drawing.Size(178, 22); 
    this.someToolStripMenuItem.Text = "Some Item"; 

    ... 

    public System.Windows.Forms.ToolStripMenuItem someToolStripMenuItem; 
} 

關於電子是什麼我是否做錯了?當我輸入appForm.時,someToolStripMenuItem甚至不會出現在代碼完成框中,就好像它在上下文中不可訪問 - 但appForm可訪問,並且someToolStripMenuItempublic

+0

所以班級是公開的,但也是會員公衆?小寫名稱通常指出非公共變量。 – Wormbo

+0

感謝您的提示,我會在我的代碼中進行更新。 – khargoosh

回答

2

編譯器認爲appFormForm而不是AppForm的,因爲你聲明的方式:它喜歡

Form appForm; 

無論是嘗試改變聲明AppForm appForm;或投:

((AppForm)appForm).someToolStripMenuItem.Click += form_Click; 
+0

Juan和@jimcilhinney都非常正確,胡安在大約30秒前就到了那裏。 – khargoosh

+0

@ khargoosh,實際上,我在胡安前20秒左右,但重要的是你得到了正確的答案。 – jmcilhinney

1

問題是您的appForm字段被聲明爲類型Form。該Form類沒有名爲someToolStripMenuItem的成員。您需要聲明您的字段類型爲AppForm才能訪問該類型的成員。

+0

當然!謝謝@ jimcilhinney,太棒了。 – khargoosh

相關問題