Каков эквивалент формы "On_Load" для элементов управления? - PullRequest
1 голос
/ 22 июня 2011

У меня есть listBox, который я хотел бы выполнить при загрузке метода, хотя я не могу использовать триггер Form On_Load, поскольку ListBox находится внутри TabControl.

Есть ли способ заставить метод выполняться при инициализации объекта?

Ответы [ 5 ]

2 голосов
/ 22 июня 2011

Как сказал @SLaks, вы можете добавить конструктор вашего класса. Однако, если то, что вы хотите подготовить, зависит от других элементов формы, вы можете добавить их в очередь обработчиков событий в конце загрузки формы, но до того, как она будет фактически представлена ​​пользователю.

В коде конструктора вашей формы (не в коде конструктора) добавьте событие загрузки, затем добавьте свою собственную пользовательскую функцию

public partial class frmYourForm : Form
{
    public frmYourForm()
    {
       Load += YourPreparationHandler;
    }

    private void YourPreparationHandler(object sender, EventArgs e)
    {
        // Do you code to prepare list, combos, query, bind, whatever
    }
}
2 голосов
/ 22 июня 2011

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

0 голосов
/ 22 июня 2011

Возникла та же проблема, предыдущие ответы хорошо подходят для одного случая.

Но мне нужно что-то сделать в большинстве элементов управления, в нескольких формах, в приложении.Решено с помощью интерфейса:

interface IOnLoad
{
  void OnLoad();
}

И добавлено в дочерний элемент управления:

public partial class MyButton : Button, IOnLoad
{
  void OnLoad() { // call "OnLoadDelegate" }
}

public partial class MyForm : Form
{

  public void MyForm_Load(...) {
    foreach(Control eachControl in Controls) {
      if (eachControl is IOnLoad) {
        IOnLoad eachOnLoadControl = (IOnLoad)eachControl;
        eachOnLoadControl.OnLoad();
      }
    } // foreach
  }
} // class

Это более сложное, но оно соответствует моим требованиям.

0 голосов
/ 22 июня 2011

Вы можете просто поместить свой код в конструктор.

Обычно вам не нужно ждать инициализации.

0 голосов
/ 22 июня 2011

Можете ли вы использовать событие HandleCreated?

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