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....
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
}
}