2016-06-30 8 views
-1

Kann mir jemand irgendwelche Vorschläge machen, wie ich ein Listenfeld mit Symbolen erstellen oder auf ein Tutorial zeigen könnte?C# Erstellen einer ListBox mit Symbolen

Hier ist mein Programm: GUI

Ich verwende eine Abfrage Freunde E-Mail und den Namen aus einer Datenbank in eine Listenfeld Datenquelle zu laden.

Code:

public void LoadUserData(ListBox FriendsLb) 
{ 
    var query = from o in Globals.DB.Friends 
       where o.UserEmail == Properties.Settings.Default.Email 
       select new 
       { 
        FirstName = o.FirstName, 
        LastName = o.LastName, 
        Email = o.Email, 
        Display = string.Format("{0} {1} - ({2})", o.FirstName, o.LastName, o.Email) 
       }; 
    FriendsLb.DataSource = query.ToList(); 
    FriendsLb.ClearSelected(); 
} 

Ich mag es, wie laden: [Avatar] Firstname, LastName - (Email)

+0

Benutze stattdessen ein Listview! – TaW

+0

Danke für Ihren Kommentar! Leider unterstützt ListView keine Datenquellen oder Anzeige- und Wertelemente! :( – richardj97

+0

Das ist richtig. Haben Sie in Betracht gezogen Owner-Zeichnung der ListBox? – TaW

Antwort

2

Hier ist ein einfaches Beispiel von ist ownerdrawing die ListBox.

private void FriendsLb_DrawItem(object sender, DrawItemEventArgs e) 
{ 

    Bitmap bmp = someBitmap; 
    bmp.SetResolution(e.Graphics.DpiX, e.Graphics.DpiY); 
    e.DrawBackground(); 
    e.Graphics.DrawString(yourItemText, someFont, Brushes.Black, 
          bmp.Width + 5, e.Bounds.Y); // adapt to you liking 

    if (bmp != null) 
    { 
     FriendsLb.ItemHeight = bmp.Height; // or a little more.. 
     e.Graphics.DrawImage(bmp, 0, e.Bounds.Y); 
    } 

} 

Stellen Sie den ListBox.DrawMode-OnwerDrawFixed.

Die ListBox.ItemHeight könnte tatsächlich (und sollte) im Voraus festgelegt werden. Beachten Sie, dass nur eine Größe für alle Items zulässig ist!

Natürlich müssen Sie die richtigen Daten ermitteln. Da die Items an Ihre DataSource gebunden sind, sollte die e.Index auf die richtige Zeile zeigen. Sie sollten also in der Lage sein, den Namen oder die Zeichenkette zu ziehen; Sie müssen auch auf das Bild kommen; Ich sehe nicht, dass Sie es lesen, also liegt es an Ihnen, dieses Problem zu lösen.

Wenn sie in einem ImageList sitzen, können Sie leicht den richtigen herausziehen, wenn die Indizes synchron sind; oder Sie können die Keys Eigenschaft verwenden. Mit Imagelist ist die Größe aller Bilder sowieso festgelegt, so dass Sie die ItemHeight im Voraus festlegen können.

Beachten Sie, dass ich die dpi-Auflösung der Bitmap die des aktuellen Bildschirms festlegen.

Anstelle des Standard-DrawBackground() Anruf Sie mit schöner Farbe zu einem FillRectangle wollen können, abhängig von den e.State ..

+0

Wie bekommen Sie das Bild obwohl? – richardj97

+0

Nun, du hast geschrieben, dass sie in einer Bildliste sind, oder? Je nachdem, wie du sie hinzugefügt hast, könnte das gut genug sein: 'Bitmap bmp = (Bitmap) deinImageList.Images [e.Index];' – TaW

+0

Sorry, noch nie so etwas zuvor gemacht ... Wie würde ich ein Rechteck um den Avatar erstellen und string als müsste ich auf die Freunde klicken? Danke – richardj97