Hallo zusammen,
ich möchte in meinem Programm die Funktion "Öffnen"->"Letzte Dateien" realisieren.
Wenn ich eine Datei öffne, wird diese in ein Array gespeichert, das zu Beginn des Programmstarts geladen wird (aus .ini-Datei oder Settings). Für jeden Array-Eintrag lasse ich einen Eintrag in das Startmenü setzen. Für jeden dieser Einträge muss ich dann ja ein Click-Event verbinden, in dem dann die jeweilige Datei geöffnet wird. Leider weiß ich nicht, wie ich denn den Dateinamen übergeben kann! Woher weiß ich, welcher Button geklickt wurde?
Hier der Code:
foreach (String f in files)
{
if (f != "")
{
letzeBilderToolStripMenuItem.DropDownItems.Add(f);
letzeBilderToolStripMenuItem.DropDownItems[i].Click += new EventHandler(openLast);
}
}
private void openLast(object sender, EventArgs e)
{
openFile(Dateiname);
}
Wie kann ich das jetzt also schaffen, der openLast-Funktion einen Parameter zu übergeben?
Danke euch!
Über den sender des Events kommst du an das entspr. ToolStripItem das den Dateinamen enthält (bei deinem Beispielt kämst Du so z.B. über das Text-Property an den Dateinamen)
ToolStripItem item = fileToolStripMenuItem.DropDownItems.Add("Dateiname");
item.Click += new EventHandler(item_Click);
}
void item_Click(object sender, EventArgs e)
{
ToolStripItem srcItem = sender as ToolStripItem;
if (srcItem != null)
{
MessageBox.Show(srcItem.Text);
}
}
ja super stark! Vielen, vielen Dank für die schnelle Hilfe! Das mit dem "as" checke ich zwar, weiß aber nie dass ich das hernehmen kann! DANKE!
OT:
kleine Anmerkung: [Tipp] Casten aber richtig: Begriffe wie Cast / is / as
Ich empfehle ganz allgemein, wo möglich (wie hier), den herkömmlichen ("harten") Cast einzusetzen.
Damit erhältst du eine InvalidCast-Exception, wenn die Umwandlung nicht möglich ist, und das ist hochwillkommen.
Ein "weicher" Cast gäbe nur null zurück, und wenn du das nicht testest, rennst du an der nächsten Ecke in eine ArgumentNull-Exception, und dann kannst du erst mal suchen...
In Kileaks Beispiel wird zwar getestet, aber wenn der Cast nicht funktioniert passiert einfach gar nichts.
Also der User kann klicksen und klicksen, und geht nix - das kanns ja auch nicht sein.
void item_Click(object sender, EventArgs e)
{
var srcItem = (ToolStripItem)sender; //kein test - Exception ist willkommen zum Debuggen
MessageBox.Show(srcItem.Text);
}
Der frühe Apfel fängt den Wurm.
Hallo maxwell86,
im konkreten Fall mag es dir rechen, wenn du srcItem._Text_
kennst, aber im Allgemeinen ist es flexibler srcItem._Tag_
zu benutzen, um einen Menüeintrag mit bestimmten Daten/Informationen zu verknüpfen. Da die Tag
-Property vom Typ Object
ist, muss man beim Zugriff natürlich auch wieder Casten.
herbivore