DrawString

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    Hallo liebe Gemeinde,

    Habe wieder mal schwierigkeiten mit ein Drawsting,
    mit diesem code:

    VB.NET-Quellcode

    1. Dim Item As New ListViewItem
    2. For Each Item In ListView1.Items
    3. If node.Attributes("E").Value > 0 Then
    4. g.FillEllipse(brush, s1 - 7, CInt(node.Attributes("E").Value * 40) - 25, elypWidth, elypHeight)
    5. g.DrawEllipse((pen1), s1 - 7, CInt(node.Attributes("E").Value * 40) - 25, elypWidth, elypHeight)
    6. g.DrawString(Item.SubItems(9).Text, fnt, Brushes.Black, s1 - 1, (node.Attributes("E").Value * 40) - 23, StringFormat.GenericTypographic)
    7. End If


    zeichne ich eine ellipse,
    und mit dem DrawString soll auf diese ellipse ein text geschrieben werden.
    Ich bekomme, nach viele Versuch immer nur den letzten iten geschreiben und nicht der von Subitem(9).

    Hat evtll. jemend ein Tipp wo ich fehler mache??

    lg

    toto
    lg toto
    Danke Solaris für dein Beitrag,
    Blaibt leider unverändert.

    Ist evtll. die Schleife falsch aufgebaut??
    evtll. interessant,
    mir ist aufgefallen das beim 1. item der text erscheint und ganz schnell wieder verschindet.
    Kann jemand damit was anfangen, ich weiß nicht weiter.
    lg
    toto

    Edit by der_Kurt:
    keine Doppelposts - es gibt eine "Bearbeiten"-Funktion.
    * Beiträge zusammengefügt *
    lg toto

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

    HAllo Solaris,
    sorry aber gestern musste ich weg,

    Natürlich, der String wird ja immer überschrieben weil du die Position nicht änderst.


    Stimmt nicht, im listview sind 10 String, durch scrollen sollte immer der nächste string angezeigt werden.

    Und mit meiner Methode, wird nur der letzte angezeigt.

    Ich erkläre dir oder euch mein Vorhaben:

    GitarrenBrett mit GDI gezeichnet,
    Akkorde (Ellipse) mit GDI gezeichnet, (Werte sind im listview/DGW aufgelistet)
    Beim Start und Button click, wird der erste Akkord dargestellt,

    Ich versuche auf die Ellipse auch den Name des Akkords darzustellen damit anfänger es nicht so schwer haben.

    lg
    toto
    lg toto
    ich weiß nicht ob das weiterhilft aber wenn man die items einer listbox selbstzeichnet kann es zu ähnlichen fehlern kommen. du zeichnest das ja in irgendeinem paint-event oder? dann sollte es die variable e.bounds geben.

    wenn es diese oder eine ähnliche gibt versuch mal das...
    s1 - 7, CInt(node.Attributes("E").Value * 40) - 25

    durch das zu ersetzten:
    e.bounds.left + s1 - 7, e.bounds.up +CInt(node.Attributes("E").Value * 40) - 25
    Hallo FreakJNS,

    Nein, leider gibt e.bounds nicht.
    Habe ersetzt, "e" unterstriechen, wurde nicht deklariert.
    Das ganz gaschieht so:

    VB.NET-Quellcode

    1. Public Sub PaintChord()
    2. Dim g As Graphics = Panel1.CreateGraphics
    3. Dim obGraphics As Graphics = Panel1.CreateGraphics
    4. g.Clear(Panel1.BackColor)
    5. Dim s1, s2, s3, s4, s5, s6 As Integer
    6. Dim elypHeight As Integer = 23
    7. Dim elypWidth As Integer = 23
    8. '[Declare strings]
    9. s1 = 7 : s2 = 37 : s3 = 67 : s4 = 97 : s5 = 127 : s6 = 157
    10. '[Display Chords]
    11. Dim node As XmlNode = doc.ChildNodes(0).ChildNodes(lstChords.SelectedIndex)
    12. Dim fnt As New Font("Arial", 13, FontStyle.Bold, GraphicsUnit.Pixel)
    13. Dim Item As New ListViewItem
    14. For Each Item In ListView1.Items
    15. If node.Attributes("E").Value > 0 Then
    16. g.FillEllipse(brush, s1 - 7, CInt(node.Attributes("E").Value * 40) - 25, elypWidth, elypHeight)
    17. g.DrawString(Item.SubItems(9).Text.ToString, fnt, Brushes.White, s1 - 1, (node.Attributes("E").Value * 40) - 23, StringFormat.GenericTypographic)
    18. End If
    19. Private Sub lstChords_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstChords.SelectedIndexChanged
    20. PaintChord()
    21. End Sub


    lg
    toto
    lg toto
    ich dachte du zeichnest in einem paint oder draw event. da könnte es e.bounds geben (gibts zumindest bei der listbox im drawitem event)
    soweit ich sehe verändert sich die position des ganzen nur wenn node.Attributes("E").Value sich verändert. vllt verbirgt sich hier iwo der fehler?
    Wenn du 10 Strings in deinem ListviewItem hast, dann ist Item.Subitems(9) das letzte Item.
    Das erste ist Item.Subitems(0)..

    Das vorletzte Item wäre (8).

    Vll verstehe ich deine Frage auch völlig falsch.. am besten du erklärst als erstes nochmal verständlich, was dein Ziel ist.
    Das ist meine Signatur und sie wird wunderbar sein!
    @ FreakJNS
    GitarrenBrett mit GDI gezeichnet,
    Akkorde (Ellipse) mit GDI gezeichnet, (Werte sind im listview/DGW aufgelistet)
    Beim Start und Button click, wird der erste Akkord dargestellt,


    Ja die Position verändert sich vom GitarrenBund 1 bis 13

    @Mono
    in ListView sind 10 Item:
    .....9....
    .....a e d e d c
    .....c b d e d f
    usw.

    Und so ist das ganze aufgebaut, zu Ergänzug auf den oberen Post:

    VB.NET-Quellcode

    1. Dim Item As New ListViewItem
    2. For Each Item In ListView1.Items
    3. If node.Attributes("E").Value > 0 Then
    4. g.FillEllipse(brush, s1 - 7, CInt(node.Attributes("E").Value * 40) - 25, elypWidth, elypHeight)
    5. g.DrawString(Item.SubItems(9).Text.ToString, fnt, Brushes.White, s1 - 1, (node.Attributes("E").Value * 40) - 23, StringFormat.GenericTypographic)
    6. End If
    7. If node.Attributes("A").Value > 0 Then
    8. g.FillEllipse(brush, s2 - 7, CInt(node.Attributes("A").Value * 40) - 25, elypWidth, elypHeight)
    9. g.DrawString(Item.SubItems(10).Text.ToString, fnt, Brushes.White, s2 - 1, (node.Attributes("A").Value * 40) - 23, StringFormat.GenericTypographic)
    10. End If
    11. If node.Attributes("D").Value > 0 Then
    12. g.FillEllipse(brush, s3 - 7, CInt(node.Attributes("D").Value * 40) - 25, elypWidth, elypHeight)
    13. g.DrawString(Item.SubItems(11).Text.ToString, fnt, Brushes.White, s3 - 1, (node.Attributes("D").Value * 40) - 23, StringFormat.GenericTypographic)
    14. End If
    15. If node.Attributes("g").Value > 0 Then
    16. g.FillEllipse(brush, s4 - 7, CInt(node.Attributes("g").Value * 40) - 25, elypWidth, elypHeight)
    17. g.DrawString(Item.SubItems(12).Text.ToString, fnt, Brushes.White, s4 - 1, (node.Attributes("g").Value * 40) - 23, StringFormat.GenericTypographic)
    18. End If
    19. If node.Attributes("b").Value > 0 Then
    20. g.FillEllipse(brush, s5 - 7, CInt(node.Attributes("b").Value * 40) - 25, elypWidth, elypHeight)
    21. g.DrawString(Item.SubItems(13).Text.ToString, fnt, Brushes.White, s5 - 1, (node.Attributes("b").Value * 40) - 23, StringFormat.GenericTypographic)
    22. End If
    23. If node.Attributes("e").Value > 0 Then
    24. g.FillEllipse(brush, s6 - 7, CInt(node.Attributes("e").Value * 40) - 25, elypWidth, elypHeight)
    25. g.DrawString(Item.SubItems(14).Text.ToString, fnt, Brushes.White, s6 - 1, (node.Attributes("e").Value * 40) - 23, StringFormat.GenericTypographic)
    26. End If
    27. Next
    28. End Sub


    mit diesem Code sind die Buchstaben auch zu sehen, aber es werden nur die vom letzten Item, (Item = eine Zeile in LV)
    lg toto

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

    Alle Items werden doch so an der gleichen Stelle gezeichnet.
    Daher wird das letzte Item auch nur angezeigt, da die vorherigen immer überschrieben werden..

    VB.NET-Quellcode

    1. ' BSp der Ellipse:
    2. g.FillEllipse(brush, s1 - 7, CInt(node.Attributes("E").Value * 40) - 25, elypWidth, elypHeight)
    3. s1-7 => Konstant für alle Items
    4. CInt(node.Attributes("E").Value * 40) - 25 => Konstant für alle Items.
    5. Breite und Höhe sind auch konstant...
    Das ist meine Signatur und sie wird wunderbar sein!
    wOw.
    Du hast Recht, habe eine Ellipse Weg, und darunter ist eine Buchstabensalat zu sehen.

    Wenn nicht zu viel gefragt ist, wo soll die änderung sein?

    Habe einige Parameter geändert aber die Buchstaben sind immer noch übereinander.

    Besser gefragt;
    Wenn pro Item, ein Subitem angesprochen werden soll, warum sind alle an der gleiche Stelle?
    Warum wird nicht nur das einen angezeigt?

    s1-7 => Konstant für alle Items

    Klar, vom linken Rand(entspricht X) vom Griffbrett

    CInt(node.Attributes("E").Value * 40) - 25 => Konstant für alle Items.

    Klar, vom oberen Rand(entspricht Y) vom Griffbrett
    lg toto

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „toto“ ()

    ja ich weiß das du es schon mal erwähnt hast.

    Was ich nicht verstehe ist das mit diesen Parameter die Ellipsen sind da zu sehen wie die Koordinaten sind.
    Durch scrollen im LV sehe ich wie die Akkorden von oben bis unten nacheinander angezeigt werden.

    Warum funzt mit einen String nicht? wenn die gleiche Koordinate sind, sollten sie auch einzeln mitden Ellipse mitgehen, Oder sehe ich das falsch?

    Nur für mich zum versthen.


    habe alles auskommentiret bis auf eins,
    dort sind alle string der 10 Zeilen, übereinander zu sehen

    Ich glaube ich packe das ganz in eine XML.

    Danke an alle
    lg
    toto
    lg toto

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