Gibt es ein Ereignis, das ich verwenden kann, um festzustellen, ob ein untergeordnetes Formular dem übergeordneten MDI-Formular hinzugefügt oder entfernt wurde?
Antworten
Zu viele Anzeigen?Da das MdiChildActivate-Ereignis ausgelöst wird, bevor das MDI-Kinderformular tatsächlich geschlossen wird, und daher nicht genügend Informationen vorhanden sind, um zu erkennen, ob ein MDI-Kinderformular tatsächlich aktiviert oder geschlossen ist, habe ich einen anderen Ansatz gewählt, um das Problem zu lösen.
Ich habe festgestellt, dass das ParentChanged-Ereignis auf dem MDI-Unterformular ausgelöst wird, wenn es geschlossen wird.
public class MdiParentForm : Form
{
// ...
private Form CreateMdiChildForm()
{
var form = new MdiChildForm
form.ParentChanged += MdiFormParentChangedHandler;
form.MdiParent = this;
return form;
}
private void MdiFormParentChangedHandler(object sender, EventArgs args)
{
var form = sender as Form;
if (form != null)
{
if (form.MdiParent != null)
{
// MDI child form will activate
// ... your code here
}
else
{
// MDI child form will close
form.ParentChanged -= MdiFormParentChangedHandler;
// ... your code here
}
}
}
// ...
}
Kürzlich wollte ich feststellen, wann ungefähr KEINE MDI-Kinder geöffnet sind, damit ich ein Panel mit vielen Schaltflächen für "zu erledigende Aufgaben" nur dann anzeigen kann, wenn keine untergeordneten Formulare geöffnet sind. (Ich wollte nur eine Design-Idee ausprobieren).
Meine letztendliche Lösung war elegant einfach - fügen Sie einen Timer auf das übergeordnete Formular und starten Sie den Timer, wenn das MdiChildActivate-Ereignis festgestellt, es war 1 Kind Form geöffnet.
private void MyForm_MdiChildActivate(object sender, EventArgs e)
{
this.panel_Tools.Visible = false;
if (this.MdiChildren.Count() == 1)
{
this.timer_WindowsCounter.Start();
}
else
{
this.timer_WindowsCounter.Stop();
}
}
private void timer_WindowsCounter_Tick(object sender, EventArgs e)
{
if (this.MdiChildren.Count() == 0)
{
this.panel_Tools.Visible = true;
this.timer_WindowsCounter.Stop();
}
}
- See previous answers
- Weitere Antworten anzeigen