2010-06-04 8 views
13

Hey. Ich habe den folgenden Code bekommt dieListBox und Datasource - verhindern, dass der erste Eintrag ausgewählt wird

UsersListBox.DataSource = GrpList; 

jedoch mein Listenfeld auffüllt, nachdem das Feld ausgefüllt ist, das erste Element in der Liste ist standardmäßig aktiviert und der „ausgewählte Index geändert“ Ereignis ausgelöst wird. Wie verhindere ich, dass das Element direkt nach dem Auffüllen des Listenfelds ausgewählt wird, oder wie verhindere ich, dass das Ereignis ausgelöst wird?

Dank

Antwort

20

Um das Ereignis von Brennen zu halten, hier sind zwei Optionen, die ich in der Vergangenheit verwendet haben:

  1. Unregister der Event-Handler, während die Datasource-Einstellung.

    UsersListBox.SelectedIndexChanged -= UsersListBox_SelectedIndexChanged; 
    UsersListBox.DataSource = GrpList; 
    UsersListBox.SelectedIndex = -1; // This optional line keeps the first item from being selected. 
    UsersListBox.SelectedIndexChanged += UsersListBox_SelectedIndexChanged; 
    
  2. Erstellen Sie ein boolesches Flag, um das Ereignis zu ignorieren.

    private bool ignoreSelectedIndexChanged; 
    private void UsersListBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        if (ignoreSelectedIndexChanged) return; 
        ... 
    } 
    ... 
    ignoreSelectedIndexChanged = true; 
    UsersListBox.DataSource = GrpList; 
    UsersListBox.SelectedIndex = -1; // This optional line keeps the first item from being selected. 
    ignoreSelectedIndexChanged = false; 
    
-4

Vielleicht in Datasourcechanged könnte man den Zustand der SelectedIndex überprüfen, wenn Sie Glück haben Sie dann zwingen SelectedIndex nur konnte = -1.

+0

Say arbeiten Was? Wenn du glücklich bist? Und ich kann nicht einmal verstehen, was deine Antwort eigentlich sagt. –

-2

Wenn Sie den ausgewählten Wert nur löschen wollen, können Sie ClearSelected verwenden, nachdem Sie die Datasource eingestellt. Aber wenn Sie nicht möchten, dass das Ereignis ausgelöst wird, müssen Sie eine von Josephs Methoden verwenden.

+0

Dies ist keine relevante Antwort. –

1

Nun, es sieht so aus, dass das erste Element automatisch ausgewählt wird, nachdem ListBox.DataSource festgelegt wurde. Andere Lösungen sind gut, aber sie lösen das Problem nicht. Dies ist, wie ich das Problem habe zu lösen:

// Get the current selection mode 
SelectionMode selectionMode = yourListBox.SelectionMode; 

// Set the selection mode to none 
yourListBox.SelectionMode = SelectionMode.None; 

// Set a new DataSource 
yourListBox.DataSource = yourList; 

// Set back the original selection mode 
yourListBox.SelectionMode = selectionMode; 
+0

Diese Lösung funktioniert gut und ist einfacher als andere –

1

i die folgende verwenden, scheint für mich zu arbeiten:

List<myClass> selectedItemsList = dataFromSomewhere 

//Check if the selectedItemsList and listBox both contain items 
if ((selectedItemsList.Count > 0) && (listBox.Items.Count > 0)) 
{ 
    //If selectedItemsList does not contain the selected item at 
    //index 0 of the listBox then deselect it 
    if (!selectedItemsList.Contains(listBox.Items[0] as myClass)) 
    { 
     //Detach the event so it is not called again when changing the selection 
     //otherwise you will get a Stack Overflow Exception 
     listBox.SelectedIndexChanged -= listBox_SelectedIndexChanged; 
     listBox.SetSelected(0, false); 
     listBox.SelectedIndexChanged += listBox_SelectedIndexChanged; 
    } 
} 
0

IsSynchronizedWithCurrentItem="False" gesetzt und auch SelectedIndex=-1 und alles sollte für Sie

Verwandte Themen