Avatar billede lajer Nybegynder
28. juni 2005 - 10:57 Der er 7 kommentarer og
1 løsning

Sætte tag på items i CheckedListBox

Hej :)

Jeg har et mindre problem med en CheckedListBox control.

Jeg adder x antal items til denne CheckedListBox - men hvordan pokker for jeg sat et tag på hver enkelt item?

Jeg troede jo nok naivt, at der fandtes en CheckListBoxItem - eller måske bare en ListBoxItem, som jeg kunne lave en instans af og sætte tag her på, men nej :)

Så, hvordan er det så muligt?
Avatar billede Syska Mester
28. juni 2005 - 11:29 #1
ikke verdens bedste C# haj, men smid lidt kode og jeg kan kigge på hvad du gør forkert....
Avatar billede lajer Nybegynder
28. juni 2005 - 11:36 #2
Det er jo pointen... Hvad for noget kode :)

Det der kun mulighed for at give et object som argument i .Item.Add();

Men her er hvordan jeg tilføjer et Item.

customerGroup.Items.Add(group.SelectSingleNode("name").InnerText);

Det jeg havde håbet, var at jeg kunne gøre noget i stil med:

CheckedListBoxItem item = new CheckedListBoxItem();
item.Text = "Tester";
item.Tag = "En eller anden value";

customerGroup.Items.Add(item);
Avatar billede Syska Mester
28. juni 2005 - 11:54 #3
ohh, læste det som en anden list ting, tror ikke du kan det på CheckedListBox, så skal du nok have gang i ListView.... der ved jeg det er muligt men kræver list mere kode :-)
Avatar billede Syska Mester
28. juni 2005 - 12:05 #4
ListView listView1 = new ListView();
listView1.CheckBoxes = true;

listView1.View = View.Details;
listView1.Size = new System.Drawing.Size(220, 200);

this.Controls.Add( listView1 );

ColumnHeader header = new ColumnHeader();

header.Text = "check list";
header.Width = 200;

listView1.Columns.Add( header );

ListViewItem item = new ListViewItem("første ting");
item.Tag = "første tag";

listView1.Items.Add( item );

item = new ListViewItem("anden ting");
item.Tag = "anden tag";

listView1.Items.Add( item );
Avatar billede lajer Nybegynder
28. juni 2005 - 12:25 #5
Bestemt ikke nogen dum idé. Det er godtaget faktisk :)

Smid et svar!
Avatar billede Syska Mester
28. juni 2005 - 13:02 #6
svar
Avatar billede segato Nybegynder
30. juni 2005 - 12:45 #7
using System;
using System.Windows.Forms;

namespace Nationalbanken.Common.CustomControls.ListBox
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class CheckedListBoxEx : System.Windows.Forms.CheckedListBox
    {
        ListboxItemCollection m_listItemCollection = null;
        bool m_runtimeRefresh = false;

        public CheckedListBoxEx()
        {   
            this.DisplayMember = "Name";
            this.ValueMember = "ID";
           
            this.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.CheckedListBoxEx_ItemCheck);
           
        }

        public void CheckSelectedItem()
        {
            if( this.SelectedIndex < 0 )
                return;
           
            if( this.GetItemChecked(this.SelectedIndex) )
                this.SetItemChecked(this.SelectedIndex,false);
            else
                this.SetItemChecked(this.SelectedIndex,true);
        }

        public void MoveSelectedItemUp()
        {
            if(this.SelectedIndex < 1)
                return;
           
            ListboxItem item = (ListboxItem)this.SelectedItem;

            if( item == null )
                return;

            m_listItemCollection.Insert(this.SelectedIndex-1,item);
            m_listItemCollection.RemoveAt(this.SelectedIndex+1);

            this.SelectedIndex = this.SelectedIndex-1;

            RefreshList();
        }

        public void MoveSelectedItemDown()
        {
            if(this.SelectedIndex >= this.Items.Count-1)
                return;
           
            ListboxItem item = (ListboxItem)this.SelectedItem;

            if( item == null )
                return;

            m_listItemCollection.Insert(this.SelectedIndex+2,item);
            m_listItemCollection.RemoveAt(this.SelectedIndex);

            this.SelectedIndex = this.SelectedIndex+1;

            RefreshList();
        }

        public void RefreshList()
        {
            BindingManagerBase bm = this.BindingContext[m_listItemCollection];
            CurrencyManager cm = (CurrencyManager) bm;

            if (cm != null)
            {
                cm.Refresh();
                refreshCheckBoxes();
            }
        }

        void refreshCheckBoxes()
        {
            if( this.Items == null || this.Items.Count < 1)
                return;

            m_runtimeRefresh = true;
            if(m_listItemCollection == null)
                return;

            int i = 0;
            foreach(ListboxItem item in m_listItemCollection)
            {
                if(item.Checked)
                    this.SetItemChecked(i,true);
                else
                    this.SetItemChecked(i,false);

                i++;
            }

            m_runtimeRefresh = false;
        }

        private void InitializeComponent()
        {
        }       

        private void CheckedListBoxEx_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e)
        {
            if(m_runtimeRefresh)
                return;

            ListboxItem item = m_listItemCollection[this.SelectedIndex];
            if(CheckState.Checked == this.GetItemCheckState(this.SelectedIndex))
                item.Checked = false;
            else
                item.Checked = true;           

        }

        public void RemoveItem(int index)
        {
            m_listItemCollection.RemoveAt(index);
            RefreshList();
        }

        public void AddItem(ListboxItem item)
        {
            m_listItemCollection.Add(item);
            RefreshList();
        }

        public new ListboxItemCollection Items
        {
            get
            {
                if(m_listItemCollection == null)
                    return new ListboxItemCollection();
                else
                    return m_listItemCollection;
            }
        }

        public new ListboxItemCollection DataSource
        {
            get
            {               
                return m_listItemCollection;
            }
            set
            {
                m_listItemCollection = value;
                base.DataSource = m_listItemCollection;               
                refreshCheckBoxes();
            }
        }
    }
}


using System;

namespace Nationalbanken.Common.CustomControls.ListBox
{
    /// <summary>
    /// Summary description for IDName.
    /// </summary>
   
    public class ListboxItem
    {
        int m_ID = 0;
        private int    m_ImageIndex = 1;
        string m_Name = string.Empty;
        bool m_checked = false;

        public int ID
        {
            get{ return m_ID; }
            set{ m_ID = value; }
        }

        public string Name
        {
            get{ return m_Name; }
            set{ m_Name = value; }
        }

        public bool Checked
        {
            set{ m_checked = value;}
            get{ return m_checked;}
        }

        public int ImageIndex
        {
            get {return m_ImageIndex;}
            set {m_ImageIndex = value;}
        }
    }
   
}

using System;
using System.Collections;

namespace Nationalbanken.Common.CustomControls.ListBox
{   
    /// <summary>
    /// Xxxx
    /// </summary>
    public class ListboxItemCollection : CollectionBase
    {
        public void Add(ListboxItem item)
        {
            List.Add(item);
           
        }

        public bool Contains(ListboxItem item) 
        {       
            return( List.Contains( item ) );
        }

        public int IndexOf(ListboxItem item) 
        {           
            return( List.IndexOf( item ) );
        }

        public void Insert(int index, ListboxItem item) 
        {
            List.Insert(index, item );           
        }

        public ListboxItem this[ int index ] 
        {
            get 
            {
                return( (ListboxItem) List[index] );
            }
            set 
            {
                List[index] = value;               
            }
        }

        public ListboxItemCollection Clone()
        {
            ListboxItemCollection clonedItems = new ListboxItemCollection();
            foreach(ListboxItem item in this)
            {
                ListboxItem lItem = new ListboxItem();
                lItem.Name = item.Name;
                lItem.ID = item.ID;
                lItem.Checked = item.Checked;
                lItem.ImageIndex = item.ImageIndex;

                clonedItems.Add(lItem);
            }
            return clonedItems;
        }
    }


}
Avatar billede segato Nybegynder
30. juni 2005 - 12:47 #8
Har pastet en custom ListBox der kan lige de ting du søger. Som du kan se kommer det fra 3 filer, en listbox, en listboxitem og en listboxitemcollection.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester