Jak wyłączyć edycję elementów w ComboBox dla C #?

157

Mam kilka elementów w ComboBox (WinForms z C #). Chcę, aby ich zawartość była statyczna, aby użytkownik nie mógł zmieniać wartości wewnątrz, gdy aplikacja jest uruchamiana. Nie chcę również, aby użytkownik dodawał nowe wartości do ComboBox

Mobin
źródło

Odpowiedzi:

300

Użyj właściwości ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;
Dan Walker
źródło
38
Można to również ustawić w oknie właściwości projektanta.
Jeffrey
3
Z najnowszymi wersjami możesz użyćcombo.Properties.TextEditStyle = DisableTextEditor
Keysharpener
21

Jest to kolejna metoda, której używam, ponieważ zmiana DropDownSylena DropDownListsprawia, że ​​wygląda 3D, a czasami jest po prostu brzydka.

Możesz zapobiec wprowadzaniu danych przez użytkownika, obsługując KeyPresszdarzenie ComboBox w ten sposób.

private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
      e.Handled = true;
}
Isuru
źródło
4
Możesz zmienić jego wygląd w projektancie FlatStyle :)
StinkyCat
3
@StinkyCat To nie zmienia wyglądu wyskakującej listy, tylko kontrolka w formularzu.
Logarr
Musisz obsługiwać menu prawego przycisku myszy, w którym masz również opcję Paste. Nie mam pojęcia, jak teraz.
Sinatr
3
Ok, aby usunąć Paste, musisz utworzyć fałszywe puste menu kontekstowe i przypisać je do ComboBox.
Sinatr
7

Yow może zmienić DropDownStyle we właściwościach na DropDownList. To nie pokaże TextBox dla filtra.

Właściwość DropDownStyle
(Zrzut ekranu udostępniony przez FUSION CHA0S .)

Sumit Agrawal
źródło
0

Próbowałem ComboBox1_KeyPress, ale pozwala usunąć znak i możesz także użyć polecenia kopiuj wklej. Mój DropDownStyle jest ustawiony na DropDownList, ale nadal nie jest używany. Zrobiłem więc poniższy krok, aby uniknąć edycji tekstu combobox.

  • Poniższy kod obsługuje klawisz Delete i Backspace. A także wyłącza kombinację z klawiszem sterującym (np. Ctr + C lub ctr + X)

     Private Sub CmbxInType_KeyDown(sender As Object, e As KeyEventArgs) Handles CmbxInType.KeyDown
        If e.KeyCode = Keys.Delete Or e.KeyCode = Keys.Back Then 
            e.SuppressKeyPress = True
        End If
    
        If Not (e.Control AndAlso e.KeyCode = Keys.C) Then
            e.SuppressKeyPress = True
        End If
    End Sub
  • Podczas ładowania formularza użyj poniższej linii, aby wyłączyć prawy przycisk myszy na kontrolce combobox, aby uniknąć wycinania / wklejania kliknięciem myszy.

    CmbxInType.ContextMenu = new ContextMenu()
Sushil Jadhav
źródło