Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
In einer ListView Zelle zeichnen
Coooder
myCSharp.de - Member



Dabei seit:
Beiträge: 186

Themenstarter:

In einer ListView Zelle zeichnen

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Coooder am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4026

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Coooder
myCSharp.de - Member



Dabei seit:
Beiträge: 186

Themenstarter:

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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.
Zitat von MSDN: ListView.OwnerDraw-Eigenschaft
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
private Nachricht | Beiträge des Benutzers