C # как включить кнопку из другого класса - PullRequest
1 голос
/ 14 декабря 2010

У меня есть форма1, есть кнопка «скачать» и кнопка «следующий».По умолчанию кнопка «Далее» отключена.Когда я нажимаю кнопку «скачать», я вызываю метод из файла download.cs, отличный от form1.cs.После загрузки я хочу, чтобы кнопка «Далее» была включена, поэтому в файле download.cs после получения всех файлов я помещаю

form1.btnNext.Enabled = true;

Но это не работает.Я также поместил это в form1.cs

public void enableButton (bool enabled)

{btnNext.Enabled = enabled;}

и в download.cs я положил:

private form1 form1;...

form1.enableButton (true);

, но это тоже не работает.Может ли кто-нибудь показать мне, где я не прав?заранее спасибо.

Ответы [ 6 ]

2 голосов
/ 14 декабря 2010

Ваш вопрос нуждается в дополнительной информации, чтобы быть уверенным, но я предполагаю, что экземпляр form1 в вашем классе загрузчика не совпадает с экземпляром, который показан на вашем экране.

Если ваш загрузчик должен иметь возможность перезвонить форме, которая его запустила, самый простой способ - передать ссылку на эту форму в класс загрузчика.

0 голосов
/ 02 марта 2012

Вам необходимо иметь ссылку на 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;
0 голосов
/ 14 декабря 2010

Если вы замораживаете свой пользовательский интерфейс во время загрузки, чем

1 - Определите событие в вашем классе загрузчиков

    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);

      }

вот оно

0 голосов
/ 14 декабря 2010

Вы можете сделать это с помощью обратного вызова.Таким образом, в вашем Download.cs у вас есть что-то вроде этого:

public delegate void EnableNextCallback (bool enable);

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

Таким образом, вы можете передать свой метод EnableButton вашему методу загрузки.

0 голосов
/ 14 декабря 2010

Вы можете передать ссылку на кнопку в новый класс. Поэтому, когда вы вызываете метод из файла download.cs, передайте имя кнопки в качестве параметра, а затем вы можете использовать его в новом классе, как при любой другой ссылке.

0 голосов
/ 14 декабря 2010

Я помню, что столкнулся с чем-то вроде этого, и вы можете попытаться сделать вашу (следующую) кнопку общедоступной, а не приватной, но это не очень привлекательный подход, но я думаю, что если вы сделаете это, то ваше первое предложение будет работать.

и, если это не так, вы можете попробовать сделать это:

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

это точно будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...