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.

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.


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;

33

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



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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.