2 // ToolStripComboBox.cs
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 // Copyright (c) 2006 Jonathan Pobst
26 // Jonathan Pobst (monkey@jpobst.com)
30 using System.ComponentModel;
32 namespace System.Windows.Forms
34 [DefaultProperty ("Items")]
35 public class ToolStripComboBox : ToolStripControlHost
37 #region Public Constructors
38 public ToolStripComboBox () : base (new ToolStripComboBoxControl ())
42 public ToolStripComboBox (Control c) : base (c)
44 throw new NotSupportedException ();
47 public ToolStripComboBox (string name) : this ()
49 base.Control.Name = name;
53 #region Public Properties
55 public ComboBox ComboBox {
56 get { return (ComboBox)base.Control; }
59 [MonoTODO ("Stub, will not actually affect anything.")]
60 public int DropDownHeight {
65 [DefaultValue (ComboBoxStyle.DropDown)]
66 public ComboBoxStyle DropDownStyle {
67 get { return this.ComboBox.DropDownStyle; }
68 set { this.ComboBox.DropDownStyle = value; }
71 public int DropDownWidth {
72 get { return this.ComboBox.DropDownWidth; }
73 set { this.ComboBox.DropDownWidth = value; }
77 public bool DroppedDown {
78 get { return this.ComboBox.DroppedDown; }
79 set { this.ComboBox.DroppedDown = value; }
84 public bool IntegralHeight {
85 get { return this.ComboBox.IntegralHeight; }
86 set { this.ComboBox.IntegralHeight = value; }
90 public ComboBox.ObjectCollection Items {
91 get { return this.ComboBox.Items; }
96 public int MaxDropDownItems {
97 get { return this.ComboBox.MaxDropDownItems; }
98 set { this.ComboBox.MaxDropDownItems = value; }
103 public int MaxLength {
104 get { return this.ComboBox.MaxLength; }
105 set { this.ComboBox.MaxLength = value; }
109 public int SelectedIndex {
110 get { return this.ComboBox.SelectedIndex; }
112 this.ComboBox.SelectedIndex = value;
113 Text = Items [value].ToString ();
119 public Object SelectedItem {
120 get { return this.ComboBox.SelectedItem; }
121 set { this.ComboBox.SelectedItem = value; }
125 public string SelectedText {
126 get { return this.ComboBox.SelectedText; }
127 set { this.ComboBox.SelectedText = value; }
131 public int SelectionLength {
132 get { return this.ComboBox.SelectionLength; }
133 set { this.ComboBox.SelectionLength = value; }
137 public int SelectionStart {
138 get { return this.ComboBox.SelectionStart; }
139 set { this.ComboBox.SelectionStart = value; }
142 [DefaultValue (false)]
144 get { return this.ComboBox.Sorted; }
145 set { this.ComboBox.Sorted = value; }
149 #region Protected Properties
150 protected internal override Padding DefaultMargin { get { return new Padding (2); } }
151 protected override Size DefaultSize { get { return new Size (100, 22); } }
154 #region Public Methods
155 public void BeginUpdate ()
157 this.ComboBox.BeginUpdate ();
160 public void EndUpdate ()
162 this.ComboBox.EndUpdate ();
165 public int FindString (string s)
167 return this.ComboBox.FindString (s);
170 public int FindString (string s, int startIndex)
172 return this.ComboBox.FindString (s, startIndex);
175 public int FindStringExact (string s)
177 return this.ComboBox.FindStringExact (s);
180 public int FindStringExact (string s, int startIndex)
182 return this.ComboBox.FindStringExact (s, startIndex);
185 public int GetItemHeight (int index)
187 return this.ComboBox.GetItemHeight (index);
190 public override Size GetPreferredSize (Size constrainingSize)
192 return base.GetPreferredSize (constrainingSize);
195 public void Select (int start, int length)
197 this.ComboBox.Select (start, length);
200 public void SelectAll ()
202 this.ComboBox.SelectAll ();
205 public override string ToString ()
207 return this.ComboBox.ToString ();
211 #region Protected Methods
212 protected virtual void OnDropDown (EventArgs e)
214 EventHandler eh = (EventHandler)(Events [DropDownEvent]);
219 protected virtual void OnDropDownClosed (EventArgs e)
221 EventHandler eh = (EventHandler)(Events [DropDownClosedEvent]);
226 protected virtual void OnDropDownStyleChanged (EventArgs e)
228 EventHandler eh = (EventHandler)(Events [DropDownStyleChangedEvent]);
233 protected virtual void OnSelectedIndexChanged (EventArgs e)
235 EventHandler eh = (EventHandler)(Events [SelectedIndexChangedEvent]);
240 protected virtual void OnSelectionChangeCommitted (EventArgs e)
244 [MonoTODO ("Needs to hook into DropDownClosed and TextUpdate when ComboBox 2.0 has them.")]
245 protected override void OnSubscribeControlEvents (Control control)
247 base.OnSubscribeControlEvents (control);
249 this.ComboBox.DropDown += new EventHandler (HandleDropDown);
250 this.ComboBox.DropDownStyleChanged += new EventHandler (HandleDropDownStyleChanged);
251 this.ComboBox.SelectedIndexChanged += new EventHandler (HandleSelectedIndexChanged);
254 protected virtual void OnTextUpdate (EventArgs e)
256 EventHandler eh = (EventHandler)(Events [TextUpdateEvent]);
261 protected override void OnUnsubscribeControlEvents (Control control)
263 base.OnUnsubscribeControlEvents (control);
267 #region Public Events
268 static object DropDownEvent = new object ();
269 static object DropDownClosedEvent = new object ();
270 static object DropDownStyleChangedEvent = new object ();
271 static object SelectedIndexChangedEvent = new object ();
272 static object TextUpdateEvent = new object ();
275 [EditorBrowsable (EditorBrowsableState.Never)]
276 public new event EventHandler DoubleClick {
277 add { base.DoubleClick += value; }
278 remove { base.DoubleClick -= value; }
281 public event EventHandler DropDown {
282 add { Events.AddHandler (DropDownEvent, value); }
283 remove { Events.RemoveHandler (DropDownEvent, value); }
286 public event EventHandler DropDownClosed {
287 add { Events.AddHandler (DropDownClosedEvent, value); }
288 remove { Events.RemoveHandler (DropDownClosedEvent, value); }
291 public event EventHandler DropDownStyleChanged {
292 add { Events.AddHandler (DropDownStyleChangedEvent, value); }
293 remove { Events.RemoveHandler (DropDownStyleChangedEvent, value); }
296 public event EventHandler SelectedIndexChanged {
297 add { Events.AddHandler (SelectedIndexChangedEvent, value); }
298 remove { Events.RemoveHandler (SelectedIndexChangedEvent, value); }
301 public event EventHandler TextUpdate {
302 add { Events.AddHandler (TextUpdateEvent, value); }
303 remove { Events.RemoveHandler (TextUpdateEvent, value); }
307 #region Private Methods
308 private void HandleDropDown (object sender, EventArgs e)
313 private void HandleDropDownStyleChanged (object sender, EventArgs e)
315 OnDisplayStyleChanged (e);
318 private void HandleSelectedIndexChanged (object sender, EventArgs e)
320 OnSelectedIndexChanged (e);
324 private class ToolStripComboBoxControl : ComboBox
326 public ToolStripComboBoxControl () : base ()
328 this.border_style = BorderStyle.None;