【问题标题】:C# Can Not Access public member of Form from Parent ClassC# 无法从父类访问表单的公共成员
【发布时间】:2015-09-07 10:54:46
【问题描述】:

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

该程序基于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)
    {
        ...
    }

    ...
}

在设计器生成的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# winforms applicationcontext


【解决方案1】:

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

Form appForm;

尝试将声明更改为 AppForm appForm; 或将其转换为:

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

【讨论】:

  • Juan 和@jmcilhinney 都完全正确,Juan 大约提前 30 秒到达那里。
  • @khargoosh,实际上,我比胡安早了大约 20 秒,但重要的是你得到了正确的答案。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多