C #: как получить доступ к кнопке вне класса формы - PullRequest
1 голос
/ 26 марта 2009

Я хочу включить или отключить кнопку из другого файла, что мне делать?

Это объявление класса формы:

public partial class Form1 : Form

Я пытался с

Form.btnName.enabled = false/true 

но нет члена btnName.

Заранее спасибо!

Ответы [ 7 ]

8 голосов
/ 26 марта 2009

Просто выставьте публичный метод:

public void EnableButton(bool enable)
{
    this.myButton.Enabled = enable;
}

Исправление:

public void EnableButton()
{
    this.myButton.Enabled = true;
}
3 голосов
/ 26 марта 2009

Я действительно предлагаю прочитать больше информации о том, как формы вписываются в .net. У вас есть пара проблем в этом примере кода "Form.btnName.enabled = false / true"

  • Ваша форма называется Form1, она наследуется от Form.
  • Формы являются экземплярами, фактически в приложении могут быть разные экземпляры форм, принадлежащие к одному и тому же классу.
  • Из-за вышеизложенного не имеет смысла обращаться к Form1.btnName. Вы должны сделать это через конкретный экземпляр.
  • Элементы управления формы по умолчанию не являются общедоступными, для этого определите метод.
  • Проекты Windows Form, как правило, имеют основной, который запускает форму. Там вы можете получить доступ к экземпляру формы и передать его чему-то другому в приложении.
  • Вышеуказанное отвечает на конкретный вопрос. Обратите внимание, что существует несколько способов достижения различных сценариев, и для того, что вы действительно хотите сделать, может не понадобиться вышеуказанный подход.
3 голосов
/ 26 марта 2009

Вам необходимо предоставить элемент btnName другим классам, сделав его общедоступным или используя какое-либо свойство. Например, добавьте следующий код в форму Form1

public Button ButtonName { get { return btnName; } }

Теперь вы можете использовать form.ButtonName для любого экземпляра Form1

1 голос
/ 26 марта 2009

Это связано с тем, что по умолчанию элементы управления в форме не являются общедоступными (в отличие от VB6, в котором все элементы управления были опубликованы публично).

Полагаю, вы можете изменить средство доступа к видимости в конструкторе на общедоступное, но в целом это плохая идея.

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

0 голосов
/ 06 июля 2017

В Form1 создать объект для внешнего класса (добавить имя кнопки в параметре)

Class1 obj_Class1 = new Class1(btnName);

В Class1 создайте личную кнопку

private System.Windows.Forms.Button btnName;

В конструкции класса 1

 public Class1(System.Windows.Forms.Button btnName)
        {
            this. btnName = btnName;
        }

тогда вы можете получить доступ к вашей кнопке, как,

btnName.enabled = false/true; 
0 голосов
/ 26 марта 2009

Вам нужно добавить публичное свойство или метод для установки кнопки.

public void DisableBtnName()
{
  this.btnName.Enabled=false;
}

public Button BtnName
{
    get { return this.btnName;}
}
0 голосов
/ 26 марта 2009

Вы должны будете указать это в вашем конкретном экземпляре Form1.

Т.е.: если у вас есть что-то вроде Form1 myForm = new Form1(...);, то вы можете сделать myForm.btnName.Enabled = false;

Для этого также необходимо, чтобы btnName был общедоступным. Было бы «лучше» создать свойство или метод доступа для его извлечения, чем напрямую предоставлять открытый доступ к элементу поля частной кнопки по умолчанию.

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