InvalidArgument -1 value not valid for index, when doing with windows forms checkedboxlist

46 views Asked by At
namespace ZzCleaner
{
    public partial class Form1 : Form
    {
        //private CheckedListBox FoldersToClean;
        //private TextBox textBox2; 
        public Form1()
        {
            InitializeComponent();
        }

        //Making directories
        private void ZzCleaner_Load(object sender, EventArgs e) 
        {
            //Checking if index is really - 1, but here shows 0. 
            if (!string.IsNullOrEmpty(Properties.Settings.Default.FoldersToClear))  
            { 
                StringBuilder selectedItems = new StringBuilder();
                StringBuilder indexOf = new StringBuilder();
 
                foreach (object item in FoldersToClear.Items)
                {
                    
                    selectedItems.Append(item.ToString());
                    selectedItems.Append("," + FoldersToClear.Items.IndexOf(item));

                }
                string selectedItemsString = selectedItems.ToString();

                //And here where I actually need it, it shows -1 it pops out the MessageBox 2-times
                Properties.Settings.Default.FoldersToClear.Split(',') 
                    .ToList()
                    .ForEach(item =>
                    {   
                        try
                        {
                            var index = this.FoldersToClear.Items.IndexOf(item);
                            var checkbox = this.FoldersToClear.GetItemChecked(index);
                            FoldersToClear.SetItemChecked(index, checkbox);
                        }
                        catch (ArgumentOutOfRangeException ex)
                        {
                            MessageBox.Show(ex.Message + selectedItemsString); 
                        }
                    });
            }
        }

        private void FoldersToClean_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            
        }

        private void Form1_FormClosing(object sender, EventArgs e)
        {
            var indices = this.FoldersToClear.CheckedItems.Cast<string>().ToArray();
            /*This was meant to be for test but it doesn't show me anything. Not sure if FormClosing event even works
            //string storedFolders = string.Join(",", indices); 
            //Console.WriteLine(storedFolders); */
            Properties.Settings.Default.FoldersToClear = string.Join(",", indices);
            Properties.Settings.Default.Save();

            
        }

        private void removeBtn2_Click(object sender, EventArgs e) //Add
        {
            if (textBox2.Text == "")
            {
                MessageBox.Show(this, "Choose a folder to add. ");
                return; 
            }

            string folder = textBox2.Text;
            textBox2.Text = "";

            FoldersToClear.Items.Add(folder);
        }

        private void removeBtn1_Click(object sender, EventArgs e) //Remove
        {
            if(FoldersToClear.Items.Count != 0)
            {
                if(FoldersToClear.SelectedIndex != -1)
                {
                    int folderToDelete = FoldersToClear.SelectedIndex;
                    FoldersToClear.Items.RemoveAt(folderToDelete);
                    
                }
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }

    }
}

I am buidling a windows forms app, and I ran accross a problem where it's throwing exception ArgumentOutOfRangeException, where index is -1 not valid for index, but in test case like it's above it's 0.

Also Form1_FormClosing function doesn't even work, it doesn't work in console and not even in MessageBox..

Point of it right now, it's just storing the data, so when I close it and reopen it, it contains saved data (checkboxes checked or not, and to have folders that were added).

0

There are 0 answers