日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/8 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义控件---重写Listbox实现item图标变换和item点击事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


????? 博客開通有一陣了,就是沒有時間寫,遺憾啊。!
??????這幾天做了個排序的自定義控件,在listbox item里放是button 并支持圖標的交替變換
效果如下:

把代碼貼上:
  • ??1using?System; ?
  • ??2using?System.Collections.Generic; ?
  • ??3using?System.Collections; ?
  • ??4using?System.Text; ?
  • ??5using?System.ComponentModel; ?
  • ??6using?System.Windows.Forms; ?
  • ??7using?System.Drawing; ?
  • ??8using?System.Drawing.Text; ?
  • ??9using?System.Data; ?
  • ?
  • namespace?SQLAnalysis ?
  • { ?
  • ????public?class?ListBoxEx?:?ListBox ?
  • ????{ ?
  • ????????public?ListBoxEx() ?
  • ????????{ ?
  • ????????????this.DrawMode?=?DrawMode.OwnerDrawFixed; ?
  • ????????????btnList?=?new?List<Button>(); ?
  • ????????} ?
  • ????????public?override?DrawMode?DrawMode ?
  • ????????{ ?
  • ????????????get ?
  • ????????????{ ?
  • ????????????????return?DrawMode.OwnerDrawFixed; ?
  • ????????????} ?
  • ????????????set ?
  • ????????????{ ?
  • ????????????????base.DrawMode?=?DrawMode.OwnerDrawFixed; ?
  • ????????????} ?
  • ????????} ?
  • ??????? ?
  • ????????protected?override?void?OnResize(EventArgs?e) ?
  • ????????{ ?
  • ????????????base.OnResize(e); ?
  • ????????????this.Refresh(); ?
  • ????????} ?
  • ?
  • ?
  • ?
  • ?
  • ????????public?Button?FindItemButton(int?index) ?
  • ????????{ ?
  • ???????????? ?
  • ????????//?return?this.Controls.Find(this.Name?+?"$ItemComboBox"?+?index.ToString(),?true)[0]; ?
  • ????????????if?(index?>=?btnList.Count) ?
  • ????????????????return?null; ?
  • ????????????return?btnList[index]; ?
  • ??????????? ?
  • ????????} ?
  • ?
  • ????????///?<summary>?
  • ????????///?提供刪除item項 ?
  • ????????///?</summary>?
  • ????????///?<param?name="index"></param>?
  • ????????public?void?RemoveItem(int?index) ?
  • ????????{ ?
  • ????????????this.Items.RemoveAt(index); ?
  • ????????????btnList[index].Parent?=?null; ?
  • ????????????btnList[index]?=?null; ?
  • ????????????//btnList[index].Dispose(); ?
  • ???????????? ?
  • ????????????btnList.RemoveAt(index); ?
  • ????????????this.Refresh(); ?
  • ????????} ?
  • ????????///?<summary>?
  • ????????///?提供移動item項 ?
  • ????????///?</summary>?
  • ????????///?<param?name="offset"></param>?
  • ????????public?void?MoveItem(int?offset) ?
  • ????????{ ?
  • ???????????? ?
  • ????????????int?index?=?this.SelectedIndex?+?offset; ?
  • ????????????if?(index?>?-1?&&?index?<?this.Items.Count) ?
  • ????????????{ ?
  • ????????????????int?oldSelectedIndex?=?this.SelectedIndex; ?
  • ????????????????Object?item?=?this.SelectedItem; ?
  • ????????????????this.Items.RemoveAt(oldSelectedIndex); ?
  • ????????????????this.Items.Insert(index,?item); ?
  • ????????????????Button?btn?=?btnList[oldSelectedIndex]; ?
  • ????????????????btnList.RemoveAt(oldSelectedIndex); ?
  • ????????????????btnList.Insert(index,?btn); ?
  • ?
  • ????????????????this.Refresh(); ?
  • ????????????} ?
  • ????????????else ?
  • ????????????{ ?
  • ????????????????MessageBox.Show("不是可用的移動矢量"); ?
  • ?
  • ????????????} ?
  • ?
  • ????????} ?
  • ?
  • ????????private?ToggleItem?GetNexttoggleItem(ToggleItem?tog) ?
  • ????????{ ?
  • ????????????int?index?=?-1; ?
  • ????????????for?(int?i?=?0;?i?<?ToggleItemList.Count;?i++) ?
  • ????????????{ ?
  • ????????????????ToggleItem?item?=(ToggleItem)ToggleItemList[i]; ?
  • ????????????????if?(item.Tag?==?tog.Tag) ?
  • ????????????????{ ?
  • ????????????????????iindex?=?i; ?
  • ????????????????????break; ?
  • ????????????????} ?
  • ????????????} ?
  • ????????????return?((ToggleItem)ToggleItemList[(index?+?1)?%?ToggleItemList.Count]); ?
  • ????????} ?
  • ????????private?List<ToggleItem>?toggleItemList?;//List<ToggleItem>?toggleItemList?=?new?List<ToggleItem>(); ?
  • ????????[Bindable(false),?Browsable(false)] ?
  • ????????[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]??? ?
  • ????????public?List<ToggleItem>?ToggleItemList ?
  • ????????{ ?
  • ????????????get ?
  • ????????????{ ?
  • ????????????????if?(toggleItemList?==?null) ?
  • ????????????????????toggleItemList?=?new?List<ToggleItem>(); ?
  • ????????????????return?toggleItemList; ?
  • ????????????} ?
  • ?
  • ????????????set ?
  • ????????????{ ?
  • ????????????????if?(toggleItemList?==?null) ?
  • ????????????????????toggleItemList?=?new?List<ToggleItem>(); ?
  • ????????????????toggleItemList?=?value; ?
  • ????????????} ?
  • ????????} ?
  • ?
  • ????????//主要重寫事件 ?
  • ????????protected?override?void?OnDrawItem(DrawItemEventArgs?e) ?
  • ????????{ ?
  • ????????????this.DrawMode?=?DrawMode.OwnerDrawFixed; ?
  • ????????????this.ItemHeight?=?22; ?
  • ????????????e.DrawBackground(); ?
  • ????????????e.DrawFocusRectangle(); ?
  • ????????????Brush?myBrush?=?Brushes.Black; ?
  • ????????????if?(e.Index?>?-1?&&?e.Index?<?this.Items.Count) ?
  • ????????????{ ?
  • ????????????????string?drawString?=?(e.Index?+?1)+?"?"?+?this.Items[e.Index].ToString(); ?
  • ???????????????? ?
  • ?
  • ????????????????e.Graphics.DrawString(drawString,?e.Font,?new?SolidBrush(e.ForeColor),?e.Bounds,? ?
  • ?
  • StringFormat.GenericDefault); ?
  • ????????????????AddButtonToItem(e); ?
  • ????????????} ?
  • ????????????base.OnDrawItem(e); ?
  • ?
  • ????????} ?
  • ?
  • ????????private?List<Button>?btnList?=?null; ?
  • ????????protected?void?AddButtonToItem(DrawItemEventArgs?e) ?
  • ????????{ ?
  • ????????????if?(btnList.Count?<=?e.Index) ?
  • ????????????{ ?
  • ????????????????btnList.Add(new?Button()); ?
  • ????????????????Button?btn?=?btnList[e.Index]; ?
  • ????????????????btn.BackColor?=?System.Drawing.Color.LightSkyBlue?; ?
  • ????????????????btn.Name?=?this.Name?+?"$ItemButton"?+?e.Index.ToString(); ?
  • ????????????????btn.Width?=?20; ?
  • ????????????????btn.Height?=?20; ?
  • ????????????????btn.ImageAlign?=?ContentAlignment.MiddleCenter; ?
  • ????????????????btn.TextImageRelation?=?TextImageRelation.ImageAboveText; ?
  • ????????????????if?(toggleItemList.Count?>?0) ?
  • ????????????????{ ?
  • ???????????????????? ?
  • ????????????????????btn.BackgroundImage?=?((ToggleItem)toggleItemList[0]).BGImage; ?
  • ????????????????????//btn.Width?=?toggleItemList[0].BGImage.Width; ?
  • ????????????????????//btn.Height?=?toggleItemList[0].BGImage.Height; ?
  • ????????????????????btn.Tag?=?((ToggleItem)toggleItemList[0]).Tag; ?
  • ????????????????} ?
  • ????????????????btn.Parent?=?this; ?
  • ????????????????btn.Click?+=?new?EventHandler(ItemButtonClickHandler); ?
  • ????????????} ?
  • ????????????Button?bt?=?btnList[e.Index]; ?
  • ????????????bt.Left?=?this.Width?-?bt.Width?-?20; ?
  • ????????????bt.Top?=?e.Bounds.Top; ?
  • ??????????? ?
  • ????????} ?
  • ????????///?<summary>?
  • ????????///?item?button雙擊事件; ?
  • ????????///?</summary>?
  • ????????///?<param?name="sender"></param>?
  • ????????///?<param?name="e"></param>?
  • ????????protected?void?ItemButtonClickHandler(object?sender,?EventArgs?e) ?
  • ????????{ ?
  • ????????????int?index?=?-1; ?
  • ????????????if?(sender?is?Button) ?
  • ????????????????index?=?this.IndexFromPoint(((Button)sender).Location); ?
  • ?
  • ????????????if?(index?==?-1) ?
  • ????????????????return; ?
  • ?
  • ????????????Button?btn?=?sender?as?Button; ?
  • ????????????ToggleItem?togold?=?new?ToggleItem((string)btn.Tag,?btn.BackgroundImage); ?
  • ????????????ToggleItem?tognew?=?this.GetNexttoggleItem(togold); ?
  • ????????????//btn.Width?=?tognew.BGImage.Width; ?
  • ????????????//btn.Height?=?tognew.BGImage.Height; ?
  • ????????????btn.BackgroundImage?=?tognew.BGImage; ?
  • ??????????? ?
  • ????????????btn.Tag?=?tognew.Tag; ?
  • ?
  • ????????????ItemEventHandler?handler?=?(ItemEventHandler)Events[ItemLabelClickObj]; ?
  • ????????????if?(handler?!=?null) ?
  • ????????????{??? ?
  • ???????????????? ?
  • ????????????????handler(sender,?new?ItemButtonClickEventArgs(index));?; ?
  • ????????????} ?
  • ????????} ?
  • ?
  • ??????? ?
  • ?
  • ???????? ?
  • ????} ?
  • ????[Serializable] ?
  • ????public?class?ToggleItem ?
  • ????{ ?
  • ????????private?string?tag; ?
  • ????????private?Image?bgImage; ?
  • ????????public?ToggleItem() ?
  • ????????{ ?
  • ????????} ?
  • ????????public?ToggleItem(string?tag,?Image?bg) ?
  • ???????{ ?
  • ???????????this.tag?=?tag; ?
  • ???????????this.bgImage?=?bg; ?
  • ???????} ?
  • ???????public?string?Tag ?
  • ???????{ ?
  • ????????????get ?
  • ????????????{ ?
  • ????????????????return?tag; ?
  • ???????????} ?
  • ???????????set ?
  • ???????????{ ?
  • ????????????????tag?=?value; ?
  • ????????????} ?
  • ????????} ?
  • ?
  • ??????public?Image?BGImage ?
  • ????????{ ?
  • ???????????get ?
  • ???????????{ ?
  • ???????????????return?bgImage; ?
  • ???????????} ?
  • ?
  • ???????????set ?
  • ???????????{ ?
  • ???????????????bgImage?=?value; ?
  • ?
  • ???????????} ?
  • ???????} ?
  • ?
  • ????} ?
  • ?
  • } ?
  • ?
  • ? ?




  • ?
    本文轉自 破狼 51CTO博客,原文鏈接:http://blog.51cto.com/whitewolfblog/832641,如需轉載請自行聯系原作者


    總結

    以上是生活随笔為你收集整理的自定义控件---重写Listbox实现item图标变换和item点击事件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。