Добавлять элементы в поле со списком, только если они содержат строку

#c# #winforms

#c# #winforms

Вопрос:

Чего я пытаюсь добиться, так это добавления элемента в comboBox24 , но только если строка содержится в comboBox10 .

           case "PN63":
                    comboBox24.Items.Clear();
                    
                    if (comboBox10.Items.Contains("CL150"))
                    {
                        comboBox24.Items.Add("ASME B16.5-150 RF");
                    }
                    else if (comboBox10.Items.Contains("PN16"))
                    {
                        comboBox24.Items.Add("FLG EN1092-1 PN16 B1");
                    }
                    else if (comboBox10.Items.Contains("PN25"))
                    {
                        comboBox24.Items.Add("FLG EN1092-1 PN25 B1"); ;
                    }
                    else if (comboBox10.Items.Contains("PN40"))
                    {
                        comboBox24.Items.Add("FLG EN1092-1 PN40 B1");
                    }
                    else if (comboBox10.Items.Contains("CL300"))
                    {
                        comboBox24.Items.Add("ASME B16.5-300 RF");
                    }
                    break;
 

Пока я добиваюсь добавления только одного (первого) элемента, даже если выполняется несколько условий.
Я не очень опытен, но я думаю, что оператор if прерывается после true .

Может кто-нибудь, пожалуйста, указать мне, как этого добиться.

Комментарии:

1. Удалите все else ключевые слова. Затем все тесты выполняются. В противном случае он прерывается после первого true условия.

Ответ №1:

Это case "PN63": меня беспокоит. У вас есть множество других случаев, которые имеют в основном тот же тип кода, но с разными значениями?

Если это так, я рекомендую вам использовать что-то более похожее:

 case "PN63":
    string[,] pairs = {
        {"CL150", "ASME B16.5-150 RF" },
        {"PN16", "FLG EN1092-1 PN16 B1" },
        {"PN25", "FLG EN1092-1 PN25 B1" },
        {"PN40", "FLG EN1092-1 PN40 B1" },
        {"CL300", "ASME B16.5-300 RF" }
    };
    SetComboboxes(comboBox10, comboBox24, pairs);
    break;
 

С помощью вспомогательного метода SetComboboxes() :

 private void SetComboboxes(ComboBox comboToCheck, ComboBox comboToAdd, string[,] pairs)
{
    comboToAdd.Items.Clear();
    for (int r = 0; r <= pairs.GetUpperBound(0); r  )
    {
        if (comboToCheck.Items.Contains(pairs[r, 0]))
        {
            comboToAdd.Items.Contains(pairs[r, 1]);
        }
    }
}
 

Ответ №2:

Вы тестируете разные условия и хотите, чтобы все они выполнялись, поэтому вам следует удалить ключевое слово else и сделать их просто операторами if .

           case "PN63":
                comboBox24.Items.Clear();
                
                if (comboBox10.Items.Contains("CL150"))
                {
                    comboBox24.Items.Add("ASME B16.5-150 RF");
                }
                if (comboBox10.Items.Contains("PN16"))
                {
                    comboBox24.Items.Add("FLG EN1092-1 PN16 B1");
                }
                if (comboBox10.Items.Contains("PN25"))
                {
                    comboBox24.Items.Add("FLG EN1092-1 PN25 B1"); ;
                }
                if (comboBox10.Items.Contains("PN40"))
                {
                    comboBox24.Items.Add("FLG EN1092-1 PN40 B1");
                }
                if (comboBox10.Items.Contains("CL300"))
                {
                    comboBox24.Items.Add("ASME B16.5-300 RF");
                }
                break;