[VB] Probleme mit Grafik in Zwischenablage

Sebastian1990

Cadet 2nd Year
Registriert
Okt. 2007
Beiträge
31
Guten Abend CB,


Programmiere gerade mit VB genauer gesagt VB.Net.

Damit das Programm Grafiken in die Zwischenablage kopiert, habe ich folgenden Code benutzt:
Code:
    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Grafik in die Zwischenablage einfügen
        Dim Picture As Drawing.Image = Drawing.Image.FromFile("C:\bild.bmp")
        Call Windows.Forms.Clipboard.SetDataObject(Picture)

    End Sub
End Class

Leider kann ich den Ort der Datei nicht als Variable eingeben. Besser gesagt ich weiß nicht wie. Wäre die Bitmap Datei nun auf dem root von D würde er sie nicht finden. Auf meinem Server kann ich sie auch nicht ablegen, weil keine URLs unterstützt werden :(

Könnt ihr mir helfen?


Sebastian
 
Kannst Du bitte konkretisieren, was für ein Fehler auftritt, wenn Du anstelle des Strings "C:\bild.bmp" eine Variable verwendest.

Du musst allerdings bei solchen Pfadangaben aufpassen: \b ist eine Escape-Sequenz, genau so wie \n oder \t. Um einen Backslash in so einem String zu verwenden, musst Du ihn mit einem weiteren Backslash maskieren:

"C:\\bild.bmp"

Unter C# kann man vor den String ein @-Zeichen stellen, um die Auflösung von Escape-Sequenzen zu verhindern. Keine Ahnung, ob das auch in VB funktioniert:

@"C:\bild.bmp"

Ansonsten müsste doch auch so etwas funktionieren:
Code:
Dim file As String
file = "C:\\bild.bmp"
Dim pic As Drawing.Image = Drawing.Image.FromFile(file)
 
Danke für die Antwort. Wie gesagt, wenn es die Datei nicht gibt, kommt folgender Fehler:

Unbenannta1f1d.jpg


Code:
Dim file As String
file = "C:\\bild.bmp"
Dim pic As Drawing.Image = Drawing.Image.FromFile(file)
Das wäre doch ähnliches wie oben in meinem Code.


Habe schon versucht das er jetzt Grafiken aus einer PictureBox kopiert. Mit folgendem Code

Code:
    Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Clipboard.SetData(PictureBox1 = PictureBox1.Picture, 2)
    End Sub
Jedoch folgt folgende Fehlermeldung:
Fehler 2 Der Wert vom Typ "System.Windows.Forms.PictureBox" kann nicht zu "String" konvertiert werden. C:\Users\root\Documents\Visual Studio 2005\Projects\Zwischenablage\Zwischenablage\Form1.vb 113 27 Zwischenablage



Sebastian
 
Ist doch klar, dass eine Fehlermeldung kommt, wenn die Grafik nicht vorhanden ist.

Bau mal um das ganze nen try...catch block.
Findest du unter Rechtsklick->Codeausschnitt einfügen.

Da kannst du dann bei catch z.B. rein schreiben:
Code:
msgbox("Bilddatei nicht gefunden")

oder

Code:
catch ex as exception
msgbox(ex.tostring)
end try

Du kannst sonst auch den Speicherort über eine Textbox einlesen, so kannst du jedesmal angeben wo das Bild liegt. Ist es das was du suchst?

Code:
dim file as string
file = TestBox1.text
 
Zuletzt bearbeitet:
Gibt es nicht die Möglichkeit einfach ein Bild aus einer PictureBox in die Zwischenablage zu kopieren? Das wäre die wohl einfachste Möglichkeit...

@Jägermeister_84: wie meinst du das mit dem Catch? Könntest du den kompletten Code für diese Aktion posten?


Sebastian
 
Zuletzt bearbeitet:
Du musst mal mehr in die MSDN Hilfe gucken. Findest du unter "Hilfe"->"Suchen"

also das Bild aus einer Picturebox bekommst du so:

Code:
        Try
            Clipboard.SetDataObject(PictureBox1.Image)
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

Da siehst du im übrigen das Try...Catch! Dies kannst du selber ganz einfach erzeugen lassen indem du Try schreibst und dann Enter drückst, dann kommt automatisch die "Catch" und die "End Try" Zeile.
Zweichen Try und Catch kommt der Code den du programmierst.
Das Catch wird immer aufgerufen, wenn ein Fehler auftritt. Da kannst du dann so eine Msgbox wie oben rein machen, welche dir die Fehlerbeschreibung ausgibt, oder du machst eine mit eigenem Text.
Du solltest das try...catch ruhig öfter benutzen, da du so Fehler abfängst und Abstürze verhinderst.

Edit:
Wieso hast du ganz oben in deinem ersten Quelltext "call" vor die Anweisung geschrieben? Das musst du nicht, das funktioniert auch so. Wozu sollte das überhaupt dienen? hab ich noch nie gesehen.
 
Zuletzt bearbeitet:
okay, danke dir. das problem ist nun gelöst.
dachte nicht das es so leicht geht :)


Sebastian
 
bei VB ist das meiste leicht! man muss nur wissen wie man es machen mussen :D
 
Zurück
Oben