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

时间:2010-12-14 09:23:26

标签: c# forms button

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

  

form1.btnNext.Enabled = true;

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

  

public void enableButton(bool enabled)

     

{      btnNext.Enabled =启用;   }

并在download.cs中我把:

  

private form1 form1;   ...

     

form1.enableButton(真);

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

6 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

一定会有效

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

public delegate void EnableNextCallback (bool enable);

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

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

答案 4 :(得分: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);

      }

它是它

答案 5 :(得分:0)

您需要在Form1内引用Form2Form2是对话窗口,MDI子窗口等吗? Form1是否设为父窗口? Form1打开Form2吗?

如果Form1确实打开Form2,您可以将所有者属性设置为Form1内的Form2引用。另外,请确保button10中的Form1设置为PUBLIC(默认情况下为私有)。

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

Form2 MyForm2 = new MyForm2();

MyForm2.Owner = this; // "this" being Form1

MyForm2.Show();

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

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