DropDownListBoxButton.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using System;
  2. using System.Windows.Forms;
  3. using System.ComponentModel;
  4. using CustomControls.BaseClasses;
  5. using CustomControls.HelperClasses;
  6. using System.Drawing.Design;
  7. namespace CustomControls.Win32Controls
  8. {
  9. public class DropDownListBoxButton:DropDownButtonBase
  10. {
  11. public delegate void ItemSelectedEventHandler(object sender, ItemSelectedEventArgs e);
  12. [Category("Action")]
  13. public event ItemSelectedEventHandler ItemSelected;
  14. private ListBox _List= new ListBox();
  15. private int _MaxDropDawnItems=8;
  16. private int _MinListWidth=140;
  17. protected override System.Windows.Forms.Control HostedControl
  18. {
  19. get
  20. {
  21. return _List;
  22. }
  23. }
  24. [Category("Behavior")]
  25. [DefaultValue(typeof(System.Int32),"140")]
  26. public int MinListWidth
  27. {
  28. get{return _MinListWidth;}
  29. set{_MinListWidth= value;}
  30. }
  31. [Category("Behavior")]
  32. [DefaultValue(typeof(System.Int32),"8")]
  33. public int MaxDropDownItems
  34. {
  35. get{return _MaxDropDawnItems;}
  36. set{_MaxDropDawnItems=value;}
  37. }
  38. [Browsable(false)]
  39. public ListBox List
  40. {
  41. get{return _List;}
  42. }
  43. public DropDownListBoxButton()
  44. {
  45. _List.BorderStyle=System.Windows.Forms.BorderStyle.None;
  46. _List.MouseUp+= new MouseEventHandler(List_MouseUp);
  47. }
  48. protected override void OnDropDown(EventArgs e)
  49. {
  50. base.OnDropDown(e);
  51. if (Text!=string.Empty) {_List.SelectedIndex=_List.FindString(Text);}
  52. else{_List.SelectedIndex=-1;}
  53. int lHeight,lWidth;
  54. lHeight=Math.Max(List.ItemHeight,Math.Min(MaxDropDownItems, List.Items.Count)*List.ItemHeight);
  55. lWidth=Math.Max(this.Width+20,MinListWidth);
  56. dropDownForm.Size= new System.Drawing.Size(lWidth,lHeight+4);
  57. }
  58. private void List_MouseUp(object sender , MouseEventArgs e)
  59. {
  60. State=Enumerations.ButtonState.Normal;
  61. OnItemSelected(new ItemSelectedEventArgs(List.SelectedItem,List.SelectedIndex));
  62. }
  63. protected override void OnNextItem()
  64. {
  65. if(_List.SelectedIndex<_List.Items.Count-1)
  66. {
  67. _List.SelectedIndex+=1;
  68. }
  69. }
  70. protected override void OnPrevItem()
  71. {
  72. if(_List.SelectedIndex>0)
  73. {
  74. _List.SelectedIndex-=1;
  75. }
  76. }
  77. protected override void OnSelectItem(bool DefaultValue)
  78. {
  79. if(DefaultValue)
  80. {
  81. if(List.Items.Count>0)
  82. {
  83. OnItemSelected(new ItemSelectedEventArgs(List.Items[0],0));
  84. }
  85. else
  86. {
  87. OnItemSelected(new ItemSelectedEventArgs(null,-1));
  88. }
  89. }
  90. else
  91. {
  92. OnItemSelected(new ItemSelectedEventArgs(_List.SelectedItem,_List.SelectedIndex));
  93. }
  94. }
  95. protected virtual void OnItemSelected(ItemSelectedEventArgs e)
  96. {
  97. if (ItemSelected!=null)
  98. {
  99. ItemSelected(this,e);
  100. }
  101. }
  102. }
  103. }