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?Ja. Auf Ihrem Haupt-MDI-Formular, Draht bis zu der MdiChildActivated Event.
Etwa so:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.MdiChildActivate += new EventHandler(Form1_MdiChildActivate);
}
void Form1_MdiChildActivate(object sender, EventArgs e)
{
MessageBox.Show("Activated");
}
private void addToolStripMenuItem_Click(object sender, EventArgs e)
{
Form form2 = new Form2();
form2.MdiParent = this;
form2.Show();
}
}
Und dieses Ereignis wird ausgelöst, wenn das untergeordnete Formular aktiviert oder deaktiviert wird.
Verdrahten Sie die MdiChildActivate
Ereignis und führen eine Liste der anerkannten Kinder. Wenn ein neues Formular aktiviert wird, verdrahten Sie auch das FormClosed
Veranstaltung.
private List<Form> ChildFormList = new List<Form>();
private void MyForm_MdiChildActivate(object sender, EventArgs e)
{
Form f = this.ActiveMdiChild;
if (f == null)
{
//the last child form was just closed
return;
}
if (!ChildFormList.Contains(f))
{
//a new child form was created
ChildFormList.Add(f);
f.FormClosed += new FormClosedEventHandler(ChildFormClosed);
}
else
{
//activated existing form
}
}
private void ChildFormClosed(object sender, FormClosedEventArgs e)
{
//a child form was closed
Form f = (Form)sender;
ChildFormList.Remove(f);
}
Ich erkannte, dies ist viele Jahre zu spät jedoch als die Antworten hier half mir dies zu lösen ich dachte, ich würde erwähnen, dies funktioniert gut mit dem MdiChildren-Array in .net 4. Das einzige, was Sie tun müssen, ist zu überprüfen, ob das Formular entsorgt oder entsorgt zu sagen, wenn seine Schließung.
d. h:
private void frmContainer_MdiChildActivate(object sender, EventArgs e)
{
tabWindows.RefreshLayout(this.MdiChildren.ToList());
}
public void RefreshLayout(List<Form> forms)
{
this.nextButtonLeft = 1;
panel1.Controls.Clear();
foreach (Form frm in forms)
{
if (!(frm.Disposing || frm.IsDisposed)) { addButton(frm); }
}
}
Ja, Sie können das Hinzufügen von Formularen in MDI-Formularen leicht erkennen.
Wenn die Markierung ParentForm als MdiContainer durch Setzen des IsMdiContainers auf true, die ParentForm.ControlAdded Ereignis für das Hinzufügen des Steuerelements "MdiClient" zum übergeordneten Formular ausgelöst. Wenn Sie also MdiClient zum übergeordneten MDI-Formular hinzufügen, können wir das Ereignis ControlAdded für das MdiClient-Steuerelement auslösen wie unten dargestellt,
public ParentForm()
{
InitializeComponent();
this.ControlAdded += Form1_ControlAdded;
this.IsMdiContainer = true;
Wir müssen die MdiClient.ControlAdded wie die unten zu erhöhen,
void Form1_ControlAdded(object sender, ControlEventArgs e)
{
if(e.Control is MdiClient)
e.Control.ControlAdded += MdiClient_ControlAdded;
}
Standardmäßig wird die MDI-Child-Formulare werden in die Controls-Sammlung des MdiClient aufgenommen in Elternform. Wenn Sie also den Wert ChildForm.MdiParent als Parent-Formular festlegen, wird die ControlAdded-Ereignis für den MdiClient wird ausgelöst .
void MdiClient_ControlAdded(object sender, ControlEventArgs e)
{
}
Mit der oben beschriebenen Methode können Sie also kennen die untergeordneten MDI-Formulare, die den übergeordneten MDI-Formularen hinzugefügt wurden . So können Sie das ControlRemoved-Ereignis für das MdiClient-Steuerelement hinzufügen, um zu erfahren, welche untergeordneten Formulare aus dem MDI-Formular entfernt wurden.
Ich hoffe, das hilft Ihnen weiter.
- See previous answers
- Weitere Antworten anzeigen