2010-02-18 33 views
7

Cách tạo điều khiển combobox với các mục không thể chọn? Ví dụ: các tên nhóm hoặc tên danh mục đó chia nhỏ các mục trong danh sách thả xuống thành một số nhóm hoặc danh mục.Tạo ComboBox WinForms với các mục không thể chọn

+0

Biểu mẫu hoặc biểu mẫu web? –

+0

Bạn có thể cung cấp thêm một chút chi tiết. Đây có phải là WPF, Windows Forms hoặc một số khung giao diện người dùng khác không? – mattythomas2000

Trả lời

12

Thay vì thêm chuỗi vào combobox, bạn có thể thêm một lớp đặc biệt và sử dụng mục đã chọn để xác định xem mục đó có được chọn hay không.

public partial class Form1 : Form 
{ 
    private class ComboBoxItem 
    { 
     public int Value { get; set; } 
     public string Text { get; set; } 
     public bool Selectable { get; set; } 
    } 

    public Form1() { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) { 
     this.comboBox1.ValueMember = "Value"; 
     this.comboBox1.DisplayMember = "Text"; 
     this.comboBox1.Items.AddRange(new[] { 
      new ComboBoxItem() { Selectable = false, Text="Unselectable", Value=0}, 
      new ComboBoxItem() { Selectable = true, Text="Selectable1", Value=1}, 
      new ComboBoxItem() { Selectable = true, Text="Selectable2", Value=2}, 
      new ComboBoxItem() { Selectable = false, Text="Unselectable", Value=3}, 
      new ComboBoxItem() { Selectable = true, Text="Selectable3", Value=4}, 
      new ComboBoxItem() { Selectable = true, Text="Selectable4", Value=5}, 
     }); 

     this.comboBox1.SelectedIndexChanged += (cbSender, cbe) => { 
      var cb = cbSender as ComboBox; 

      if (cb.SelectedItem != null && cb.SelectedItem is ComboBoxItem && ((ComboBoxItem) cb.SelectedItem).Selectable == false) { 
       // deselect item 
       cb.SelectedIndex = -1; 
      } 
     }; 
    } 
} 
+0

Đây cũng là suy nghĩ đầu tiên của tôi. Tuy nhiên bạn vẫn có thể nhập văn bản mục vào ComboBox và do đó chọn mục không thể chọn. –

+1

Không. Trong trường hợp của tôi, tôi sử dụng kiểu DropDownList cho ComboBox tắt trình soạn thảo văn bản. – symantis

+0

Mã của bạn rất tốt và nó giúp ích cho tôi. Nhưng một câu hỏi khác - làm thế nào để vô hiệu hóa không chỉ lựa chọn các mục trong danh sách nhưng vô hiệu hóa theo dõi các mục không thể chọn bằng chuột. – symantis

0

Có một cái nhìn ở đây trên CodeProject cho một Combo Box readonly, đây là một bài viết để làm cho readonly combo box 'đàng hoàng' tìm ... Đây là một cho thấy làm thế nào để ghi đè lên cơ bản hộp tiêu chuẩn kết hợp để làm cho nó readonly như Sani đã đề xuất.

Các vấn đề liên quan