Name des Objektes erhalten

30/09/2009 - 23:16 von Stefan Theobald | Report spam
Hallo@all,

ich hab vor làngerem mal in ein Programm ein Panel gemacht, auf das für jede
Grafik-Datei in einem Verzeichnis eine Picture-Box gezeichnet wird mit dem
Bild aus dem Verzeichnis als Inhalt.

Jetzt möchte ich das ganze erweitern, dass ich ein Kontext-Menü hinzufüge
und dann z. B. das Bild umbenennen kann.

Mein Problem: Wie komme ich zu dem Namen des Objektes auf das ich rechte
Maustaste mache? Die Picture-Boxen erhalten ja alle unterschiedliche Namen,
aber wie kann ich wàhrend der Ausführung den Namen, auf dem die Maus ist
abrufen und in eine Variable schreiben, um mir daraus den Dateinamen des
Bildes zu splitten?


Gruß
Stefan


Private Sub Filmstreifen_laden()

Dim Dateiname As String = ""

Dim AnzeigePos_horizontal As String = 0
Dim AnzeigePos_vertikal As String = 0

Dim Dateizaehler As Byte = 0

' vorhandene Steuerelemente (Bildboxen / Texte) aus dem Panel löschen!
Panel_kompakt_Artikelvorschau.Controls.Clear()

For Each Dateiname In
System.IO.Directory.GetFiles(Arbeitsverzeichnis, "*.*",
SearchOption.TopDirectoryOnly)

If System.IO.Path.GetExtension(Mid(Dateiname,
InStrRev(Dateiname, "\") + 1)).ToUpper = ".JPG" Or _
System.IO.Path.GetExtension(Mid(Dateiname, InStrRev(Dateiname,
"\") + 1)).ToUpper = ".BMP" Or _
System.IO.Path.GetExtension(Mid(Dateiname, InStrRev(Dateiname,
"\") + 1)).ToUpper = ".PNG" Then

Dateizaehler = Dateizaehler + 1

' Prüfung, dass nur eingestellte Anzahl an Bildern geladen
wird - um Arbeitsspeicher nicht zu überfordern!
If Dateizaehler <=
DomainUpDown_Anzahl_Vorschaubilder_Filmstreifen.Text Then

Dim Bildbox As New PictureBox
Dim Bildbeschriftung As New Label

' Kopie erstellen, da sonst Datei für umbenennen usw.
gelockt ist!
Dim Originalbild As New Bitmap(Dateiname)
Dim TempBitmap As New Bitmap(Originalbild)

Originalbild.Dispose()

Bildbox.Size = New Size(250, 250)
Bildbox.SizeMode = PictureBoxSizeMode.Zoom
Bildbox.BorderStyle = BorderStyle.FixedSingle
Bildbox.Location = New Point(AnzeigePos_horizontal,
AnzeigePos_vertikal + 13)
Bildbox.Image = TempBitmap ' Kopie erstellen, da sonst
Datei für umbenennen usw. gelockt ist!
Bildbox.Name = "Bildbox_" & Mid(Dateiname,
InStrRev(Dateiname, "\") + 1).ToUpper
Panel_kompakt_Artikelvorschau.Controls.Add(Bildbox)

Bildbeschriftung.Size = New Size(250, 13)
Bildbeschriftung.BorderStyle = BorderStyle.None
Bildbeschriftung.Location = New
Point(AnzeigePos_horizontal, AnzeigePos_vertikal)
Bildbeschriftung.Text = Mid(Dateiname,
InStrRev(Dateiname, "\") + 1).ToUpper
Bildbeschriftung.TextAlign = ContentAlignment.MiddleCenter

Panel_kompakt_Artikelvorschau.Controls.Add(Bildbeschriftung)

AnzeigePos_horizontal = AnzeigePos_horizontal + 260

Bildbox.ContextMenuStrip =
ContextMenuStrip_TreeView_Dateienliste

Else

Exit For
Exit Sub

End If

End If

Next

End Sub
 

Lesen sie die antworten

#1 Armin Zingler
30/09/2009 - 23:41 | Warnen spam
Stefan Theobald schrieb:
,

ich hab vor làngerem mal in ein Programm ein Panel gemacht, auf das für jede
Grafik-Datei in einem Verzeichnis eine Picture-Box gezeichnet wird mit dem
Bild aus dem Verzeichnis als Inhalt.

Jetzt möchte ich das ganze erweitern, dass ich ein Kontext-Menü hinzufüge
und dann z. B. das Bild umbenennen kann.

Mein Problem: Wie komme ich zu dem Namen des Objektes auf das ich rechte
Maustaste mache? Die Picture-Boxen erhalten ja alle unterschiedliche Namen,
aber wie kann ich wàhrend der Ausführung den Namen, auf dem die Maus ist
abrufen und in eine Variable schreiben, um mir daraus den Dateinamen des
Bildes zu splitten?


Gruß
Stefan


Private Sub Filmstreifen_laden()

Dim Dateiname As String = ""

Dim AnzeigePos_horizontal As String = 0



Schalte Option Strict ein. Der Code làsst sich hier nicht kompilieren.

Dim AnzeigePos_vertikal As String = 0

Dim Dateizaehler As Byte = 0



Musst du Bytes sparen?


' vorhandene Steuerelemente (Bildboxen / Texte) aus dem Panel löschen!
Panel_kompakt_Artikelvorschau.Controls.Clear()

For Each Dateiname In
System.IO.Directory.GetFiles(Arbeitsverzeichnis, "*.*",
SearchOption.TopDirectoryOnly)

If System.IO.Path.GetExtension(Mid(Dateiname,
InStrRev(Dateiname, "\") + 1)).ToUpper = ".JPG" Or _
System.IO.Path.GetExtension(Mid(Dateiname, InStrRev(Dateiname,
"\") + 1)).ToUpper = ".BMP" Or _
System.IO.Path.GetExtension(Mid(Dateiname, InStrRev(Dateiname,
"\") + 1)).ToUpper = ".PNG" Then



Wieso das Gepfrimel mit "\"? Auch weiter unten im Code. Die Path-Klasse bietet
schöne Methoden dafür an. Das Mid(...) kannst du dir erstens sparen, und die
Erweiterung würde ich nur 1x extrahieren. Mit OrElse sparst du dir außerdem
Ausführungszeit. Also

dim ext = System.IO.Path.GetExtension(dateiname).tolower

if ext = ".jpg" orelse ext = ".bmp" orelse ext = ".png" then


Aber zur Frage: Das Control, zu dem das Contextmenü angezeigt wird, steht in
dessen SourceControl-Eigenschaft. Wenn du zusàtzliche Infos zu einem Control
brauchst, dann kannst du sie im einfachsten Fall in dessen Tag-Eigenschaft
ablegen oder aber eine Klasse von dem Control ableiten und die Infos als
Eigenschaften hinzufügen.


Armin

Ähnliche fragen