//
//
-// COMPLETE
-
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Reflection;
+using System.Runtime.InteropServices;
namespace System.Windows.Forms
{
-
+#if NET_2_0
+ [ClassInterface (ClassInterfaceType.AutoDispatch)]
+ [ComVisible (true)]
+#endif
public class CheckedListBox : ListBox
{
private CheckedIndexCollection checked_indices;
}
#region events
+ static object ItemCheckEvent = new object ();
+
+#if NET_2_0
+ [Browsable (true)]
+ [EditorBrowsable (EditorBrowsableState.Always)]
+#else
[Browsable (false)]
[EditorBrowsable (EditorBrowsableState.Never)]
+#endif
public new event EventHandler Click {
add { base.Click += value; }
remove { base.Click -= value; }
remove { base.ValueMemberChanged -= value; }
}
- public event ItemCheckEventHandler ItemCheck;
+ public event ItemCheckEventHandler ItemCheck {
+ add { Events.AddHandler (ItemCheckEvent, value); }
+ remove { Events.RemoveHandler (ItemCheckEvent, value); }
+ }
#endregion Events
#region Public Properties
public override SelectionMode SelectionMode {
get { return base.SelectionMode; }
set {
+ if (!Enum.IsDefined (typeof (SelectionMode), value))
+ throw new InvalidEnumArgumentException ("value", (int) value, typeof (SelectionMode));
+
if (value == SelectionMode.MultiSimple || value == SelectionMode.MultiExtended)
- throw new InvalidEnumArgumentException ("Multi selection modes not supported");
+ throw new ArgumentException ("Multi selection not supported on CheckedListBox");
base.SelectionMode = value;
}
protected virtual void OnItemCheck (ItemCheckEventArgs ice)
{
- if (ItemCheck != null)
- ItemCheck (this, ice);
+ ItemCheckEventHandler eh = (ItemCheckEventHandler)(Events [ItemCheckEvent]);
+ if (eh != null)
+ eh (this, ice);
}
protected override void OnKeyPress (KeyPressEventArgs e)
UpdateCollections ();
- InvalidateItem (index);
+ InvalidateCheckbox (index);
}
protected override void WmReflectCommand (ref Message m)
internal override void OnItemClick (int index)
{
- if (GetItemChecked (index))
- SetItemCheckState (index, CheckState.Unchecked);
- else if (CheckOnClick || last_clicked_index == index)
- SetItemCheckState (index, CheckState.Checked);
+ if (CheckOnClick || last_clicked_index == index) {
+ if (GetItemChecked (index))
+ SetItemCheckState (index, CheckState.Unchecked);
+ else
+ SetItemCheckState (index, CheckState.Checked);
+ }
last_clicked_index = index;
base.OnItemClick (index);
UpdateCollections ();
}
+ private void InvalidateCheckbox (int index)
+ {
+ Rectangle area = GetItemDisplayRectangle (index, TopIndex);
+ area.X += 2;
+ area.Y += (area.Height - 11) / 2;
+ area.Width = 11;
+ area.Height = 11;
+ Invalidate (area);
+ }
+
private void UpdateCollections ()
{
CheckedItems.Refresh ();
#endregion Private Methods
- public class ObjectCollection : ListBox.ObjectCollection
+ public new class ObjectCollection : ListBox.ObjectCollection
{
private CheckedListBox owner;
if (check != CheckState.Unchecked)
owner.check_states [item] = check;
if (check == CheckState.Checked)
- owner.OnItemCheck (new ItemCheckEventArgs (Count, check, CheckState.Unchecked));
- return Count;
+ owner.OnItemCheck (new ItemCheckEventArgs (Count-1, check, CheckState.Unchecked));
+ owner.UpdateCollections ();
+ return Count - 1;
}
}
#endregion Private Methods
}
#if NET_2_0
-
+ [DefaultValue (false)]
public bool UseCompatibleTextRendering {
- get {
- return use_compatible_text_rendering;
- }
-
- set {
- use_compatible_text_rendering = value;
- }
+ get { return use_compatible_text_rendering; }
+ set { use_compatible_text_rendering = value; }
}
#endif