Làm cách nào để tạo ComboBox không thể chỉnh sửa trong .NET?


205

Tôi muốn có một "chỉ chọn" ComboBoxcung cấp danh sách các mục để người dùng chọn. Gõ nên được vô hiệu hóa trong phần văn bản của ComboBoxđiều khiển.

Sự googling ban đầu của tôi về điều này đã đưa ra một đề nghị quá phức tạp, sai lầm để nắm bắt KeyPresssự kiện.

Câu trả lời:


378

Để làm cho phần văn bản của ComboBox không thể chỉnh sửa, hãy đặt thuộc tính DropDownStyle thành "DropDownList". ComboBox hiện tại về cơ bản chỉ chọn cho người dùng. Bạn có thể làm điều này trong trình thiết kế Visual Studio hoặc trong C # như thế này:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Liên kết đến tài liệu cho thuộc tính ComboBox DropDownStyle trên MSDN.


8
Một điều cần lưu ý khi làm điều này có nghĩa là bạn không còn có thể cập nhật Texttài sản theo chương trình, đó là sử dụng nó để hiển thị một thông báo mặc định bằng cách sử dụngComboBox.SelectedIndex = -1;
Lankymart

Có cách nào để làm điều này thông qua GUI cho Visual C # mà không phải chỉnh sửa nó trong mã không? Có vẻ như một 'giá trị mặc định' sẽ là một điều bình thường muốn được thiết lập
muzzlator

6
Làm thế nào để tôi tránh sự xuất hiện màu xám?
Anders Linden

2
@ AndersLindén đặt thuộc tính FlatStyle thành Flat.
Xam

@Xam Rồi biên giới đi đâu? Khi googling một chút, có vẻ như tôi phải tự vẽ để nó trông có thể chấp nhận được.
Anders Lindén

67

Để thêm một tham chiếu GUI của Visual Studio, bạn có thể tìm thấy các DropDownStyletùy chọn trong Thuộc tính của ComboBox đã chọn:

nhập mô tả hình ảnh ở đây

Sẽ tự động thêm dòng được đề cập trong câu trả lời đầu tiên cho Form.Designer.cs InitializeComponent(), như vậy:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

33

Ở trên ComboBox của bạn và tìm kiếm thuộc tính DropDropStyle từ cửa sổ thuộc tính và sau đó chọn DropDownList .



1

Để tiếp tục hiển thị dữ liệu trong đầu vào sau khi chọn, hãy làm như vậy:

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.