Я работаю над приложением C# WinForm.
Я хочу инициировать некоторую обработку, как только форму "показали", и макет формы полон.
Я использую "_Shown" событие, но это, кажется, инициировало, прежде чем расположение формы завершилось. Есть ли событие, которое я могу использовать, который стреляет, как только макет полон?
Я не вижу события после Show, которое вы можете использовать для этой цели. Нельзя ли использовать таймер для задержки обработки события Show?
.] Насколько я помню, порядок событий что-то вроде [
]... [Form.Load
Form.Layout
Form.VisibleChanged
Form.GotFocus
Form.Activated
Form.Shown
]
[] Итак, если что-то все еще происходит после [] Формы. Покажите [
], это из-за того, как вы это закодировали. [
] Может быть, вы создаете форму динамически? [
]Старый трюк в 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)
}
Это немного халтурно, но работает
.Попробуйте использовать Форму.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 в текущей форме, события фокусировки происходят в следующем порядке: