#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();