【问题标题】:C# Access Of Public Method Between FormsC#表单间公共方法的访问
【发布时间】:2013-04-18 05:11:36
【问题描述】:

我正在尝试为我的模块做一个简单的项目。我为我的程序制作了一个登录系统,其想法是在用户输入正确的详细信息并提交之前禁用菜单栏控件。到目前为止,这是我想出的主要形式:

    public void setControlDisabled()
    {
        fileToolStripMenuItem.Enabled = false;
        clientsToolStripMenuItem.Enabled = false;
        dVDsToolStripMenuItem.Enabled = false;
        windowsToolStripMenuItem.Enabled = false;
    }

    public void setControlEnabled()
    {
        this.fileToolStripMenuItem.Enabled = true;
        this.clientsToolStripMenuItem.Enabled = true;
        this.dVDsToolStripMenuItem.Enabled = true;
        this.windowsToolStripMenuItem.Enabled = true;
    }

以下代码在我的登录表单中以及其他代码中:

private void btnLogin_Click(object sender, EventArgs e)
{
            //other code
            Form1 form = new Form1();
            form.setControlEnabled();
}

禁用部分工作正常,即使我在它显示的 setControlEnabled 方法中放了一个小 MessageBox,但它并没有启用菜单条。

PS。菜单栏上的登录仍处于启用状态。

【问题讨论】:

    标签: c# forms methods public


    【解决方案1】:

    这可能是因为您需要存储对表单的引用并使用它。不要重新创建表单,否则您正在与另一个实例交谈,该实例将启用其项目。如果你在当前代码中调用form.Show(),你会看到这个

    你可以这样处理:

    Form1 otherForm;
    Form1 OtherForm
    {
        get
        { 
             //If the form is requested but not created yet, create it
             if(otherForm == null) 
                 otherForm = new Form1();
             return otherForm;
        }
    }
    
    private void btnLogin_Click(object sender, EventArgs e)
    {
                //other code
                OtherForm.setControlEnabled();
    }
    

    属性懒惰地处理表单的创建。如果它已经创建,那么它只返回该实例,否则它创建一个新实例并返回它。不过,它将保留此参考。因此,您需要有一个 clear 方法或 setter,以便在它已关闭并且您希望将其完全删除时将其设置为 null。

    【讨论】:

      【解决方案2】:

      您的 Form1 实例似乎在本地范围内限定为您的 btnLogin_Click 方法,而不是全局实例。在 Class 声明中声明您的 Form1 实例,即:

      public class Form2
          private Form1 form = new Form1();
      
          public Form2()
          {
              form.Show();
          }
      
          private void btnLogin_Click(object sender, EventArgs e)
          {
              form.setControlEnabled();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-31
        • 2012-12-09
        • 2011-10-31
        • 1970-01-01
        • 2015-09-07
        • 2023-03-27
        • 2015-09-13
        • 1970-01-01
        相关资源
        最近更新 更多