Elektronischer Zettelkasten in Visual Basic 2008 Express Edition

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Anfanger_40.

    Elektronischer Zettelkasten in Visual Basic 2008 Express Edition

    Guten Morgen allerseits,

    in VB 5 kann ich wenigstens die ersten Schritte. Was muß ich denn nun tun, um in diesem Gewirr von blauen Fenstern zu einer vernünftigen Oberfläche zu kommen?

    Gruß vom Peter
    Hallo Picoflop,

    danke für den Hinweis.

    Ich habe VB2008 schon vor meiner Zeit hier im Forum auf meinem PC und mich dennoch aus den von mir genannten Gründen für VB 5 entschieden. Diese Entscheidung war aus heutiger Sicht falsch.




    Wenn mich später mal wieder Einer fragen sollte, warum ich VB2008 gewählt habe, hier vorsorglich die Gründe:



    - Ich gehe davon aus, daß im Forum der Anteil an Usern am Größten ist, die mir bei VB2008 helfen können



    - Literatur gibt es ebenfalls in ausreichender Menge, und das sogar kostenlos!



    - Die Ursache (VB5) für gelegentliche Meckerei ist beseitigt




    Die Schleife in VB5 hätte ich aber gern noch zu Ende gebracht, weil es doch sein könnte, daß sich jemand dafür interessiert.




    Gruß vom Peter

    Anfanger_40 schrieb:

    weil es doch sein könnte, daß sich jemand dafür interessiert.

    Nicht wirklich ;)

    Für nen Anfänger ist jedes VB.Net ab (inkl.) 2005 geeignet ... auch wenn irgendwann der Punkt kommt, wo die "coolen" Sachen natürlich VB2010 und das Framework 4.0 erfordern (insb. im Bereich Parallel-Computing und jetzt neuerdings Async/Await)

    "Entwicklerbuch 2008" Meinung eines Einsteigers: Preis/Gewichts-Verhältnis: sehr gut

    ErfinderDesRades schrieb:

    Das vernünftigste wird sein, dieses Buch Lesen

    ErfinderDesRades:"Hier statemente ich mal meine Meinung, daß Einsteiger am besten mit einem guten Buch einsteigen. Ansonsten könnten sie geneigt sein, sich durch viele Fragen in Foren ein Halbwissen zusammenzustoppeln. Das ist auf kurze Sicht befriedigender, weil es das aktuelle Problem evtl. schnell löst. ...
    Microsoft Visual Basic 2005 - Das Entwicklerbuch (<- click it!)
    Scheint mir ein hervorragendes Buch.
    Ich hab nicht alle 1063 Seiten gelesen, tatsächlich nur die 13 Seiten Inhaltsverzeichnis durchgesehen, und was mich interessierte, nachgeguckt. Das Nachgucken war aber in jedem einzelnen Fall erfreulich."
    Der Verfasser schreibt (auszugsweise):Im Gegensatz zum Vorgänger dieses Buches (Anfanger_40: Entwicklerbuch 2005) sind die Anforderungen die dieses Buch (2008) an die Leser stellt, viel geringer geworden und setzt ein paar Level tiefer an. Dennoch wird dieses Buch eher nicht in der Lage zu sein, ein Einsteigerbuch zu ersetzen. Falls Sie sich allerdings noch nie in ihrem Leben mit dem Thema Programmierung auseinandergesetzt haben, so könnte die vorherige Lektüre eines Einsteigerbuchs unter Umständen von Vorteil oder sogar notwendig sein.
    Anfanger_40:
    Nachdem ich nun also auf Eure Empfehlung hin den 5-Pfünder schon im Schrank habe, der für "Profis" sicher ein excellentes Werk ist, erlaube ich mir hier im Forum weiterhin dämliche Fragen zu stellen, um daduch den Vorteil zu genießen, die vorherige Lektüre eines Einsteigerbuches unter Umständen eventuell sogar unnötig zu machen.:)

    Gruß vom Peter

    Anfanger_40 schrieb:

    der für "Profis"

    sicherlich ein Einstiegspunkt aber garantiert nicht ausreichend ist!
    Meine Frau (bzw die IT Abteilung in der sie arbeitet) bestellt regelmäßig Bücher zu Einzelthemen. Die kommen dann selbst schnell mal auf 1.000 Seiten. Das Net Framework ist halt nicht GROSS, sondern GROOOOOOSSSSSSSS.

    Und? Wie weit ist dein Image-Rotator? ;)

    Umstieg von VB5.0 auf 2008Express

    picoflop schrieb:

    Und? Wie weit ist dein Image-Rotator?

    Der Image-Rotator (Schleife) ist mit Hilfe von Neptun in VB5.0 fertig.
    Nun bräuchte ich halt wieder einen schlauen User, der den Code auf VB2008 umschreibt und mir das Drumherum erklärt.
    Hier der VB5.0-Code

    VB.NET-Quellcode

    1. Private Bilder As Integer
    2. Private Sub Form_Activate()
    3. Bilder = 4 'Zahl der Bilder
    4. Me.WindowState = vbMaximized
    5. 'Bilder laden
    6. Set Image1(0).Picture = LoadPicture("19.jpg")
    7. Set Image1(1).Picture = LoadPicture("06.jpg")
    8. Set Image1(2).Picture = LoadPicture("09.jpg")
    9. Set Image1(3).Picture = LoadPicture("02.jpg")
    10. Call Image1_Click(-1) 'Erstes Bild anzeigen
    11. End Sub
    12. Private Sub Image1_Click(Index As Integer)
    13. Dim NewIdx As Integer
    14. NewIdx = (Index + 1) Mod Bilder 'Index des nächsten Image-Controls
    15. Image1(NewIdx).ZOrder vbBringToFront
    16. Image1(NewIdx).Stretch = True
    17. Image1(NewIdx).Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
    18. End Sub


    Vielen Dank im Voraus vom Peter
    Auf jeden Fall brauchst du nicht X Pictureboxen um X Bilder anzuzeigen ... (das gilt übrigens im Prinzip auch schon für deinen VB5 Code!)

    Da jederzeit genau EIN Bild zu sehen ist, braucht man - der Logik folgend - offensichtlich genau EINE Picturebox.

    In VB.Net sähe das ganze ZUM BEISPIEL so aus:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private PicPath As String = "E:\demobilder"
    4. Private PictureList As New List(Of String)
    5. Private index As Integer = 0
    6. Private pb As New PictureBox
    7. Private Sub Form1_Activated(sender As Object, e As System.EventArgs) Handles Me.Activated
    8. ' Alle Dateinamen aus dem Verzeichnis auslesen ... sollten wenn möglich BILDER sein!
    9. If pb.Image Is Nothing Then
    10. PictureList.AddRange(My.Computer.FileSystem.GetFiles(PicPath).ToArray)
    11. LoadImage()
    12. End If
    13. End Sub
    14. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    15. ' Picturebox setzen und EventHandler installieren
    16. Me.Controls.Add(pb)
    17. pb.Dock = DockStyle.Fill
    18. pb.SizeMode = PictureBoxSizeMode.StretchImage
    19. AddHandler pb.Click, AddressOf MyClickHandler
    20. End Sub
    21. Private Sub LoadImage()
    22. pb.Image = Image.FromStream(
    23. New IO.MemoryStream(
    24. My.Computer.FileSystem.ReadAllBytes(
    25. PictureList.Item(index Mod PictureList.Count))))
    26. End Sub
    27. Private Sub MyClickHandler(sender As Object, e As System.EventArgs)
    28. index += 1
    29. LoadImage()
    30. End Sub
    31. End Class


    Das einzige was man braucht, ist eine leere Form, denn die EINZIGE Picturebox wird zur Laufzeit angelegt - kann man natürlich auch im Designer machen, aber hier gehts ja um ein BEISPIEL. Und man braucht einen Ordner mit Bildern ;)


    EDIT: Sorry, Code viel zu lang ;) Habs nochmal gekürzt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „picoflop“ ()

    Danke für deine Mühe!

    Hallo Picoflop,
    ich spiele mich schon einige Zeit mit deinem Code rum, bringe das aber nichts zuwege.
    Nun die zwei grundsätzliche Fragen:
    1. Muß das bei mir überhaupt laufen? Sind bei VB.NET etwa einige Befehle anders als bei VB2008?
    2. Wenn es bei mir auch funktionieren müsste, dann die Frage: Hast du bei dir getestet, ob es läuft.

    Gruß vom Peter
    Tut doch.

    Nur in der 2. Runde gibts Fehler, weil die FileStreams nicht richtig disposed werden. Ich habs mal so gemacht:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private PicPath As String = "C:\Programming\Ressources\TestPictures"
    3. Private PictureList As New List(Of String)
    4. Private index As Integer = 0
    5. WithEvents pb As New PictureBox
    6. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    7. Me.Controls.Add(pb)
    8. pb.Dock = DockStyle.Fill
    9. pb.SizeMode = PictureBoxSizeMode.StretchImage
    10. PictureList.AddRange(My.Computer.FileSystem.GetFiles(PicPath).ToArray)
    11. LoadNextImage()
    12. End Sub
    13. Private Sub LoadNextImage()
    14. pb.ImageLocation = PictureList(index)
    15. index = (index + 1) Mod PictureList.Count
    16. End Sub
    17. Private Sub pb_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pb.Click
    18. LoadNextImage()
    19. End Sub
    20. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    Nur in der 2. Runde gibts Fehler,

    Nein. Zumindest nicht bei mir. 4 Bilder im Verzeichnis, die beliebig of durchklickt werden können.
    ReadAllBytes liefert ein Array als Kopie und mW bleibt dabei das Handle NICHT geöffnet.
    -> Was passiert, wenn du eine Datei löscht, während sie angezeigt ist?
    Mit ReadAllBytes geht das (Fehler natürlich wenn wieder per Filename geöffnet werden soll)

    msdn.microsoft.com/de-de/libra…io.file.readallbytes.aspx
    öffnet diese Methode die Datei, liest den Inhalt der Datei in ein Bytearray ein und schließt die Datei dann.


    @A40:
    VB Net ist der "Oberbegriff" (VB basierend auf dem .Net Framework) - im Gegensatz zu "VB classic" (VB6 und älter)
    Wenn du einen "passenden" Ordner wählst sollte der Code out-of-the-box lauffähig sein.
    Doch - gibt Fehler, aber wg was anneres.

    In meinem Directory befindet sich auch eine versteckte Datei "Thumbs.db", bei der wohl Image.FromStream() scheitert, während Picturebox.ImageLocation großzügig drüber hinwegsieht.

    Man muß also beim Erstellen der PicList solche Gemeinheiten aussieben

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private PicPath As New DirectoryInfo("C:\Programming\Ressources\TestPictures")
    4. Private PictureList As List(Of String)
    5. Private index As Integer = 0
    6. WithEvents pb As New PictureBox
    7. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    8. Me.Controls.Add(pb)
    9. pb.Dock = DockStyle.Fill
    10. pb.SizeMode = PictureBoxSizeMode.StretchImage
    11. Dim files = From fi In PicPath.GetFiles _
    12. Where 0 = (fi.Attributes And FileAttributes.Hidden) Select fi.FullName
    13. PictureList = files.ToList
    14. LoadNextImage()
    15. End Sub
    16. Private Sub LoadNextImage()
    17. pb.ImageLocation = PictureList(index)
    18. index = (index + 1) Mod PictureList.Count
    19. End Sub
    20. Private Sub pb_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pb.Click
    21. LoadNextImage()
    22. End Sub
    23. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    Man muß also beim Erstellen der PicList solche Gemeinheiten aussieben

    Es geht hier um ein EINFACHES Beispiel. Das noch jede Menge Fehlerabfangcode fehlt, dürfte klar sein. Es geht ja erstmal nur darum, darzustellen, wie man GRUNDSÄTZLICH so etwas mit VB verwirklicht. Denn ansonsten würde auch noch fehlen, zb auf "defekte" JPEG zu reagieren etc etc etc

    Fehlerliste im Dateianhang

    Hallo Picoflop,
    deinen Code habe ich in ein Projekt kopiert. Beim Kompilieren wurden allerdings 5 Fehler gemeldet.
    Der Screenshot befindet sich im Dateianhang. Es ist mir nicht gelungen, das Bild hier in den Beitrag einzufügen.
    Weiß jemand wie das geht?

    Gruß vom Peter
    Bilder
    • Fehlerliste.jpg

      61,27 kB, 755×497, 148 mal angesehen

    Anfanger_40 schrieb:

    deinen Code habe ich in ein Projekt kopiert

    Das geht nicht, weil ich ein spezielles Feature von VB 2010 nutze: Implizite Zeilenfortsetzung.

    In VB classic bis VB 2008 muss man schreiben:
    text = _
    "hallo"
    (Mit Unterstrich damit VB merkt, dass es "weiter" geht)
    Ab 2010 kann man den Unterstrich an bestimmten (den meisten) Stellen weglassen. Das vereinfacht die Arbeit und erhöht die Lesbarkeit!

    Du musst also einfach nur mit "ENTF" die umgebrochenen Zeilen wieder zusammenfügen.

    Wo ist ein Zeilenumbruch?

    picoflop schrieb:

    In VB classic bis VB 2008 muss man schreiben:
    text = _
    "hallo"
    (Mit Unterstrich damit VB merkt, dass es "weiter" geht)
    Ab 2010 kann man den Unterstrich an bestimmten (den meisten) Stellen weglassen. Das vereinfacht die Arbeit und erhöht die Lesbarkeit!
    Du musst also einfach nur mit "ENTF" die umgebrochenen Zeilen wieder zusammenfügen.


    Wo soll ich text = _ hinschreiben, da ich keinen Zeilenumbruch sehe.
    Ich habe die Zeilen in der Anlage numeriert. Wo ist ein Umbruch?

    Das ist aber schwer :) :) Gruß vom Peter
    Bilder
    • Fehlerliste_2.jpg

      128,03 kB, 1.024×768, 146 mal angesehen

    Anfanger_40 schrieb:

    Das ist aber schwer

    Dir fällt nicht auf, dass die Einrückungen irgendwie "merkwürdig" aussehen?

    VB.NET-Quellcode

    1. pb.Image = Image.FromStream(
    2. New IO.MemoryStream(
    3. My.Computer.FileSystem.ReadAllBytes(
    4. PictureList.Item(index Mod PictureList.Count))))

    wird zu

    VB.NET-Quellcode

    1. pb.Image = Image.FromStream(New IO.MemoryStream(My.Computer.FileSystem.ReadAllBytes(PictureList.Item(index Mod PictureList.Count))))