14. januar 2003 - 22:41Der er
2 kommentarer og 1 løsning
ItemChecked eventen
Jeg har to checkedlistbox'es på en form, hvor den ene indeholder en liste over borde, og den anden tilhørende stole til det valgte bord... det er nu meningen at når man krydser et bord af, så skal alle stolene krydses af, og lige så når man "afkrydser" et bord, skal alle stolene "afkrydses"... til dette har jeg lavet dette lille stykke kode, og umiddelbart virker det fint. Der er dog den lille hage ved det, og det er, at selvom koden til at checke et item af med, bliver kørt, så forbliver den unchecked på selve formen :(
private void clbTables_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e) { if (e.NewValue == CheckState.Checked) { for (int i = 0; i < clbStole.Items.Count; i++) { if (clbStole.GetItemCheckState(i) == CheckState.Unchecked) { clbStole.SetItemCheckState(i, CheckState.Checked); } } } else if (e.NewValue == CheckState.Unchecked) { for (int i = 0; i < clbStole.Items.Count; i++) { if (clbStole.GetItemCheckState(i) == CheckState.Checked) { clbStole.SetItemCheckState(i, CheckState.Unchecked); } } } }
det skal dog lige siges, at ca. hver 10ende gang, så bliver alle stolene til et bord krydset af, ved at krydse bordet af... men det er jo ikke særlig fedt :(
og til allersidst... kan jeg også sige, at koden for ItemCheck nogen gange slet ikke BLIVER kørt... det er specielt når man bruger tastaturet og spacebar til at krydse af med, istedet for musen... :( det er rigtig meget øv det hele
mon ikke jeg lige skulle lukke her... jeg har fået løst problemet, og lært en hel masse om CheckedListBox'es og ItemCheck eventen, så intet er så skidt det ikke er godt for noget...
Hemmeligheden lå i SuspendLayout() og Update() som skulle kaldes henholdsvis før, og efter jeg begyndte at checke items af i clbStole. Samtidig skulle jeg sørge for at disable ItemCheck eventen på i clbStole.ItemCheck eventen mens koden kører igennem, ellers vil der opstå loop.
if (e.NewValue == CheckState.Checked) { if (!arrStole.Contains(str)) { arrStole.Add(str); if (clbStole.GetItemCheckState(clbTables.SelectedIndex) == CheckState.Unchecked) { clbTables.SetItemCheckState(clbTables.SelectedIndex, CheckState.Checked); } } } else if (e.NewValue == CheckState.Unchecked) { arrStole.Remove(str); if (clbStole.CheckedItems.Count-1 == 0) { clbTables.SetItemCheckState(clbTables.SelectedIndex, CheckState.Unchecked); } }
this.textBox1.Text = arrStole.Count.ToString();
clbTables.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(clbTables_ItemCheck); }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.