welche Komponente könnte das sein bzw. wo bekomme ich diese her?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    welche Komponente könnte das sein bzw. wo bekomme ich diese her?

    Guten Abend !

    Vorab: Sollte ich in der falschen Kategorie sein bitte in die richtige Kategorie moven.

    Ich suche jetzt schon seit längerer Zeit nach einer besonderen Komponente.
    Sie soll ein Bild und daneben mehrzeiligen Text ausgeben. Allerdings in einer Art "Listbox.
    Ich habe diese Komponente schon in mehreren Programmen gesehen (Outlook etc.)
    Anbei findet ihr einen Screenshot der gesuchten Komponente.

    Vielleicht fällt euch ja was ein ;D

    MfG Alex

    ~blaze~: Thema verschoben
    Bilder
    • screen.png

      17,77 kB, 344×359, 117 mal angesehen

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

    @Phinix2000 Willkommen im Forum. :thumbup:
    Diese Komponente wird des öfteren eingesetzt. Was es für eine ist, weiß ich allerdings nicht.
    Wenn ich die bauen müsste, würde ich ein UserControl bauen mit einer PictureBox und ner RichTextBox und beliebig viele davon in ein FlowLayoutPanel packen.
    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!
    Hi
    handelt es sich um eine WPF oder Windows Forms-Anwendung?
    RodFromGermanys Lösung ist vielleicht etwas unelegant. In WPF würde man auf ItemTemplate zurückgreifen und dort das Aussehen der einzelnen Elemente bestimmen, für Windows Forms Anwendungen würde man das Zeichnen selbst übernehmen, indem die Eigenschaft DrawMode auf OwnerDrawVariable (und zusätzlich das MeasureItem-Ereignis verarbeitet wird) bzw. OwnerDrawFixed gesetzt wird (was MeasureItem überflüssig macht. Stattdessen wird die ItemHeight-Eigenschaft festgelegt).

    Verwende übrigens unbedingt Datenbindung. Ich weiß, dass das des öfteren Einarbeitung kostet, auch was DrawItem, usw. angeht, sofern du bei Windows Forms unterwegs bist, aber es lohnt sich unterm Strich wirklich.
    Bei DrawItem wird dir ein Graphics-Objekt angeboten, in das du über Graphics.DrawString, bzw. TextRenderer.DrawText zeichnen und über Graphics.MeasureString, bzw. TextRenderer.MeasureString die Größe der Darstellung von Strings messen kannst. Es gibt einen kleinen Unterschied zwischen den beiden Methoden, vielleicht einfach mal ausprobieren. Der TextRenderer zeichnet so, wie Button, etc. beschriftet sind und setzt auch, sofern man's nicht über die Flags konfiguriert einen Unterstrich, wenn es auf ein &-Zeichen stößt (z.B. &Cancel wird zu C[/b]ancel), die Graphics-Darstellung sieht anders aus (zumindest ist das mein letzter Stand).

    In WPF hast du das Problem mit dem manuellen Layout nicht, wenn du's geschickt löst. Du würdest einfach Layoutelemente verwenden und dort eben Labels platzieren oder dergleichen.

    Viele Grüße
    ~blaze~

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

    hmmm...

    Würde sich das nicht theoretisch mit nem DataGridView lösen lassen?

    Hab da was in unserer WaWi gefunden (siehe Screen)
    Wenn ich da die Rahmen ausblenden würde sollte das doch eig. hinhauen ne?

    Die Frage is nur.... wie mache ich das, dass in einer "row" mehrere Zeilen und somit verschiedene Daten ausgegeben werden können!?
    Bilder
    • grid.png

      2,62 kB, 249×94, 208 mal angesehen
    Es wäre schön, wenn du sagen könnte, ob es WPF oder Windows Forms ist, dann könnte ich es verschieben. Feststellen kannst du das bspw. anhand der Dateien in deinem Projekt. Hast du .xaml-Dateien? Bzw. erbt dein Fenster von (System.Windows.Forms.)Form?
    Der Aufwand, wenn du ein DataGridView verwendest, ist für Windows Forms erheblich höher.

    Viele Grüße
    ~blaze~
    Alles klar, hab's mal verschoben. Die Vorgehensweise ist die folgende:

    1. Füge eine ListBox hinzu
    2. Stelle die Eigenschaft der ListBox DrawMode auf OwnerDrawVariable
    3. Abonniere die Ereignisse DrawItem und MeasureItem
    4. Führe entsprechende Schritte für DrawItem (zeichne dort das Element, d.h. das Bild, die Schriftzüge, etc.) und MeasureItem (um die Größe eines zu zeichnenden Elements zu bestimmen) aus

    Schritt 4 arbeitet vor allem auf den durch den Parameter e bereitgestellten Eigenschaften. Es empfiehlt sich stark, Klassen dazu zu verwenden, um Elemente zu modellieren, d.h. du erstellst dir eine Liste vom Typ System.ComponentModel.BindingList(Of T), in der du die Elemente verwaltest, die in der ListBox angezeigt werden. Falls dir diese Vorgehensweise nicht bekannt ist, sag' bescheid.

    Viele Grüße
    ~blaze~