none
borrar Item desmarcado de un CheckListBox RRS feed

  • Pregunta

  • Me podra ayudar?, quisiera saber como puedo hacer para que se quite un elemento o item al momento de desmarcarlo de un CheckListBox Ayudaaa!! porfavor no he podido resolverlo.

    jueves, 2 de mayo de 2013 22:41

Respuestas

  • using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            private static extern bool PostMessage(IntPtr hWnd, uint uMsg, int wParam, int lParam);
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                for(int k = 0; k < checkedListBox1.Items.Count; k++)
                {
                    checkedListBox1.SetItemChecked(k, true);
                }
            }
    
            private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
            {
                if (e.NewValue == CheckState.Unchecked)
                {
                    PostMessage(this.Handle, 0x410, e.Index, 0);
                }
            }
    
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == 0x410)
                {
                    checkedListBox1.Items.RemoveAt((int)m.WParam);
                }
    
                base.WndProc(ref m);
            }
        }
    }
    

    En el ejemplo, la destrucción del item ocurre asincrónicamente. Primero se permite terminar al evento ItemCheck y se encola un mensaje privado. Recién cuando el mensaje es procesado, el item es removido.

    El mensaje, al que le podrías dar un nombre si tienes ganas, pasa el índice del ítem en el wParam de la función.

    • Marcado como respuesta Lizeth Puch viernes, 3 de mayo de 2013 14:31
    viernes, 3 de mayo de 2013 2:45

Todas las respuestas

  • using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            private static extern bool PostMessage(IntPtr hWnd, uint uMsg, int wParam, int lParam);
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                for(int k = 0; k < checkedListBox1.Items.Count; k++)
                {
                    checkedListBox1.SetItemChecked(k, true);
                }
            }
    
            private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
            {
                if (e.NewValue == CheckState.Unchecked)
                {
                    PostMessage(this.Handle, 0x410, e.Index, 0);
                }
            }
    
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == 0x410)
                {
                    checkedListBox1.Items.RemoveAt((int)m.WParam);
                }
    
                base.WndProc(ref m);
            }
        }
    }
    

    En el ejemplo, la destrucción del item ocurre asincrónicamente. Primero se permite terminar al evento ItemCheck y se encola un mensaje privado. Recién cuando el mensaje es procesado, el item es removido.

    El mensaje, al que le podrías dar un nombre si tienes ganas, pasa el índice del ítem en el wParam de la función.

    • Marcado como respuesta Lizeth Puch viernes, 3 de mayo de 2013 14:31
    viernes, 3 de mayo de 2013 2:45
  • Muchas Gracias!!! Es Justo lo que necesito!

    Lizeth Puch

    viernes, 3 de mayo de 2013 14:33