2015-06-22 66 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

相关问题