Visual Basic 2008 Code Problem

Hallo,
Ich habe ein Problem mit meinem Code in Visual Studio 2008.

Das ist die Problemstelle:
Form1.NotifyIcon1.Icon = OpenFileDialog1.FileName

OpenFileDialog1.FileName ist blau unterstrichen und der Error lautet: „Value of type ‚String‘ cannot be converted to ‚System.Drawing.Icon‘“

Was kann ich dagegen tun?

-Computer Mensch

Hallo, Computer-Mensch,

Das Problem ist einfach, dass die Eigenschaft „Icon“ eben keinen String erwartet, sondern tatsächlich ein Icon.

Du musst also anhand des Dateinamens erstmal ein Objekt der Klasse „System.Drawing.Icon“ erstellen und dieses dann der Eigenschaft zuweisen.

Ich kann jetzt nicht auf die Schnelle die .Net-Dokumentation nach der exakten Methode durchsuchen, aber so ungefähr sollte das dann aussehen:

Form1.NotifyIcon1.Icon = New System.Drawing.Icon(OpenFileDialog1.Filename)

Mfg,
Steffen

Danke! Es funktioniert!

Hi,

die Fehlermeldung sagt in diesem Fall doch alles.
Ich habe für dich mal in ide Hilfe geschaut.
So geht´s:
notifyIcon1.Icon = New Icon(„appicon.ico“)

-> in deinem Fall:

Form1.NotifyIcon1.Icon = New Icon( OpenFileDialog1.FileName)

Grüße
Andreas

Hallo, Computer Mensch,

Du kannst den Dateinamen nicht direkt verwenden. sondern musst den OpenFileDialog getrennt ausführen. Der OpenFileDialog liefert den Dateinamen als String.

Die richtige Übergabe könnte so erfolgen, wie ich es im Folgenden darstelle. Ich hoffe, dass hilft Dir. Wäre nett, wenn Du mir mal mitteilst, ob es geklappt hat.

Viel Erfolg!

Freundliche Grüße :smile:

P.S.: Icon-Bilder sollten die Größe 17x17 Einheiten nicht überschreiten.

Der Name von Pfad+Bilddatei wird im ganzen Formular benötigt. Direkt unterhalb der Klassendefinition muss deshalb die Definition erfolgen

Dim myBilddateiname As String

An der Stelle, wo Du das Icon brauchst, kommt dann:

Dim OpenFileDialog1 As New OpenFileDialog

'Solange der OpenFileDialog dauert:
With OpenFileDialog1
'Parameter für OpenFileDialog festlegen

'1. legt fest, dass Fehlermeldung angezeigt wird,
’ wenn Benutzer Name einer nicht vorhandenen Datei angibt
OpenFileDialog1.CheckFileExists = True

'2. Typauswahl festlegen: 1. Angabe = Standard
OpenFileDialog1.Filter = „JPeg-Bilder (*.jpg)|*.jpg|Windows Bitmap (*.bmp)|*.bmp|Alle Dateien (*.*)|*.*“

Dim locDr As DialogResult
'Dialog des Open-File-Dialogs auswerten (Öffnen oder Abbrechen gewählt?)
locDr = locOfd.ShowDialog()

If locDr = Windows.Forms.DialogResult.Cancel Then
'Abbrechen gewählt
Return
End If

'Übergabe des Dateinamens+Pfad an Variable myBilddateiname,
'damit er dem ganzen formular zur Verfügung steht
myBilddateiname = OpenFileDialog1.FileName

'Anzeige des Icon durch eine eigene Funktion (Damit Du auch an anderen Stellen, wo ein Image
'benötigt wird, dieses laden kannst)
Form1.NotifyIcon1.Icon = GetCoverImage(myBilddateiname)
End With

Jetzt musst Du noch die Funktion erfassen (i. d. R. mit einer Funktionsbeschreibung für IntelliSense. Genau wie bei eingebauten Methoden wird IntelliSense zwar aktiv – doch die sonst so hilfreichen Erklärungen kommen automatisch natürlich nicht.)
'Bilddatei aus einer Datei in ein Image-Objekt laden
'Hier könnten Fehler auftreten --> behandeln

‚‘’
‚‘’ Bild aus Datei laden, wenn es vorhanden ist, und Bild als Image
‚‘’ zurückliefern oder Nothing
‚‘’
‚‘’ Name der Bilddatei
‚‘’ Image-Obj. der angegebenen Datei oder Nothing
‚‘’ Erstellt am 10.09.2010 von Hochzeitsvorbereiterin
Function GetCoverImage(ByVal CoverbildDateiname As String) As Image
Dim locImage As Image
If CoverbildDateiname IsNot Nothing AndAlso CoverbildDateiname „“ Then
Try
'ohne Fehler
locImage = Image.FromFile(CoverbildDateiname)
Return locImage

Catch ex As Exception
'nach Fehler; ggf. Fehlermeldung organisieren
End Try

End If
Return Nothing
End Function

lange kein VB mehr benutzt…

Vermutlich musst Du das Icon über eine andere Funktion laden. Dieser Funktion gibst Du dann den Dateinamen aus OpenFileDialog1.
Gibt es „Form1.NotifyIcon.loadIcon()“? Dann würde das so aussehen: „Form1.NotifyIcon.loadIcon(OpenFileDialog1.FileName)“
Gibts „System.Drawing.loadPicture()“? Dann könnte es so aussehen: „Form1.NotifyIcon.icon = System.Drawing.loadPicture(OpenFileDialog1.FileName)“

Schau Dir einfach mal an was die Klassen so für Methoden anbieten. Und achte auf die zurückgelieferten Typen. Lies noch mal nach wie VB Typen umwandelt.

Viel Glück

Hi Computer_Mensch, versuch mal folgenden Code:

With OpenFileDialog1
.Filter = „ICON (*.ico)|*.ico“
.FilterIndex = 1
.InitialDirectory = „C:“
.Title = „Bitte Icon auswählen“
.ShowDialog()
If .ShowDialog() = DialogResult.Cancel Then End
End With

NotifyIcon1.Icon = New Icon(OpenFileDialog1.FileName)

Halo Computer Mensch,

Sorry, dabei kann ich dir nicht helfen weil ich noch VB6.0 arbeite. Versuche es mal hier:

http://www.activevb.de/tipps/vbnettipps/tipp0110.html

Wolfgang

was willst du überhaupt erreichen ?

Hallo Computer Mensch,

leider kann ich Dir keine direkte Antwort darauf geben. Ich habe mit VB6 programmiert und mit Visual Studio keine Erfahrung. Wenn ich mir allerdings Deine Codezeile anschaue, so versuchst Du einen String (nämlich) den Filenamen aus dem OpenFileDialog als Grafik zu konvertieren und das geht nicht. Ich könnte mir vorstellen, dass die richtige Anweisung wie folgt aussehen könnte;

Form1.NotifyIcon1.Icon = Bilddatei.ico

aus dem Open FileDialog entsteht in der Regel ein String wie C:…\Bilddatei.ico

Sorry, mehr kann ich dazu leider nicht sagen