Select in windows form c #

3

Imagining myself, I have 3 checkbox :

  • 2.9.1
  • 2.9.2
  • 2.9.3

I wanted to, that I click on 2.9.3, and select me all that are behind. It's the sort of a select all , but just select me from a given number up that I choose. I'm doing this checkbox, inside a listview, and I want to select it as I said earlier.

Update

private void Checked()
{
    foreach (UltraListViewItem listItem in listView.Items)
    {
        if (cb_selectAll.Checked == true)
        {
            listItem.CheckState = CheckState.Checked;
        }
        if (cb_selectAll.Checked == false)
        {
            listItem.CheckState = CheckState.Unchecked;
        }
    }
}
    
asked by anonymous 08.05.2017 / 18:17

2 answers

1

You can create an event so that when marking an item it marks the previous items;

 private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (e.CurrentValue != CheckState.Checked)
        {
            for (int i = e.Index - 1; i >= 0 ; i--)
            {
                checkedListBox1.SetItemChecked(i, true);
            }
        }
    }
    
08.05.2017 / 18:59
1

The method below will create a list with all checkbox of previous versions, and finally, we will assign this method to the event of every checkbox .

private void SelecionaCheckVersoesAnteriores(object sender, EventArgs e) {
    //Esse é o checkbox que você vai clicar (dar o check)
    var checkAtivado = (CheckBox)sender;

    //Cria uma lista com todos os checkbox com um nome MENOR que o clicado
    //O texto de cada checkbox foi convertido para número para utilizarmos o operador <
    var listCheck = this.Controls?.OfType<CheckBox>().Where(p => Convert.ToInt32(p.Text.Replace(".", ""))
                                                                 < Convert.ToInt32(checkAtivado.Text.Replace(".", "")));
    //Percorre todos os itens da lista e atribui o mesmo valor:
    //Se você dar check, então todos os anteriores vão ser checados, senão,
    //todos serão desmarcados
    foreach (var item in listCheck) {
        item.Checked = checkAtivado.Checked;
    }

    //OU Se quiser que apenas aconteça ao dar um check, ou seja, só quando ativar,
    //então marque como true diretamente
    foreach (var item in listCheck) {
        item.Checked = true;
    }
}

//Aqui estão as atribuições ao evento Check de cada checkbox
private void checkBox1_CheckedChanged(object sender, EventArgs e) {
    SelecionaCheckVersoesAnteriores(sender, e);
}
private void checkBox2_CheckedChanged(object sender, EventArgs e) {
    SelecionaCheckVersoesAnteriores(sender, e);
}
private void checkBox3_CheckedChanged(object sender, EventArgs e) {
    SelecionaCheckVersoesAnteriores(sender, e);
}
    
09.05.2017 / 15:23