Выберите запись из выпадающего списка

#c# #c#-4.0 #c#-3.0

#c# #c #-4.0 #c #-3.0

Вопрос:

У меня есть поле со списком в моем приложении. Я хочу выбрать любой индекс, отличный от того, который уже выбран.

  int index = ComboBox0.SelectedIndex;
 int count = ComboBox0.Items.Count;

ComboBox0.SelectedIndex = ?
  

Как добиться этого без жесткого кодирования?

Ответ №1:

Вы могли бы сделать что-то вроде:

 ComboBox0.SelectedIndex = (ComboBox0.SelectedIndex   1) % ComboBox0.Count;
  

Это позволит выбрать следующий элемент, доступный в списке.

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

1. Мне нравится этот подход, но… Произнесите Count = 6 , и будет выбран последний элемент ( SelectedIndex = 5 ). Не вернет ли эта формула 1 , т.е. она выберет второй элемент списка, а не первый? Разве выпадающие списки не индексируются с нулевым индексом (по крайней мере, в C #)?

2. @djacobson Ты абсолютно прав. Я попытаюсь придумать способ обойти это (хотя это может быть не большой проблемой, если мы теряем только первую запись). Аааа … исправлено. Я только что убрал уменьшение количества. Я всегда так беспокоюсь о одноразовых операциях, что автоматически уменьшаю количество на 1, в чем здесь нет необходимости.

3. Не уверен, что эта логика всегда будет работать. Если вы в данный момент находитесь в первом элементе списка из двух элементов, SelectedIndex равен 0, а Count равен 2. 1 % 1 = 0, что является вашим исходным selectedindex. Но я мог бы подзабыть об этом…

4. @nycdan Моя правка также исправляет это. Теперь, если выбрано значение 0, выбирается значение 1; если 1, то 0.

5. да, мне это нравится — очень эффективный код. Он также не будет прерываться, если в списке есть только один элемент.

Ответ №2:

Если вам просто нужен какой-либо элемент, отличный от текущего (и вы уверены, что их два), это будет работать так же хорошо, как и любой другой (выберите первый элемент, если он в данный момент не выбран, или второй элемент, если выбран первый):

 if (ComboBox0.SelectedIndex == 0) ComboBox0.SelectedIndex = 1;
else ComboBox0.SelectedIndex = 0;
  

Ответ №3:

В случае, если вы хотите выбрать ее случайным образом, вы можете использовать что-то вроде этого:

 int n = (int)(random * (count - 1));
if (n < index) {
   ComboBox0.SelectedIndex = n;
} else {
   ComboBox0.SelectedIndex = n   1;
}
  

где random будет переменной с:

 random = new Random();