m.r.m.40 Ответов: 2

Переопределите функцию onload () формы.


Привет,

Каждая форма имеет метод с именем OnLoad (), который внутри нее может быть запрограммирован на выполнение некоторого поведения при загрузке формы.

Я планирую переопределить функцию OnLoad () формы класса, а затем внутри нее она делает что-то вроде всплывающего окна сообщений.

Как я могу это сделать?

Что я уже пробовал:

Я все еще читаю об этом и все еще не нашел решения.

2 Ответов

Рейтинг:
1

BillWoodruff

Да, вы можете переопределить событие OnLoad формы:

protected override void OnLoad(EventArgs e)
{
   base.OnLoad(e);
   MessageBox.Show("click okay and the Form will appear");
}
Но, знаете ли вы действительно хотите, чтобы пользователь не видел ничего, кроме MessageBox, когда он запускает приложение ? Если вы хотите сначала показывать форма, а затем поставить MessageBox, попробуйте это:
protected override void OnShown(EventArgs e)
{
    base.OnShown(e);
    MessageBox.Show("Are you ready ?");
}
Но я удивляюсь, почему это так ... какие особые обстоятельства требуют ... ты... нужно это сделать, потому что:

Просто двойной щелчок по поверхности дизайна формы в режиме дизайна вызовет автоматическую генерацию обработчика событий загрузки формы:
private void Form1_Load(object sender, EventArgs e)
{
    // do whatever ...
}
который подключен к форме ... вы можете заглянуть в файл Designer. cs и посмотреть, как осуществляется соединение:
this.Load += new System.EventHandler(this.Form1_Load);
Или вы можете определить экземпляр (создать) своего собственного EventHandler и подключить его к форме:
public Form1()
{
    InitializeComponent();
    this.Load += MyOnLoad;
}

private void MYOnLoad(object sender, EventArgs e)
{
    // do whatever
}
Или вы можете определить EventHandler для ' показанного события, как показано во втором примере кода здесь, чтобы форма появилась до появления MessageBox.


m.r.m.40

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

BillWoodruff

Просто поместите этот код куда-нибудь в код формы, как и любое другое определение метода:

охраняемых переопределить недействительными OnShown(EventArgs в электронной)
{
база.OnShown (e);
Ящик для сообщений.Шоу ("вы готовы ?");
}

Ralf Meier

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

Но ваши объяснения очень хороши ... +5 от меня ...

BillWoodruff

Спасибо, Ральф ! Я не читал других постов ОП.

Ralf Meier

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

m.r.m.40

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

BillWoodruff

Для меня это звучит как другой вопрос.

Ralf Meier

И для меня тоже.
Но, если я не исправлю вашу проблему своими предложениями до сих пор ... что именно вы хотите сделать с usercontrols ? Пожалуйста, опишите его, и я уверен, что мы найдем решение - возможно, вместе.

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

m.r.m.40

Он работает так же на формах, но не на usercontrols.
Как насчет добавления специальную функциональность для моего baseusercontrol, которые помогают мне работать элементы управления UserControl.

Ralf Meier

В другом вопросе от вас я изменил обработчик-скрипт таким образом, что в Messagebox отображается каждый родитель элемента управления. Таким образом , если кнопка интегрирована в UserControl , а этот UserControl интегрирован в панель , которая помещена на форму, то результатом будет "Button1, UserControl1, Panel1, Form1".

Если вы хотите иметь такую функциональность только в UserControl, вы не должны переопределять OnVisibleChanged-метод, потому что UserControl не изменяет его видимое состояние. В этом случае вы могли бы добавить метод addhandler-вызов конструктора-сценарий (новые) и распоряжаться-скрипт удаления обработчиков - но Примечание : оригинальный распоряжаться вом пользовательских элементов управления реализуется в конструкторе-скрипт-часть тыс. пользовательских элементов управления. Если вы хотите изменить этот метод, вы должны вырезать его из конструктора-скрипта и вставить в UserControl-Script. Теперь вы можете добавить к нему несколько кодовых строк.

m.r.m.40

Спасибо за хорошее объяснение.
Я прочитал его через несколько часов после того, как смог решить свою проблему. но я буду иметь это в виду и постараюсь использовать его в том же контексте, в котором я уже застрял.

Ralf Meier

Вы дали ответ мне, а не Биллу, который должен получить этот ответ.
Если вы хотите, чтобы Билл увидел это, вы должны ответить на один из его комментариев ... Думаю, он тоже был бы рад ...

Рейтинг:
1