简体   繁体   中英

How to disable check/uncheck of an item in a checkedlistbox in c#

I have a CheckedListBox with 10 items. On each item check a method is being called. I want to disable the checkbox of that particular item for which the method is being executed so that user cannot uncheck the item till the job is completed.

** Unchecking of an item calls another method.

Here is the code of ItemCheck Event

private void host_listbox_ItemCheck(object sender, ItemCheckEventArgs e)
        {

            int index = e.Index;
            try
            {
                string sitem = host_listbox.Items[index].ToString();
                host_list[sitem].checked_event=e;
                if (!host_list[sitem].is_busy)
                {
                    host_config.listEnabled = false;
                    host_list[sitem].con_worker.RunWorkerAsync();

                }
                if (host_listbox.GetItemCheckState(index) == CheckState.Checked)
                {
                    host_list[sitem].connected = false;
                }

            }
            catch(Exception ex)
            {
                output_textbox.AppendText("connection failed..............." +ex.ToString() +Environment.NewLine);

            }



        }

You can check/uncheck items in your checkedListBox with this code

checkedListBox.SetItemChecked(item, true);

for more informations go to microsoft documentation

  private void host_listbox_ItemCheck(object sender, ItemCheckEventArgs e)
  {

      int index = e.Index;
      try
      {
          string sitem = host_listbox.Items[index].ToString();
          if (host_list[sitem].is_busy // or whatever indicates that background worker is running or any condition that specifies, that you do not want to let this item to be changed)
              e.NewValue = e.CurrentValue; //Change the value back
          else
          { 
          //Let the checked state of the item change

This code prevent checked state change if associated background work is running:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        workerList = new List<BackgroundWorker>();

        for (int i = 0; i < 10; i++)
        {
            var el = new BackgroundWorker();
            el.DoWork += (s, e) =>
            {
                Thread.Sleep(5000);
            };

            workerList.Add(el);
            checkedListBox1.Items.Add("el " + i);
        }
    }

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        var worker = workerList[e.Index];

        if (worker.IsBusy)
        {
            e.NewValue = e.CurrentValue;
            return;
        }

        if (e.NewValue == CheckState.Checked)
            worker.RunWorkerAsync();
    }

    public List<BackgroundWorker> workerList { get; set; }
}

想想,只有funcion解决方案设置了选择模式

CheckedListBox.SelectionMode = SelectionMode.None;
private void ItemCheck(object sender, ItemCheckEventArgs e)
{
  if (busy)
    e.NewValue = e.CurrentValue;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM