Убедитесь, что последовательные элементы выбраны в флажок
У меня есть флажок, в котором есть несколько последовательно расположенных элементов, когда я нажимаю на элементы из него и нажимаю кнопку отправки, все элементы должны храниться в базе данных.
Но здесь я хочу убедиться, что пользователь выбирает только последовательные элементы, например, пользователь не может выбрать a,b,d,f, они всегда должны выбирать a,b,c,d,e,f.
Может кто-нибудь, пожалуйста, предложите мне логику для достижения этой цели.
2 ответа
Я был в состоянии сделать с одним циклом, как показано ниже:
for (int i = 0; i < chkBox.Items.Count; i++)
{
if (i > 0)
{
if (chkBox.Items[i].Selected)
{
if (chkBox.Items[i - 1].Selected)
continue;
else
{
_isSequentialSelected = false;
break;
}
}
}
}
Сначала он будет проходить по всем элементам, после того, как цикл будет на втором элементе и будет выбран, он продолжит и проверит, был ли выбран предыдущий элемент, если был выбран предыдущий элемент, он продолжится, в противном случае он прервет цикл. помечая переменную bool false и затем вне цикла, я могу легко проверить, является ли флаг истинным или ложным, и, соответственно, показать сообщение.
Возможно, это не лучшая логика, но она выполняет работу по крайней мере:
List<int> selectedvalues = new List<int>();
bool isSequence = true;
//get all selected indices
for(int i = 0; i < checkboxlist.Items.Count; i++)
if(checkboxlist.Items[i].Selected)
selectedvalues.Add(i);
//start from first selected index, go to last selected index
for(int i = selectedvalues[0]; i < selectedvalues[selectedvalues.Length - 1]; i++)
if(i != selectedvalues[i])
{
isSequence = false;
break;
}
1-й контрольный пример:
User selected indices: 3, 4, 7, 8
Now second loop:
i = 3, index = 3
i = 4, index = 4
i = 5, index = 7 //false and break
2-й контрольный пример:
User selected indices: 3, 4, 5, 6
Now second loop:
i = 3, index = 3
i = 4, index = 4
i = 5, index = 5
i = 6, index = 6 //success
PS: я не скомпилировал этот код, если вы получили ошибку, пожалуйста, дайте мне знать.