C#无法从父类访问窗体的公共成员

本文关键字:成员 窗体 访问 父类 | 更新日期: 2023-09-27 17:57:32

我正试图在一个类中添加一个事件处理程序,该类引用在该类中实例化的窗体控件的事件。所有类都存在于同一个命名空间中。

该程序基于ApplicationContext表单应用程序。Program.cs 中的static void Main()

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)
    {
        ...
    }
    ...
}

从设计者生成的AppForm.Designer.cs中的public partial class AppForm中,我制作了控制修饰符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

C#无法从父类访问窗体的公共成员

编译器认为appFormForm,而不是AppForm,因为您声明它的方式:

Form appForm;

请尝试将声明更改为AppForm appForm;,或者将其强制转换为:

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

问题是您的appForm字段被声明为类型FormForm类没有名为someToolStripMenuItem的成员。您需要将字段声明为类型AppForm才能访问该类型的成员。