Да, это возможно.Это связано с проблемой встроенной функции API Windows CreateWindowEx ().Этот вызов определяет биты стиля для окна.Те же биты стиля также выставляются как свойства элемента управления.Проблема в том, что изменение этого свойства требует повторного вызова CreateWindowEx ().Родное окно Windows для элемента управления уничтожено и воссоздано.У этого есть побочные эффекты, один из них заставляет событие Load снова запускаться.
Демонстрируя это с примером кода:
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
}
public void TriggerRecreate() {
if (this.RightToLeft == System.Windows.Forms.RightToLeft.Yes)
this.RightToLeft = System.Windows.Forms.RightToLeft.No;
else this.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
Console.WriteLine("onload");
}
}
Скомпилируйте и отбросьте элемент управления в форме.Добавьте кнопку:
private void button1_Click(object sender, EventArgs e) {
userControl11.TriggerRecreate();
}
и обратите внимание, что окно «Вывод» отображает «onload» каждый раз, когда вы нажимаете кнопку.
Свойство RightToLeft - единственное, что я могу придумать для UserControlэто сделает это.Есть много других форм.Этот класс, однако, имеет специальный код, чтобы его метод OnLoad не запускался более одного разаНе уверен, почему они не сделали этого для UserControl, вероятно, потому что это так редко.Не стесняйтесь игнорировать это.И всегда отдавайте предпочтение конструктору над событием Load, если вы не заботитесь о размере окна.