C# Ändra ForeColor i en listView för ett speciellt Item

Permalänk
Medlem

C# Ändra ForeColor i en listView för ett speciellt Item

Hej!
Jag håller på med en programmeringsuppgift där jag typ ska göra en kalender. Man ska markera ett datum i MonthCalender och sen ska det läggas till i en listView plus lite till. Jag får den biten att funka utan problem, jag har även tänkt att jag ska kunna välja högre prioritet på en händelse, det ska man se genom att den blir rödmarkerad dock så kan jag bara göra att den översta av de som ligger i listViewen blir röd eller blir allihopa röda. Jag tänkte göra det med hjälp av att ta reda på vilket index den sist tillagda händelsen i listView har och sen ändra det dock så kommer det här upp:
InvalidArgument=Value of '2' is not valid for 'index'.

Jag tänkte bara försöka att kopiera in den koden som har med saken att göra ni får säga till om ni behöver mera

ArrayList händelser = new ArrayList(); private void button1_Click(object sender, EventArgs e) { if (txthändelse.Text == "") { MessageBox.Show("Du har inte fyllt i händelsen"); } else { händelser.Add(new Lapp(txthändelse.Text, datum,txttid.Text)); Uppdateralistbox(); } } private void Uppdateralistbox() { int index=händelser.Count-1; listView1.Items.Clear(); foreach (Lapp l in händelser) { listView1.Items.Add(l.ToString()); if (radioButton1.Checked) { listView1.ForeColor = Color.Black; } else if (radioButton2.Checked) { listView1.Items[index].ForeColor = Color.Red; } } }

Vet någon hur, om det nu går, man kan lösa problemet? Jag har googlat men bara blivit mera förvirrad. Jag har även frågat min programmeringslärare men hon visste inte om det gick

Tack på förhand!

Visa signatur

Intel i7 930, Asus P6T Deluxe V2, Corsair Vengance 6GB DDR3, Asus GeForce GTX 560 Ti 448, Corsair TX 750W, Samsung 830 256 GB, Samsung Syncmaster P2350, Logitech G35, Logitech G9, Logitech Z-5500, Playstation 3 Slim

Permalänk
Medlem

Du skulle inte kunna använda någon av de inbyggda eventen för Listview? typ "ItemSelectionChanged" eller nått sånt, sen borde du kunna ta: e.ItemIndex för att få reda på vilket index en item har? Det borde göra att när du väl har valt en item så triggas det här eventet.

Permalänk
Medlem

Först definierar du index.

int index=händelser.Count-1;

Sedan gör du detta i loopen om radioknappen är checkad:

listView1.Items[index].ForeColor = Color.Red;

När du borde gjort så här:

listView1.ForeColor = Color.Black;

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Tack för svaren!
Jag gjorde så här istället och det funkar väl ungefär som jag hade tänkt mig :S

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
ListView.SelectedIndexCollection indexes = this.listView1.SelectedIndices;
foreach (int index in indexes)
{
if (checkBox1.Checked && listView1.Items[index].ForeColor == Color.Red)
{
listView1.Items[index].ForeColor = Color.Black;

this.listView1.SelectedItems.Clear();
}
else if (checkBox2.Checked)
{
listView1.Items[index].ForeColor = Color.Red;
this.listView1.SelectedItems.Clear();
}
}
}

Det du skrev phod gör väl inte att det är just den senaste som blir rödmarkerad utan det gör väl så att alla som finns i listViewn blir röda, eller då svarta i ditt fall eller förstår jag fel.

offtopic: jag vet inte ens hur jag citerar någon

Visa signatur

Intel i7 930, Asus P6T Deluxe V2, Corsair Vengance 6GB DDR3, Asus GeForce GTX 560 Ti 448, Corsair TX 750W, Samsung 830 256 GB, Samsung Syncmaster P2350, Logitech G35, Logitech G9, Logitech Z-5500, Playstation 3 Slim