2009-02-07 17 views
13

Tôi muốn sử dụng một ComboBox với kiểu DropDownList (một trong đó làm cho nó trông giống như một nút để bạn không thể nhập một giá trị) để chèn một giá trị vào một hộp văn bản. Tôi muốn combobox có một nhãn văn bản được gọi là 'Wildcards' và khi tôi chọn một ký tự đại diện từ danh sách giá trị được chọn sẽ được chèn vào một hộp văn bản và văn bản combobox vẫn là 'Wildcard'. Vấn đề đầu tiên của tôi là tôi dường như không thể thiết lập một giá trị văn bản khi combobox là trong phong cách DropDownList. Sử dụng pallet thuộc tính không hoạt động, giá trị văn bản chỉ đơn giản là xóa khi bạn nhấp vào, thêm comboBox.Text = "Wildcards"; form_load cũng không hoạt động. Có ai giúp được không?C# ComboBox trong kiểu DropDownList, làm cách nào để đặt văn bản?

Trả lời

23

Mã này bạn chỉ định:

comboBox.Text = "Wildcards"; 

... nên làm việc. Lý do duy nhất nó sẽ không phải là văn bản bạn chỉ định không phải là một mục trong danh sách mục của comboBox. Khi sử dụng kiểu DropDownList, bạn chỉ có thể đặt Văn bản thành các giá trị thực sự xuất hiện trong danh sách.

Nếu trường hợp bạn đang cố gắng đặt văn bản thành Ký tự đại diện và mục đó không xuất hiện trong danh sách và giải pháp thay thế không được chấp nhận, bạn có thể phải hơi bẩn với mã và thêm một mục tạm thời bị xóa khi danh sách thả xuống được mở rộng.

Ví dụ, nếu bạn có một hình thức có chứa một combobox tên "comboBox1" với một số mặt hàng và một nút có tên là "button1" bạn có thể làm một cái gì đó như thế này:

private void button1_Click(object sender, EventArgs e) 
{ 
    if (!comboBox1.Items.Contains("Wildcards")) 
    { 
     comboBox1.Items.Add("Wildcards"); 
    } 

    comboBox1.Text = "Wildcards"; 
} 

private void comboBox1_DropDown(object sender, EventArgs e) 
{ 
    if (comboBox1.Items.Contains("Wildcards")) 
     comboBox1.Items.Remove("Wildcards"); 
} 

Đó là khá nhanh chóng và dơ bẩn nhưng bởi nắm bắt sự kiện DropDownClosed quá bạn có thể làm sạch nó lên một chút, thêm mục "Wildcards" trở lại khi cần thiết.

+1

Cảm ơn vì điều đó, tôi đã học được rất nhiều C# từ trang web blackwasp và tôi vẫn đề cập đến nó. Cảm ơn! –

+0

Bạn được chào đón nhiều nhất :-) – BlackWasp

+1

Rất kỳ lạ, việc đặt thuộc tính "Văn bản" trong trình thiết kế biểu mẫu là không đủ - nó phải được đặt trong mã phía sau trong trường hợp của tôi. Cố gắng thiết lập nó từ cửa sổ thuộc tính biểu mẫu sẽ chỉ xóa sạch thuộc tính "Văn bản" sau khi nhấp vào nó. – Rachael

-1

Hãy thử điều này

comboBox1.SelectedValue = "Wildcards"; 
-1

Đây có thể là một giải pháp khả thi:

comboBox1.SelectedValue = comboBox1.Items.FindByText("Wildcards").Value; 
2

Bạn có thể chọn một trong các mục trên formload hoặc dưới hình thức constructor:

public MyForm() 
{ 
    InitializeComponent(); 

    comboBox.SelectedIndex = 0; 
} 

hoặc

private void MyForm_Load(object sender, EventArgs e) 
{ 
    comboBox.SelectedIndex = 0; 
} 
+0

Tôi thích cách làm sạch giải pháp này. +1 –

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