且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

自定义控件---重写Listbox实现item图标变换和item点击事件

更新时间:2022-09-02 08:42:58

  博客开通有一阵了,就是没有时间写,遗憾啊。!
      这几天做了个排序的自定义控件,在listbox item里放是button 并支持图标的交替变换
效果如下:
自定义控件---重写Listbox实现item图标变换和item点击事件

把代码贴上:

自定义控件---重写Listbox实现item图标变换和item点击事件
  1自定义控件---重写Listbox实现item图标变换和item点击事件using System;
  2自定义控件---重写Listbox实现item图标变换和item点击事件using System.Collections.Generic;
  3自定义控件---重写Listbox实现item图标变换和item点击事件using System.Collections;
  4自定义控件---重写Listbox实现item图标变换和item点击事件using System.Text;
  5自定义控件---重写Listbox实现item图标变换和item点击事件using System.ComponentModel;
  6自定义控件---重写Listbox实现item图标变换和item点击事件using System.Windows.Forms;
  7自定义控件---重写Listbox实现item图标变换和item点击事件using System.Drawing;
  8自定义控件---重写Listbox实现item图标变换和item点击事件using System.Drawing.Text;
  9自定义控件---重写Listbox实现item图标变换和item点击事件using System.Data;
 10自定义控件---重写Listbox实现item图标变换和item点击事件
 11自定义控件---重写Listbox实现item图标变换和item点击事件namespace SQLAnalysis
 12自定义控件---重写Listbox实现item图标变换和item点击事件{
 13自定义控件---重写Listbox实现item图标变换和item点击事件    public class ListBoxEx : ListBox
 14自定义控件---重写Listbox实现item图标变换和item点击事件    {
 15自定义控件---重写Listbox实现item图标变换和item点击事件        public ListBoxEx()
 16自定义控件---重写Listbox实现item图标变换和item点击事件        {
 17自定义控件---重写Listbox实现item图标变换和item点击事件            this.DrawMode = DrawMode.OwnerDrawFixed;
 18自定义控件---重写Listbox实现item图标变换和item点击事件            btnList = new List<Button>();
 19自定义控件---重写Listbox实现item图标变换和item点击事件        }

 20自定义控件---重写Listbox实现item图标变换和item点击事件        public override DrawMode DrawMode
 21自定义控件---重写Listbox实现item图标变换和item点击事件        {
 22自定义控件---重写Listbox实现item图标变换和item点击事件            get
 23自定义控件---重写Listbox实现item图标变换和item点击事件            {
 24自定义控件---重写Listbox实现item图标变换和item点击事件                return DrawMode.OwnerDrawFixed;
 25自定义控件---重写Listbox实现item图标变换和item点击事件            }

 26自定义控件---重写Listbox实现item图标变换和item点击事件            set
 27自定义控件---重写Listbox实现item图标变换和item点击事件            {
 28自定义控件---重写Listbox实现item图标变换和item点击事件                base.DrawMode = DrawMode.OwnerDrawFixed;
 29自定义控件---重写Listbox实现item图标变换和item点击事件            }

 30自定义控件---重写Listbox实现item图标变换和item点击事件        }

 31自定义控件---重写Listbox实现item图标变换和item点击事件       
 32自定义控件---重写Listbox实现item图标变换和item点击事件        protected override void OnResize(EventArgs e)
 33自定义控件---重写Listbox实现item图标变换和item点击事件        {
 34自定义控件---重写Listbox实现item图标变换和item点击事件            base.OnResize(e);
 35自定义控件---重写Listbox实现item图标变换和item点击事件            this.Refresh();
 36自定义控件---重写Listbox实现item图标变换和item点击事件        }

 37自定义控件---重写Listbox实现item图标变换和item点击事件
 38自定义控件---重写Listbox实现item图标变换和item点击事件
 39自定义控件---重写Listbox实现item图标变换和item点击事件
 40自定义控件---重写Listbox实现item图标变换和item点击事件
 41自定义控件---重写Listbox实现item图标变换和item点击事件        public Button FindItemButton(int index)
 42自定义控件---重写Listbox实现item图标变换和item点击事件        {
 43自定义控件---重写Listbox实现item图标变换和item点击事件            
 44自定义控件---重写Listbox实现item图标变换和item点击事件        // return this.Controls.Find(this.Name + "$ItemComboBox" + index.ToString(), true)[0];
 45自定义控件---重写Listbox实现item图标变换和item点击事件            if (index >= btnList.Count)
 46自定义控件---重写Listbox实现item图标变换和item点击事件                return null;
 47自定义控件---重写Listbox实现item图标变换和item点击事件            return btnList[index];
 48自定义控件---重写Listbox实现item图标变换和item点击事件           
 49自定义控件---重写Listbox实现item图标变换和item点击事件        }

 50自定义控件---重写Listbox实现item图标变换和item点击事件
 51自定义控件---重写Listbox实现item图标变换和item点击事件        /// <summary>
 52自定义控件---重写Listbox实现item图标变换和item点击事件        /// 提供删除item项
 53自定义控件---重写Listbox实现item图标变换和item点击事件        /// </summary>
 54自定义控件---重写Listbox实现item图标变换和item点击事件        /// <param name="index"></param>

 55自定义控件---重写Listbox实现item图标变换和item点击事件        public void RemoveItem(int index)
 56自定义控件---重写Listbox实现item图标变换和item点击事件        {
 57自定义控件---重写Listbox实现item图标变换和item点击事件            this.Items.RemoveAt(index);
 58自定义控件---重写Listbox实现item图标变换和item点击事件            btnList[index].Parent = null;
 59自定义控件---重写Listbox实现item图标变换和item点击事件            btnList[index] = null;
 60自定义控件---重写Listbox实现item图标变换和item点击事件            //btnList[index].Dispose();
 61自定义控件---重写Listbox实现item图标变换和item点击事件            
 62自定义控件---重写Listbox实现item图标变换和item点击事件            btnList.RemoveAt(index);
 63自定义控件---重写Listbox实现item图标变换和item点击事件            this.Refresh();
 64自定义控件---重写Listbox实现item图标变换和item点击事件        }

 65自定义控件---重写Listbox实现item图标变换和item点击事件        /// <summary>
 66自定义控件---重写Listbox实现item图标变换和item点击事件        /// 提供移动item项
 67自定义控件---重写Listbox实现item图标变换和item点击事件        /// </summary>
 68自定义控件---重写Listbox实现item图标变换和item点击事件        /// <param name="offset"></param>

 69自定义控件---重写Listbox实现item图标变换和item点击事件        public void MoveItem(int offset)
 70自定义控件---重写Listbox实现item图标变换和item点击事件        {
 71自定义控件---重写Listbox实现item图标变换和item点击事件            
 72自定义控件---重写Listbox实现item图标变换和item点击事件            int index = this.SelectedIndex + offset;
 73自定义控件---重写Listbox实现item图标变换和item点击事件            if (index > -1 && index < this.Items.Count)
 74自定义控件---重写Listbox实现item图标变换和item点击事件            {
 75自定义控件---重写Listbox实现item图标变换和item点击事件                int oldSelectedIndex = this.SelectedIndex;
 76自定义控件---重写Listbox实现item图标变换和item点击事件                Object item = this.SelectedItem;
 77自定义控件---重写Listbox实现item图标变换和item点击事件                this.Items.RemoveAt(oldSelectedIndex);
 78自定义控件---重写Listbox实现item图标变换和item点击事件                this.Items.Insert(index, item);
 79自定义控件---重写Listbox实现item图标变换和item点击事件                Button btn = btnList[oldSelectedIndex];
 80自定义控件---重写Listbox实现item图标变换和item点击事件                btnList.RemoveAt(oldSelectedIndex);
 81自定义控件---重写Listbox实现item图标变换和item点击事件                btnList.Insert(index, btn);
 82自定义控件---重写Listbox实现item图标变换和item点击事件
 83自定义控件---重写Listbox实现item图标变换和item点击事件                this.Refresh();
 84自定义控件---重写Listbox实现item图标变换和item点击事件            }

 85自定义控件---重写Listbox实现item图标变换和item点击事件            else
 86自定义控件---重写Listbox实现item图标变换和item点击事件            {
 87自定义控件---重写Listbox实现item图标变换和item点击事件                MessageBox.Show("不是可用的移动矢量");
 88自定义控件---重写Listbox实现item图标变换和item点击事件
 89自定义控件---重写Listbox实现item图标变换和item点击事件            }

 90自定义控件---重写Listbox实现item图标变换和item点击事件
 91自定义控件---重写Listbox实现item图标变换和item点击事件        }

 92自定义控件---重写Listbox实现item图标变换和item点击事件
 93自定义控件---重写Listbox实现item图标变换和item点击事件        private ToggleItem GetNexttoggleItem(ToggleItem tog)
 94自定义控件---重写Listbox实现item图标变换和item点击事件        {
 95自定义控件---重写Listbox实现item图标变换和item点击事件            int index = -1;
 96自定义控件---重写Listbox实现item图标变换和item点击事件            for (int i = 0; i < ToggleItemList.Count; i++)
 97自定义控件---重写Listbox实现item图标变换和item点击事件            {
 98自定义控件---重写Listbox实现item图标变换和item点击事件                ToggleItem item =(ToggleItem)ToggleItemList[i];
 99自定义控件---重写Listbox实现item图标变换和item点击事件                if (item.Tag == tog.Tag)
100自定义控件---重写Listbox实现item图标变换和item点击事件                {
101自定义控件---重写Listbox实现item图标变换和item点击事件                    index = i;
102自定义控件---重写Listbox实现item图标变换和item点击事件                    break;
103自定义控件---重写Listbox实现item图标变换和item点击事件                }

104自定义控件---重写Listbox实现item图标变换和item点击事件            }

105自定义控件---重写Listbox实现item图标变换和item点击事件            return ((ToggleItem)ToggleItemList[(index + 1% ToggleItemList.Count]);
106自定义控件---重写Listbox实现item图标变换和item点击事件        }

107自定义控件---重写Listbox实现item图标变换和item点击事件        private List<ToggleItem> toggleItemList ;//List<ToggleItem> toggleItemList = new List<ToggleItem>();
108自定义控件---重写Listbox实现item图标变换和item点击事件        [Bindable(false), Browsable(false)]
109自定义控件---重写Listbox实现item图标变换和item点击事件        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]   
110自定义控件---重写Listbox实现item图标变换和item点击事件        public List<ToggleItem> ToggleItemList
111自定义控件---重写Listbox实现item图标变换和item点击事件        {
112自定义控件---重写Listbox实现item图标变换和item点击事件            get
113自定义控件---重写Listbox实现item图标变换和item点击事件            {
114自定义控件---重写Listbox实现item图标变换和item点击事件                if (toggleItemList == null)
115自定义控件---重写Listbox实现item图标变换和item点击事件                    toggleItemList = new List<ToggleItem>();
116自定义控件---重写Listbox实现item图标变换和item点击事件                return toggleItemList;
117自定义控件---重写Listbox实现item图标变换和item点击事件            }

118自定义控件---重写Listbox实现item图标变换和item点击事件
119自定义控件---重写Listbox实现item图标变换和item点击事件            set
120自定义控件---重写Listbox实现item图标变换和item点击事件            {
121自定义控件---重写Listbox实现item图标变换和item点击事件                if (toggleItemList == null)
122自定义控件---重写Listbox实现item图标变换和item点击事件                    toggleItemList = new List<ToggleItem>();
123自定义控件---重写Listbox实现item图标变换和item点击事件                toggleItemList = value;
124自定义控件---重写Listbox实现item图标变换和item点击事件            }

125自定义控件---重写Listbox实现item图标变换和item点击事件        }

126自定义控件---重写Listbox实现item图标变换和item点击事件
127自定义控件---重写Listbox实现item图标变换和item点击事件        //主要重写事件
128自定义控件---重写Listbox实现item图标变换和item点击事件        protected override void OnDrawItem(DrawItemEventArgs e)
129自定义控件---重写Listbox实现item图标变换和item点击事件        {
130自定义控件---重写Listbox实现item图标变换和item点击事件            this.DrawMode = DrawMode.OwnerDrawFixed;
131自定义控件---重写Listbox实现item图标变换和item点击事件            this.ItemHeight = 22;
132自定义控件---重写Listbox实现item图标变换和item点击事件            e.DrawBackground();
133自定义控件---重写Listbox实现item图标变换和item点击事件            e.DrawFocusRectangle();
134自定义控件---重写Listbox实现item图标变换和item点击事件            Brush myBrush = Brushes.Black;
135自定义控件---重写Listbox实现item图标变换和item点击事件            if (e.Index > -1 && e.Index < this.Items.Count)
136自定义控件---重写Listbox实现item图标变换和item点击事件            {
137自定义控件---重写Listbox实现item图标变换和item点击事件                string drawString = (e.Index + 1)+ " " + this.Items[e.Index].ToString();
138自定义控件---重写Listbox实现item图标变换和item点击事件                
139自定义控件---重写Listbox实现item图标变换和item点击事件
140自定义控件---重写Listbox实现item图标变换和item点击事件                e.Graphics.DrawString(drawString, e.Font, new SolidBrush(e.ForeColor), e.Bounds, 
141自定义控件---重写Listbox实现item图标变换和item点击事件
142自定义控件---重写Listbox实现item图标变换和item点击事件StringFormat.GenericDefault);
143自定义控件---重写Listbox实现item图标变换和item点击事件                AddButtonToItem(e);
144自定义控件---重写Listbox实现item图标变换和item点击事件            }

145自定义控件---重写Listbox实现item图标变换和item点击事件            base.OnDrawItem(e);
146自定义控件---重写Listbox实现item图标变换和item点击事件
147自定义控件---重写Listbox实现item图标变换和item点击事件        }

148自定义控件---重写Listbox实现item图标变换和item点击事件
149自定义控件---重写Listbox实现item图标变换和item点击事件        private List<Button> btnList = null;
150自定义控件---重写Listbox实现item图标变换和item点击事件        protected void AddButtonToItem(DrawItemEventArgs e)
151自定义控件---重写Listbox实现item图标变换和item点击事件        {
152自定义控件---重写Listbox实现item图标变换和item点击事件            if (btnList.Count <= e.Index)
153自定义控件---重写Listbox实现item图标变换和item点击事件            {
154自定义控件---重写Listbox实现item图标变换和item点击事件                btnList.Add(new Button());
155自定义控件---重写Listbox实现item图标变换和item点击事件                Button btn = btnList[e.Index];
156自定义控件---重写Listbox实现item图标变换和item点击事件                btn.BackColor = System.Drawing.Color.LightSkyBlue ;
157自定义控件---重写Listbox实现item图标变换和item点击事件                btn.Name = this.Name + "$ItemButton" + e.Index.ToString();
158自定义控件---重写Listbox实现item图标变换和item点击事件                btn.Width = 20;
159自定义控件---重写Listbox实现item图标变换和item点击事件                btn.Height = 20;
160自定义控件---重写Listbox实现item图标变换和item点击事件                btn.ImageAlign = ContentAlignment.MiddleCenter;
161自定义控件---重写Listbox实现item图标变换和item点击事件                btn.TextImageRelation = TextImageRelation.ImageAboveText;
162自定义控件---重写Listbox实现item图标变换和item点击事件                if (toggleItemList.Count > 0)
163自定义控件---重写Listbox实现item图标变换和item点击事件                {
164自定义控件---重写Listbox实现item图标变换和item点击事件                    
165自定义控件---重写Listbox实现item图标变换和item点击事件                    btn.BackgroundImage = ((ToggleItem)toggleItemList[0]).BGImage;
166自定义控件---重写Listbox实现item图标变换和item点击事件                    //btn.Width = toggleItemList[0].BGImage.Width;
167自定义控件---重写Listbox实现item图标变换和item点击事件                    //btn.Height = toggleItemList[0].BGImage.Height;
168自定义控件---重写Listbox实现item图标变换和item点击事件                    btn.Tag = ((ToggleItem)toggleItemList[0]).Tag;
169自定义控件---重写Listbox实现item图标变换和item点击事件                }

170自定义控件---重写Listbox实现item图标变换和item点击事件                btn.Parent = this;
171自定义控件---重写Listbox实现item图标变换和item点击事件                btn.Click += new EventHandler(ItemButtonClickHandler);
172自定义控件---重写Listbox实现item图标变换和item点击事件            }

173自定义控件---重写Listbox实现item图标变换和item点击事件            Button bt = btnList[e.Index];
174自定义控件---重写Listbox实现item图标变换和item点击事件            bt.Left = this.Width - bt.Width - 20;
175自定义控件---重写Listbox实现item图标变换和item点击事件            bt.Top = e.Bounds.Top;
176自定义控件---重写Listbox实现item图标变换和item点击事件           
177自定义控件---重写Listbox实现item图标变换和item点击事件        }

178自定义控件---重写Listbox实现item图标变换和item点击事件        /// <summary>
179自定义控件---重写Listbox实现item图标变换和item点击事件        /// item button双击事件;
180自定义控件---重写Listbox实现item图标变换和item点击事件        /// </summary>
181自定义控件---重写Listbox实现item图标变换和item点击事件        /// <param name="sender"></param>
182自定义控件---重写Listbox实现item图标变换和item点击事件        /// <param name="e"></param>

183自定义控件---重写Listbox实现item图标变换和item点击事件        protected void ItemButtonClickHandler(object sender, EventArgs e)
184自定义控件---重写Listbox实现item图标变换和item点击事件        {
185自定义控件---重写Listbox实现item图标变换和item点击事件            int index = -1;
186自定义控件---重写Listbox实现item图标变换和item点击事件            if (sender is Button)
187自定义控件---重写Listbox实现item图标变换和item点击事件                index = this.IndexFromPoint(((Button)sender).Location);
188自定义控件---重写Listbox实现item图标变换和item点击事件
189自定义控件---重写Listbox实现item图标变换和item点击事件            if (index == -1)
190自定义控件---重写Listbox实现item图标变换和item点击事件                return;
191自定义控件---重写Listbox实现item图标变换和item点击事件
192自定义控件---重写Listbox实现item图标变换和item点击事件            Button btn = sender as Button;
193自定义控件---重写Listbox实现item图标变换和item点击事件            ToggleItem togold = new ToggleItem((string)btn.Tag, btn.BackgroundImage);
194自定义控件---重写Listbox实现item图标变换和item点击事件            ToggleItem tognew = this.GetNexttoggleItem(togold);
195自定义控件---重写Listbox实现item图标变换和item点击事件            //btn.Width = tognew.BGImage.Width;
196自定义控件---重写Listbox实现item图标变换和item点击事件            //btn.Height = tognew.BGImage.Height;
197自定义控件---重写Listbox实现item图标变换和item点击事件            btn.BackgroundImage = tognew.BGImage;
198自定义控件---重写Listbox实现item图标变换和item点击事件           
199自定义控件---重写Listbox实现item图标变换和item点击事件            btn.Tag = tognew.Tag;
200自定义控件---重写Listbox实现item图标变换和item点击事件
201自定义控件---重写Listbox实现item图标变换和item点击事件            ItemEventHandler handler = (ItemEventHandler)Events[ItemLabelClickObj];
202自定义控件---重写Listbox实现item图标变换和item点击事件            if (handler != null)
203自定义控件---重写Listbox实现item图标变换和item点击事件            {   
204自定义控件---重写Listbox实现item图标变换和item点击事件                
205自定义控件---重写Listbox实现item图标变换和item点击事件                handler(sender, new ItemButtonClickEventArgs(index)); ;
206自定义控件---重写Listbox实现item图标变换和item点击事件            }

207自定义控件---重写Listbox实现item图标变换和item点击事件        }

208自定义控件---重写Listbox实现item图标变换和item点击事件
209自定义控件---重写Listbox实现item图标变换和item点击事件       
210自定义控件---重写Listbox实现item图标变换和item点击事件
211自定义控件---重写Listbox实现item图标变换和item点击事件        自定义控件---重写Listbox实现item图标变换和item点击事件
243自定义控件---重写Listbox实现item图标变换和item点击事件    }

244自定义控件---重写Listbox实现item图标变换和item点击事件    [Serializable]
245自定义控件---重写Listbox实现item图标变换和item点击事件    public class ToggleItem
246自定义控件---重写Listbox实现item图标变换和item点击事件    {
247自定义控件---重写Listbox实现item图标变换和item点击事件        private string tag;
248自定义控件---重写Listbox实现item图标变换和item点击事件        private Image bgImage;
249自定义控件---重写Listbox实现item图标变换和item点击事件        public ToggleItem()
250自定义控件---重写Listbox实现item图标变换和item点击事件        {
251自定义控件---重写Listbox实现item图标变换和item点击事件        }

252自定义控件---重写Listbox实现item图标变换和item点击事件        public ToggleItem(string tag, Image bg)
253自定义控件---重写Listbox实现item图标变换和item点击事件       {
254自定义控件---重写Listbox实现item图标变换和item点击事件           this.tag = tag;
255自定义控件---重写Listbox实现item图标变换和item点击事件           this.bgImage = bg;
256自定义控件---重写Listbox实现item图标变换和item点击事件       }

257自定义控件---重写Listbox实现item图标变换和item点击事件       public string Tag
258自定义控件---重写Listbox实现item图标变换和item点击事件       {
259自定义控件---重写Listbox实现item图标变换和item点击事件            get
260自定义控件---重写Listbox实现item图标变换和item点击事件            {
261自定义控件---重写Listbox实现item图标变换和item点击事件                return tag;
262自定义控件---重写Listbox实现item图标变换和item点击事件           }

263自定义控件---重写Listbox实现item图标变换和item点击事件           set
264自定义控件---重写Listbox实现item图标变换和item点击事件           {
265自定义控件---重写Listbox实现item图标变换和item点击事件                tag = value;
266自定义控件---重写Listbox实现item图标变换和item点击事件            }

267自定义控件---重写Listbox实现item图标变换和item点击事件        }

268自定义控件---重写Listbox实现item图标变换和item点击事件
269自定义控件---重写Listbox实现item图标变换和item点击事件      public Image BGImage
270自定义控件---重写Listbox实现item图标变换和item点击事件        {
271自定义控件---重写Listbox实现item图标变换和item点击事件           get
272自定义控件---重写Listbox实现item图标变换和item点击事件           {
273自定义控件---重写Listbox实现item图标变换和item点击事件               return bgImage;
274自定义控件---重写Listbox实现item图标变换和item点击事件           }

275自定义控件---重写Listbox实现item图标变换和item点击事件
276自定义控件---重写Listbox实现item图标变换和item点击事件           set
277自定义控件---重写Listbox实现item图标变换和item点击事件           {
278自定义控件---重写Listbox实现item图标变换和item点击事件               bgImage = value;
279自定义控件---重写Listbox实现item图标变换和item点击事件
280自定义控件---重写Listbox实现item图标变换和item点击事件           }

281自定义控件---重写Listbox实现item图标变换和item点击事件       }

282自定义控件---重写Listbox实现item图标变换和item点击事件
283自定义控件---重写Listbox实现item图标变换和item点击事件    }

284自定义控件---重写Listbox实现item图标变换和item点击事件
285自定义控件---重写Listbox实现item图标变换和item点击事件}
自定义控件---重写Listbox实现item图标变换和item点击事件



本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2009/09/30/1577101.html,如需转载请自行联系原作者