Laden...

MdiChildren durchlaufen???

Erstellt von pringels vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.177 Views
P
pringels Themenstarter:in
24 Beiträge seit 2006
vor 17 Jahren
MdiChildren durchlaufen???

Einen schönen Nachmittag euch allen.
Hab mal eine Frage bezüglich der Geschwindigkeit meines Codes
Ich habe eine MDI-Anwendung mit der ich eine Datei öffnen kann. für jede Datei wird ein MDI-Child geöffnet.
Wenn eine Datei nun ein 2. mal gewählt wird, soll kein neues Fenster geöffnet werden, sondern das MDI-Child aktiviert werden, in dem die Datei das erste mal geöffnet wurde.
Ich habe in den Childs eine Eigenschaft definiert, die den Datei enthält. Beim Öffnen einer Datei durchlaufe ich nun alle Childs und prüfe, ob die Datei schon mal geöffnet wurde. Wenn ja, aktiviere ich das betreffende Child-Fenster, wenn nicht, dann mache ich ein neues auf. Etwa so:


OpenFileDialog ofd = new OpenFileDialog();
ofd.InitialDirectory = Environment.CurrentDirectory;
if (ofd.ShowDialog() == DialogResult.OK)
{
      bool found=false;
      foreach (Form f in this.MdiChildren)
      {
             if (f.GetType().Equals(typeof(MeinMdiChild)))
             {
                        MeinMdiChild f2 = f as MeinMdiChild;
                        if (f2.Filename.Equals(ofd.FileName))
                        {
                            found = true;
                            this.ActivateMdiChild(f);
                        }
              }
     }

     if (!found)
     {
          MeinMdiChild f = new MeinMdiChild(ofd.FileName);
          f.MdiParent = this;
          f.Show();
     }
}

Nun scheint mir dieses Vorgehen nicht besonders effizient zu sein.
Gibt es, abgesehen von dem Austieg aus der For-Schleife, wenn es gefunden wurde, noch andere Lösungsmöglichkeiten?
Danke....

F
722 Beiträge seit 2005
vor 17 Jahren

besser wäre es, wenn du beispielsweise in deinem haupt-formular ein dictionary anlegst, in denen du informationen über die bisher geöffneten dateien hälst. als key sollte dabei der komplette pfad zu der datei liegen und als value das jeweilige mdi child.


..
System.Collections.Generic.Dictionary<string, Form> m_openFileTable = 
				new Dictionary<string, Form>(); 
..

//m_openFileTable beim Öffnen Füllen.....
//....
		
void method() 
{
	if (m_openFileTable.ContainsKey(filename)) 
	{
		//...datei ist schon geöffnet
	}
	else
	{
		//..datei noch nicht geöffnet
	}
	
}

		

P
pringels Themenstarter:in
24 Beiträge seit 2006
vor 17 Jahren
Danke

Perfekt 👍

Genau danach habe ich gesucht...