我有一个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(真);
但它也不起作用。任何人都可以告诉我哪里错了吗?提前谢谢。
答案 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
内引用Form2
。 Form2
是对话窗口,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;