Bagaimana saya bisa membuat ComboBox yang tidak dapat diedit di .NET?

205

Saya ingin memiliki "pilih-saja" ComboBoxyang menyediakan daftar item untuk dipilih pengguna. Pengetikan harus dinonaktifkan di bagian teks dariComboBox kontrol.

Googling awal saya tentang ini menghasilkan saran yang terlalu rumit dan salah arah untuk mengabadikan KeyPressacara.

Cory Engebretson
sumber

Jawaban:

378

Untuk membuat bagian teks dari ComboBox tidak dapat diedit, setel properti DropDownStyle ke "DropDownList". ComboBox sekarang pada dasarnya hanya pilih untuk pengguna. Anda dapat melakukan ini di desainer Visual Studio, atau di C # seperti ini:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Tautan ke dokumentasi untuk properti ComboBox DropDownStyle di MSDN.

Cory Engebretson
sumber
8
Satu hal yang perlu diingat dalam melakukan ini berarti Anda tidak dapat lagi memperbarui Textproperti secara terprogram, menggunakannya untuk menampilkan pesan default menggunakanComboBox.SelectedIndex = -1;
Lankymart
Apakah ada cara untuk melakukan ini melalui GUI untuk Visual C # tanpa harus mengeditnya dalam kode? Sepertinya 'nilai default' akan menjadi hal yang normal untuk diatur
muzzlator
6
Bagaimana cara menghindari tampilan abu-abu?
Anders Lindén
2
@ AndersLindén mengatur properti FlatStyle ke Flat.
Xam
@ Jam Lalu kemana perbatasan pergi? Ketika googling sedikit, sepertinya saya harus melakukan gambar sendiri agar terlihat diterima.
Anders Lindén
67

Untuk menambahkan referensi Visual Studio GUI, Anda dapat menemukan DropDownStyleopsi di bawah Properti ComboBox yang dipilih:

masukkan deskripsi gambar di sini

Yang secara otomatis akan menambahkan baris yang disebutkan dalam jawaban pertama ke Form.Designer.cs InitializeComponent(), seperti:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
invertigo
sumber
33

Tetap di ComboBox Anda dan cari properti DropDropStyle dari jendela properti dan kemudian pilih DropDownList .

LZara
sumber
2

COMBOBOXID.DropDownStyle = ComboBoxStyle.DropDownList;

Abhishek Jaiswal
sumber
1

Untuk terus menampilkan data dalam input setelah memilih, lakukan:

VB.NET
Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub



C#
Private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = true;
}
Diogo Rodrigues
sumber