При инициировании события после того, как макет Winform полон

Я работаю над приложением C# WinForm.

Я хочу инициировать некоторую обработку, как только форму "показали", и макет формы полон.

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

9
задан BENBUN Coder 5 January 2010 в 10:02
поделиться

4 ответа

Я не вижу события после Show, которое вы можете использовать для этой цели. Нельзя ли использовать таймер для задержки обработки события Show?

.
4
ответ дан 4 December 2019 в 07:35
поделиться
[

] Насколько я помню, порядок событий что-то вроде [

]... [
Form.Load
Form.Layout 
Form.VisibleChanged
Form.GotFocus
Form.Activated
Form.Shown
] [

] Итак, если что-то все еще происходит после [] Формы. Покажите [], это из-за того, как вы это закодировали. [

] [

] Может быть, вы создаете форму динамически? [

]
1
ответ дан 4 December 2019 в 07:35
поделиться

Старый трюк в VB6 заключался в том, чтобы использовать событие "Paint":

bool firstShown = false;

void form_Paint(Object sender, EventArgs e) {
  if ( !firstShown ) {
    YourMethodThatNeedsToRunOnShown();
    firstShown = true;
  }

  //the rest of your paint method (if any)

}

Это немного халтурно, но работает

.
3
ответ дан 4 December 2019 в 07:35
поделиться

Попробуйте использовать Форму.GotFocus (унаследованную от управления)... что-то вроде этого.

   private void Form1_Load(object sender, EventArgs e)
    {
        this.GotFocus += new EventHandler(Form1_gotFocus);
        this.Focus();
    }

    private void Form1_gotFocus(object sender, EventArgs e)
    {
      // You will need to Switch focus from form at the end of this function, 
      //to make sure it doesnt keep Firing.
    }

Согласно msdn, происходит следующее:

При смене фокуса с помощью клавиатуры (TAB, SHIFT+TAB и т.д.), вызовом методов Select или SelectNextControl, или установкой ContainerControl...::. Свойство ActiveControl в текущей форме, события фокусировки происходят в следующем порядке:

  1. Enter
  2. GotFocus
  3. Leave
  4. Validating
  5. Validated
  6. LostFocus
0
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: