2010-01-06 7 views
6

Ich benutze ein ListView-Steuerelement mit MultiRow und fullRow Select on. Wenn ich mehrere Reihen gleichzeitig auswähle, werden einige meiner Reihen auf magische Weise überprüft. Dies geschieht, wenn Sie die Maus ziehen und auch eine auswählen, und dann auf eine andere klicken.C# ListView mit CheckBoxen, automatisches Kontrollkästchen aktiviert, wenn mehrere Zeilen ausgewählt werden

Siehe Bild beschreiben Problem hier: alt text

Was in der Grapefruit ist da los? Jemand?

+0

Gute Frage! Sehr deutlich beschreibt das Problem. –

Antwort

6

Leider sind Fehler in der Listview-Klasse, dies ist einer von ihnen. Der folgende Code ist ein Fix, der für mich funktioniert hat.

Edit: Sorry, das funktioniert nicht ganz richtig, obwohl es den Fehler verhindert, den Sie in Ihrer Frage zeigen. Dies verhindert, dass mehrere Elemente ausgewählt und dann durch Klicken auf das Kontrollkästchen überprüft werden.

void SetupListView() 
{ 
    listView.ItemCheck += new ItemCheckEventHandler(listView_ItemCheck); 
    listView.MouseDown += new MouseEventHandler(listView_MouseDown); 
    listView.MouseUp += new MouseEventHandler(listView_MouseUp); 
    listView.MouseLeave += new EventHandler(listView_MouseLeave); 
} 

bool mouseDown = false; 
void listView_MouseLeave(object sender, EventArgs e) 
{ 
    mouseDown = false; 
} 

void listView_MouseUp(object sender, MouseEventArgs e) 
{ 
    mouseDown = false; 
} 

void listView_MouseDown(object sender, MouseEventArgs e) 
{ 
    mouseDown = true; 
} 

void listView_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if(mouseDown) 
    { 
     e.NewValue = e.CurrentValue; 
    } 
} 
+0

Um das Umschalten von mehreren Objekten zu ermöglichen, indem ich direkt auf das Kontrollkästchen klicke, ändere ich einfach das 'mouseDown = true;' in 'mouseDown = e.X> 20;'. Dies funktioniert für mich, da sich die CheckBoxen auf der linken Seite des ListView-Fensters befinden. – timfoden

0

`s einfache Frage nur versuchen, diese

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift) 
    { 
     e.NewValue = e.CurrentValue; 
    } 
} 
Verwandte Themen