Як відключити редагування елементів у комбобоксі для c #?


157

У мене є елементи в ComboBox (WinForms з C #). Я хочу, щоб їх вміст був статичним, щоб користувач не міг змінювати значення всередині під час запуску програми. Я також не хочу, щоб користувач додавав нові значення до ComboBox

Відповіді:


300

Використовуйте властивість ComboStyle:

comboBox.DropDownStyle = ComboBoxStyle.DropDownList;

38
Це також можна встановити у вікні властивостей дизайнера.
Джефрі

3
З останніми версіями, які ви можете використовуватиcombo.Properties.TextEditStyle = DisableTextEditor
Keysharpener

21

Це ще один метод я використовую , тому що зміни DropDownSyleв DropDownListвін виглядає 3D , а іноді його просто потворною.

Ви можете запобігти введенню користувача, обробляючи KeyPressподію ComboBox таким чином.

private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
      e.Handled = true;
}

4
Ви можете змінити її зовнішність у дизайнера, FlatStyle :)
StinkyCat

3
@StinkyCat Це не змінює вигляд спливаючого списку, лише елемент керування у формі.
Логарр

Вам потрібно обробити меню правої кнопки миші, де також є опція Paste. Я не маю уявлення, як зараз.
Синатр

3
Гаразд, щоб видалити, Pasteвам доведеться створити підроблене порожнє контекстне меню та призначити його ComboBox.
Сінатр


0

Я спробував ComboBox1_KeyPress, але він дозволяє видалити символ і ви також можете скористатися командою копіювання вставити. Мій DropDownStyle встановлений на DropDownList, але все ще не використовується. Тому я зробив крок нижче, щоб уникнути редагування тексту у комбобоксі.

  • Нижче код обробляє клавішу видалення та повернення назад. А також вимикає комбінацію з керуючим ключем (наприклад, ctr + C або 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
  • Під час завантаження форми використовуйте нижче рядка, щоб відключити клацання правою кнопкою миші на панелі управління, щоб уникнути вирізання / вставки за допомогою клацання миші.

    CmbxInType.ContextMenu = new ContextMenu()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.