Laden...

In einer ListView Zelle zeichnen

Erstellt von Coooder vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.589 Views
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren
In einer ListView Zelle zeichnen

Hallo leute,

ich habe eine ListView die mir User anzeigt ... unter anderem ist auch eine Spalte die anzeigt ob der User eingeloggt ist oder nicht ... aber anstatt dort wie bisher nur true oder false rein zu schreiben würde ich gerne einen kleinen grünen bzw. roten punkt zeichnen.

mein versuch war bisher so:

private void userView_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
		{

			if (e.Header.Tag != null && e.Header.Tag.ToString() == "isLoggedIn") {
				System.Drawing.Graphics graphics = this.CreateGraphics();
				System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(e.Bounds.X, e.Bounds.Y, 50, 50);
				graphics.DrawEllipse(System.Drawing.Pens.Black, rectangle);
			}
		}

das klappt nun jedoch leider nicht ...
Es wird nicht in die Zelle gezeichnet sondern scheinbar hinter der Listview und die position stimmt auch nicht, da der erste kreis schon über der Listview anfängt 😕 Desweiteren verschwinden die Tabellen Header 😦

Irgendwas mach ich doch grundlegend falsch oder? ^^
Wäre toll wenn da einer weiter weiß, vielen Dank!

edit: Das die Header "Verschwinden" liegt anscheinend an der Property OwnerDraw die ich auf true gesetzt hab ... wenn ich das richtig verstanden hab muss die aber auf true gesetzt werden damit gezeichnet werden kann oder?

4.931 Beiträge seit 2008
vor 9 Jahren

Hallo,

benutze statt "this.CreateGraphics" (du willst ja nicht direkt auf der Form zeichnen sondern im ListView) die Eigenschaft DrawListViewSubItemEventArgs.Graphics des übergebenen 2. Parameters.

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 9 Jahren

Hey danke für die Antwort.

Jetzt bin ich schonmal einen Schritt weiter. Die kreise werden an der richtigen Position gezeichnet und auch auf der ListView 😃
Jedoch werden die Header und auch alle anderen Daten gelöscht(?).
Wie kann man sich das verhalten erklären? Werden die überzeichnet oder so?

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Coooder,

wenn du ein ListView selber zeichnen willst, dann musst du auch alles zeichnen, oder DrawListViewItemEventArgs.DrawDefault setzen.

Anscheinend hast du dir noch gar nicht die Doku (und auch kein Tutorial) angeschaut. Mach das bitte, bevor du weitere Fragen stellst.

Ein ListView-Steuerelement wird normalerweise vom Betriebssystem gezeichnet. Wenn Sie die Darstellung von Elementen, Unterelementen und Spaltenheadern von ListView anpassen möchten, legen Sie die OwnerDraw-Eigenschaft auf true fest, und stellen Sie einen Handler für mindestens eins der folgenden Ereignisse bereit: DrawItem, DrawSubItem, DrawColumnHeader. Dies wird als Ownerdrawing bezeichnet. Wenn die View-Eigenschaft auf View.Details festgelegt ist, treten alle drei Ereignisse ein; andernfalls tritt nur das DrawItem-Ereignis ein.

herbivore