Làm cách nào để đặt mục đã chọn trong comboBox khớp với chuỗi của tôi bằng C #?


197

Tôi có một chuỗi "test1" và ComboBox của tôi chứa test1, test2test3. Làm cách nào để đặt mục đã chọn thành "test1"? Đó là, làm cách nào để khớp chuỗi của tôi với một trong các mục comboBox?

Tôi đã nghĩ về dòng dưới đây, nhưng điều này không hoạt động.

comboBox1.SelectedText = "test1"; 

làm thế nào nó không hoạt động? Điều gì xảy ra khi dòng mã này chạy?
Kate Gregory

@KateGregory nó chỉ nối chuỗi "test1" với văn bản hiện có
solujic

Nếu bạn có cách để biết giá trị vật phẩm bạn có thể sử dụng: comboBox1.SelectedValue = Value_of_your_opes;
César León

SelectedTextthay đổi văn bản "Đã chọn" thành test1. nếu không có "Lựa chọn" (văn bản được đánh dấu), văn bản sẽ được chèn vào vị trí của dấu mũ.
AaA

Câu trả lời:


278

Cái này cần phải dùng mẹo:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")

Có vẻ như một câu trả lời tốt hơn cho tôi bởi vì bạn có một giá trị trả về, bạn có thể lưu tạm thời trong một biến và sử dụng nó để kiểm tra thời tiết bạn đã tìm thấy giá trị bạn đang tìm kiếm.
Áxel Costas Pena

Điều gì xảy ra nếu có nhiều hơn một giá trị "test1" trong combox1
thoitbk

@thoitbk - Theo MSDN tại msdn.microsoft.com/en-us/l Library / trộm , phương pháp FindStringExact() "Tìm mục đầu tiên trong hộp tổ hợp khớp với chuỗi đã chỉ định."
dub stylee

207

Bạn đã thử thuộc tính Text chưa? Nó làm việc cho tôi.

ComboBox1.Text = "test1";

Thuộc tính được chọn là dành cho phần được chọn của văn bản có thể chỉnh sửa trong phần hộp văn bản của hộp tổ hợp.


7
Chắc chắn rằng chỉ đặt văn bản trong khu vực có thể chỉnh sửa của ComboBox chứ không phải chọn mục có liên quan từ danh sách? Nếu bộ sưu tập các mục danh sách chứa các đối tượng chứ không chỉ là các chuỗi, thì tôi nghi ngờ điều này sẽ chọn đối tượng ListItem thích hợp, thay vào đó nó sẽ chỉ đặt thuộc tính Text trên ComboBox?
TabbyCool

9
Nó không đặt thuộc tính ChọnValue của điều khiển
Henryk

Đẹp. Hoạt động đẹp cho kích thước phông chữ, trọng lượng và kéo xuống gia đình. Không có phôi hoặc chuyển đổi giữa các lớp. Soooo dễ dàng hơn nhiều!
Lance Cleveland

3
Chỉ trong trường hợp: Tham số này phải được đặt chỉ sau khi điền vào hộp tổ hợp.
Antoine Rodriguez

12
Kiểu thả xuống combobox của tôi là DropDownList và .Text = "một số văn bản" không hoạt động. Giải pháp này hoạt động tốt với tôi: Combox1.SelectedIndex = Combox1.FindStringExact ("test1")
Mayank

48

Giả sử rằng hộp tổ hợp của bạn không phải là cơ sở dữ liệu, bạn sẽ cần tìm chỉ mục của đối tượng trong bộ sưu tập "vật phẩm" trên biểu mẫu của mình và sau đó đặt thuộc tính "được chọn" thành chỉ mục thích hợp.

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

Hãy nhớ rằng hàm IndexOf có thể đưa ra một đối số nếu mục đó không được tìm thấy.


1
Ghi SelectedIndex của nó không SelectedItem ... Và trình biên dịch sẽ không phàn nàn, chỉ thất bại trong việc thiết lập giá trị combobox
Rob

Bạn không thích các lỗi logic không ném bất kỳ ngoại lệ nào, chúng không hoạt động ...
Spence

đây là chọn mục, nhưng không gọi sự kiện onChange trên combobox
mrid

39

Nếu các mục trong ComboBox của bạn là chuỗi, bạn có thể thử:

comboBox1.SelectedItem = "test1";

18
Không, không phải là: msdn.microsoft.com/en-us/l
Library / trộm

Đã cứu sống ngày! Mục đã chọn phải phù hợp với loại - đó là nó cho tôi! Tôi đã gãi đầu tại sao vật phẩm được chọn không được đặt ngay cả vật phẩm rõ ràng ở đó - hóa ra là một loại không phù hợp!
Sudhanshu Mishra

Để đầy đủ, hữu ích khi có mô tả từ liên kết trên, đặc biệt vì câu trả lời này thực hiện kiểm tra khớp được đề xuất bởi các câu trả lời khác, bao gồm câu trả lời ưa thích từ @norbertB: Khi bạn đặt thuộc tính chọnItem thành một đối tượng, ComboBox sẽ cố gắng tạo đối tượng đó một trong những hiện đang được lựa chọn trong danh sách. Nếu đối tượng được tìm thấy trong danh sách , nó sẽ được hiển thị trong phần chỉnh sửa của ComboBox và thuộc tính được chọn được đặt thành chỉ mục tương ứng. Nếu đối tượng không tồn tại trong danh sách, thuộc tính được chọn được đặt ở giá trị hiện tại của nó.
DanG

10

Đối với tôi điều này chỉ làm việc:

foreach (ComboBoxItem cbi in someComboBox.Items)
{
    if (cbi.Content as String == "sometextIntheComboBox")
    {
        someComboBox.SelectedItem = cbi;
        break;
    }
}

MOD: và nếu Bạn có các đối tượng của riêng mình dưới dạng các mục được thiết lập trong hộp tổ hợp, thì hãy thay thế ComboBoxItem bằng một trong số chúng như:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}

2
Điều này hiệu quả với tôi, nhưng bạn cần cẩn thận rằng các vật phẩm trong ComboBox của bạn thực sự là ComboBoxItems vì có thể đặt các vật phẩm khác vào đó.
Cấp

Điều này đã làm việc rất tốt trong WinRT 8.1. Tôi thực sự đã bọc các foreach hàng đầu trong một phương thức mở rộng như dave đã viết trong giải pháp SelectItemByValue () của anh ấy, và nó thực sự là giải pháp hoàn hảo.
Speednet

9

Được chọn là để lấy hoặc đặt văn bản thực tế trong trình chỉnh sửa chuỗi cho mục đã chọn trong hộp tổ hợp như được ghi lại ở đây . Điều này không thể chỉnh sửa nếu bạn đặt:

comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

Sử dụng:

comboBox1.SelectedItem = "test1";

hoặc là:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

1
comboBox1.Items.IndexOf ... có nguy cơ NullReferenceException nếu các mục trống.
Gary

9
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Hãy thử điều này trong cửa sổ Mẫu.


7

Tôi đã sử dụng một phương pháp mở rộng:

public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}

Sau đó, chỉ cần tiêu thụ phương pháp:

ddl.SelectItemByValue(value);



4

Giải pháp này dựa trên MSDN với một số sửa đổi tôi đã thực hiện.

  • Nó tìm thấy chính xác hoặc PHẦN của chuỗi và đặt nó.

    private int lastMatch = 0;
    private void textBoxSearch_TextChanged(object sender, EventArgs e)
    {
        // Set our intial index variable to -1.
        int x = 0;
        string match = textBoxSearch.Text;
        // If the search string is empty set to begining of textBox
        if (textBoxSearch.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (comboBoxSelect.Items.Count == x)
                {
                    comboBoxSelect.SelectedIndex = lastMatch;
                    found = false;
                }
                else
                {
                    comboBoxSelect.SelectedIndex = x;
                    match = comboBoxSelect.SelectedValue.ToString();
                    if (match.Contains(textBoxSearch.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                }
            }
        }
        else
            comboBoxSelect.SelectedIndex = 0;
    }

Tôi mong tôi đã giúp đỡ được!


3

Tôi đã điền ComboBox của mình với een DataTable được điền từ cơ sở dữ liệu. Sau đó, tôi đã đặt DisplayMember và ValueMember. Và tôi sử dụng mã này để đặt mục đã chọn.

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}

1

Bạn không có tài sản đó trong ComboBox. Bạn đã chọnItItem hoặc chọn Index. Nếu bạn có các đối tượng bạn đã sử dụng để điền vào hộp tổ hợp thì bạn có thể sử dụng ChọnItem.

Nếu không, bạn có thể lấy bộ sưu tập vật phẩm (thuộc tính Item) và lặp đi lặp lại cho đến khi bạn nhận được giá trị bạn muốn và sử dụng nó với các thuộc tính khác.

hy vọng nó giúp.


1
_cmbTemplates.SelectedText = "test1"

hoặc có thể

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");

với mã này, bạn gán một bool cho thuộc tính chọnItem ... sẽ không hoạt động imho.
Frederik Gheysels

1
  • Liệt kê ListItems trong combobox
  • Nhận các combobox listindex bằng nhau
  • Đặt listindex thành một tìm thấy.

Nhưng nếu tôi thấy một mã như một người xem xét mã, tôi sẽ khuyên bạn nên xem xét lại tất cả các thuật toán phương thức.


2
Tại sao bạn đã cung cấp nó như là một câu trả lời sau đó?

1

Tôi đã sử dụng KeyValuePair cho liên kết dữ liệu ComboBox và tôi muốn tìm mục theo giá trị để điều này hoạt động trong trường hợp của tôi:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");

1

Tìm mySecondObject (thuộc loại MyObject) trong hộp tổ hợp (chứa danh sách MyObjects) và chọn mục:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}

0
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Đối với trường hợp của bạn, bạn có thể sử dụng

DropDownList.Items.FindByText("Text");

0
combo.Items.FindByValue("1").Selected = true;

3
Điều này cũng có nguy cơ ngoại lệ nếu không tìm thấy "1".
Gary

0

Tất cả các phương thức, thủ thuật và dòng cài đặt mã Mục ComboBox sẽ không hoạt động cho đến khi ComboBox có cha mẹ.


0

Tôi đã tạo một Hàm sẽ trả về Chỉ số của Giá trị

        public static int SelectByValue(ComboBox comboBox, string value)
        {
            int i = 0;
            for (i = 0; i <= comboBox.Items.Count - 1; i++)
            {
                DataRowView cb;
                cb = (DataRowView)comboBox.Items[i];
                if (cb.Row.ItemArray[0].ToString() == value)// Change the 0 index if your want to Select by Text as 1 Index
                {
                    return i;
                }
            }
            return -1;
        }

0

cái này hiệu quả với tôi .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];

1
Mặc dù mã này có thể trả lời câu hỏi, tốt hơn là giải thích cách giải quyết vấn đề và cung cấp mã làm ví dụ hoặc tham chiếu. Câu trả lời chỉ có mã có thể gây nhầm lẫn và thiếu bối cảnh.
Robert Columbia

Cảm ơn vì lời khuyên!
Jaydeep Karena


-2

Hãy thử theo cách này, nó hoạt động với tôi:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";

Bạn nên kiểm tra xem Index đã chọn không phải là -1 trước tiên hay chính xác hơn là> = 0 và <.items.length.
Gary

-3

Nó nên hoạt động

Yourcomboboxname.setselecteditem("yourstring");

Và nếu bạn muốn thiết lập chuỗi cơ sở dữ liệu, hãy sử dụng

Comboboxname.setselecteditem(ps.get string("databasestring"));
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.