ListView Ansicht Tile

  • VB.NET
  • .NET (FX) 4.0

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    ListView Ansicht Tile

    Hallo Gemeinde,
    ich habe ein ListView in Tile Ansicht,
    hier werden einige Akkorden dargestellt (siehe Bild)

    Ich würde gerne das erste Buchstabe in der Größe ändern finde aber nichts womit ich die Font nur von erste Buchstabe ändern kann.

    die Item in Listview werden wie folgt geadded:

    VB.NET-Quellcode

    1. Dim getAllx = x.Descendants("harmony")
    2. For Each getValue In getAllx
    3. getValue.Descendants("root-alter").Value = GetChangedValueOf(getValue.Descendants("root-alter").Value)
    4. getValue.Descendants("degree-alter").Value = GetChangedValueOf(getValue.Descendants("degree-alter").Value)
    5. 'getValue.Descendants("degree-value").Value = GetChangedValueOf(getValue.Descendants("degree-value").Value)
    6. getValue.Element("kind").Attribute("text").Value = GetChangedValueOf(getValue.Element("kind").Attribute("text").Value)
    7. ListView2.Items.Add(getValue.Descendants("root-step").Value & _
    8. getValue.Descendants("root-alter").Value & _
    9. getValue.Element("kind").Attribute("text").Value & _
    10. getValue.Descendants("degree-alter").Value & _
    11. getValue.Descendants("degree-value").Value)
    12. Next

    Die Daten kommen von einer xml Datei.
    Und das Element zum ändern wäre

    VB.NET-Quellcode

    1. getValue.Descendants("root-step").Value


    Kann mir jemand bitte helfen?
    Vielen Dank im Voraus
    Bilder
    • 1.jpg

      13,91 kB, 617×294, 64 mal angesehen
    lg toto

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

    ich habe es so versucht:

    VB.NET-Quellcode

    1. Dim g As Graphics
    2. Dim arialbold As Font = New Font("Arial", 24, FontStyle.Regular)
    3. Dim s As New SizeF
    4. s = g.Graphics.MeasureString(getValue.Descendants("root-step").Value, arialbold)


    aber g.Graphics wird Blau unterstrichen.
    Soll das Ganze in ListView.DrawItem passieren?

    Für ein Tipp wäre ich Dankbar
    Vielen Dank
    lg toto
    @toto Das geht so nicht.
    Wenn, dann müsstest Du das OwnerDraw machen und jede Zelle einzeln selbst malen.
    docs.microsoft.com/de-de/dotne…wnerdraw?view=netcore-3.1
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Um nur das erste Buchstabe in der Größe zu ändern?
    ist mit
    OwnerDraw
    viel aufwand?

    Habe mir dein Link angeschaut. Folgender Tei, glaube ich, ist was mein Text verändern kann:

    VB.NET-Quellcode

    1. Private Sub listView1_DrawItem(ByVal sender As Object, ByVal e As DrawListViewItemEventArgs)
    2. If (e.State And ListViewItemStates.Selected) <> 0 Then
    3. e.Graphics.FillRectangle(Brushes.Maroon, e.Bounds)
    4. e.DrawFocusRectangle()
    5. Else
    6. Using brush As LinearGradientBrush = New LinearGradientBrush(e.Bounds, Color.Orange, Color.Maroon, LinearGradientMode.Horizontal)
    7. e.Graphics.FillRectangle(brush, e.Bounds)
    8. End Using
    9. End If
    10. If listView1.View <> View.Details Then
    11. e.DrawText()
    12. End If
    13. End Sub


    Ich verstehe diesen Code nur Teilweise, wo kommt mein Text hin? In e.DrawText() ?
    Wo kann ich die Font von mein Teilstring ändern?


    lg toto

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

    toto schrieb:

    Um nur das erste Buchstabe in der Größe zu ändern?
    Das Control stellt pro Zelle einen Font bereit.
    Wenn Du 2 Fonts benötigst, geht das nur über OwnerDraw.
    Suche Dir ein paar Beispiele heraus und stell die nach.
    Ich selbst verwende kein ListView.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Soll das Ganze in ListView.DrawItem passieren?

    Ja das soll es.

    Hier wär mal ein Beispiel.
    Spoiler anzeigen

    C#-Quellcode

    1. public class MyFancyTileView : ListView
    2. {
    3. public Font FirstCharFont { get; set; }
    4. public Color FirstCharColor { get; set; }
    5. public MyFancyTileView()
    6. {
    7. View = View.Tile;
    8. OwnerDraw = true;
    9. }
    10. protected override void OnDrawItem(DrawListViewItemEventArgs e)
    11. {
    12. base.OnDrawItem(e);
    13. if (View != View.Tile)
    14. {
    15. e.DrawDefault = true;
    16. return;
    17. }
    18. Size firstCharSize = Size.Round(e.Graphics.MeasureString(e.Item.Text[0].ToString(), FirstCharFont));
    19. Size stringSize = Size.Round(e.Graphics.MeasureString(e.Item.Text.Substring(1, e.Item.Text.Length - 1), Font));
    20. float x = e.Bounds.X;
    21. float y = e.Bounds.Y;
    22. using (SolidBrush br = new SolidBrush(FirstCharColor))
    23. e.Graphics.DrawString(e.Item.Text.Substring(0, 1), FirstCharFont, br, x, y);
    24. x += firstCharSize.Width;
    25. y += firstCharSize.Height - stringSize.Height;
    26. using (SolidBrush br = new SolidBrush(ForeColor))
    27. e.Graphics.DrawString(e.Item.Text.Substring(1, e.Item.Text.Length-1), Font, br, x, y);
    28. }
    29. }

    hallo Fakiz,
    danke für die Classe.

    Kann man für Label, TextBox usw. auch verwenden?

    Wenn ich anstatt Inherits ListView....Inherits Label schreibe

    Wie wird die Methode "FirstCharFont" aufgerufen?
    lg toto

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

    toto schrieb:

    Kann man für Label, TextBox usw. auch verwenden?
    Kannst Du für alles verwenden, was OwnerDraw anbietet, also nicht Label, TextBox usw.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @toto Das macht das System bzw. das Framework.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schon,
    aber wenn ich in die Eigenschaften der Listview in "FirstCharFont" einen
    Wert eingebe, dann verschwinden die erste Buchstaben
    Bilder
    • 1.jpg

      2,68 kB, 250×110, 195 mal angesehen
    • 2.jpg

      1,1 kB, 89×68, 199 mal angesehen
    lg toto
    @toto OK.
    Was genau muss ich tun, damit ich Deinen Effekt reproduzieren kann?
    Was soll angezeigt werden?
    Was wird angezeigt?
    Mach ein ganz kurzes Testprogramm ohne Datei-Input, schreibe die Testdaten einfach in das Form_Load.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich Möchte mit der Classe von Fakiz
    der erste buchstabe der Akkorde spricht "root-step"
    miz der selbe Font nur größer Bsp. 24

    Im Anhang ein testprojekt
    Dateien
    lg toto
    @toto Und wo in Deinem Projekt wird Ownerdraw etwas geschrieben?
    Ich nehme mal an, wenn Du den ersten Buchstaben fett malst, malst Du den Text ab dem zweiten Buchstaben an genau diese Position.
    Du musst mit Graphics.MeasureString() die Breite des 1. Buchstabens berechnen und den anderen Text um dessen Breite nach rechts schieben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    toto schrieb:

    OwnerDraw
    Dazu musst Du ein DrawItem implementieren.
    ====
    Wenn mal was nicht so klappt, ist es besser, Du fragst zunächst Microsoft und nicht das Forum:
    MSDN Listview FirstCharFont
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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