首页 文章

C#如何从另一个类启用按钮

提问于
浏览
1

我有一个form1,有一个“下载”按钮和一个“下一步”按钮 . 默认情况下,“下一步”按钮被禁用 . 当我点击“下载”按钮时,我将从download.cs调用一个方法,不同于form1.cs . 下载后,我希望启用“下一步”按钮,所以在download.cs中,收到所有文件后,我放了

form1.btnNext.Enabled = true;

但它不起作用 . 我也把它放在form1.cs中

public void enableButton(bool enabled)

并在download.cs中我把:

private form1 form1; ... form1.enableButton(true);

但它也不起作用 . 任何人都可以告诉我哪里错了吗?提前致谢 .

6 回答

  • 0

    如果你在下载时冻结你的UI比

    1-在Downloader类中定义一个事件

    public delegate void EnableUI(bool shdEnable);
    
        public event EnableUI MakeUIEnabled;
    

    2-将此事件挂钩到form1类中,我假设您正在下载按钮中创建下载类的对象,或者它是在类级别创建的,我们将此对象称为customDownloader

    customDownloader.MakeUIEnabled+=new EnableUI(EnableUIControls);
    

    3-在form1类中定义事件处理程序,如下所示 .

    public void EnableUIControls(bool shdEnable)
        {
            btnNext.Enabled = shdEnable;
    
        }
    

    4-让我们知道在download.cs文件中有一个downloadfile()方法,所以当你下载完成而不是提出这个事件 .

    public void DownLoadFile()
          {
              if(MakeUIEnabled!=null)
                 MakeUIEnabled(true);
    
          }
    

    是的

  • 2

    您的问题需要更多信息才能确定,但我猜测您的下载程序类中的 form1 实例与屏幕上显示的实例不同 .

    如果您的下载程序应该能够回调启动它的表单,最简单的方法是将对该表单的引用传递给下载程序类 .

  • 0

    我记得面对这样的事情,你可能会尝试让你的(下一个)按钮公共而不是私人,但这不是一个非常可爱的方法,但我想如果你做帽子,那么你的第一个建议将起作用 .

    如果没有,你可以尝试这样做:

    Form1 myForm = new Form1; myform.nxtButton.enabled = true;

    它肯定会奏效

  • 0

    您可以将Button的引用传递给新类 . 因此,当您从download.cs调用该方法时,将按钮的名称作为参数传递,然后您可以像在任何其他引用中一样在新类中使用它 .

  • 0

    你可以通过回调来做到这一点 . 所以在你的Download.cs中,你有这样的东西:

    public delegate void EnableNextCallback (bool enable);
    
    public static void Download(EnableNextCallback n) {
       // stuff
       // when you're done
       n(true);
    }
    

    这样,您可以将EnableButton方法传递给下载方法 .

  • 0

    您需要在 Form2 中引用 Form1 . 是 Form2 一个对话窗口,MDI子窗口等?将 Form1 设置为父窗口? Form1 打开 Form2

    如果 Form1 确实打开了 Form2 ,则可以将owner属性设置为在 Form2 内引用 Form1 . 此外,请确保 Form1 中的 button10 设置为PUBLIC(默认情况下为私有) .

    Form1 中,您将拥有以下代码:

    Form2 MyForm2 = new MyForm2();
    
    MyForm2.Owner = this; // "this" being Form1
    
    MyForm2.Show();
    

    Form2 中,只要您想在 Form1 上访问 button10 ,请执行以下操作:

    (this.Owner as Form1).button10.Enabled = false;
    

相关问题