2015-12-18 2 views
-3

Я пытаюсь присвоить индекс combobox, перейдя через значения и найдя ту, которая соответствует моей переменной диаметра. (элементы списка со списком изменяются в зависимости от диаметра, например, некоторые типы труб имеют только 0,5 ", 1,0", тогда как другие могут иметь промежуточное значение 0,75 ").C# для сравнения текста в цикле

Сравнение кода никогда не кажется правдой (поэтому myIndex никогда не назначается что находится за пределами инициализации), хотя, когда я ставлю точку останова на нем, текстовые строки совпадают на соответствующей итерации.

int myIndex = 0; 

for (int i = 0; i <= cboDiameter.Items.Count-1; i++) 
{ 
    if (cboDiameter.GetItemText(cboDiameter.Items[i]) == formPipe.diameter.ToString()) 
    { 
     //this line never executes, even when there's seemingly a text match 
     myIndex = i; 
    } 
} 
cboDiameter.SelectedIndex = myIndex; 

Это то, что я использую, чтобы назначить диаметра трубы, но это усекается. (например, когда текст комбинированного текста равен «1,0», диаметр трубы присваивается «1»

//assign the value of the dropdown to the object 
double.TryParse(cboDiameter.GetItemText(cboDiameter.SelectedItem), out value); 
formPipe.diameter = value; 
+2

Вы уверены, что 'formPipe .diameter.ToString() 'возвращает строку с' '' в ней? – Shyju

+2

Вы сравниваете строки. Строки типа '1.0' и' 1' не идентичны. – wimh

+1

вам нужно использовать функцию '.EndsWith' или' .Contains' и '.Split()' – MethodMan

ответ

1

Не 100% уверен, почему дубль усекается до целого, но исправить это я разобран значение COMBOBOX к другим двойным и просто по сравнению с двумя двухместными вместо сравнения строк:

for (int i = 0; i <= cboDiameter.Items.Count-1; i++) 
       { 
        double.TryParse(cboDiameter.GetItemText(cboDiameter.Items[i]), out val); 
        if (val == formPipe.diameter) 
        { 
         myIndex = i; 
        } 
       } 
Смежные вопросы