public KryptonListBox()
{
// Contains another control and needs marking as such for validation to work
SetStyle(ControlStyles.ContainerControl, true);
// Cannot select this control, only the child ListBox and does not generate a click event
SetStyle(ControlStyles.Selectable | ControlStyles.StandardClick, false);
// Default fields
_alwaysActive = true;
_lastSelectedIndex = -1;
_style = ButtonStyle.ListItem;
base.Padding = new Padding(1);
// Create the palette storage
_stateCommon = new PaletteListStateRedirect(Redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, NeedPaintDelegate);
_stateFocus = new PaletteListItemTripleRedirect(Redirector, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaintDelegate);
_stateDisabled = new PaletteListState(_stateCommon, NeedPaintDelegate);
_stateActive = new PaletteDouble(_stateCommon, NeedPaintDelegate);
_stateNormal = new PaletteListState(_stateCommon, NeedPaintDelegate);
_stateTracking = new PaletteListItemTriple(_stateCommon.Item, NeedPaintDelegate);
_statePressed = new PaletteListItemTriple(_stateCommon.Item, NeedPaintDelegate);
_stateCheckedNormal = new PaletteListItemTriple(_stateCommon.Item, NeedPaintDelegate);
_stateCheckedTracking = new PaletteListItemTriple(_stateCommon.Item, NeedPaintDelegate);
_stateCheckedPressed = new PaletteListItemTriple(_stateCommon.Item, NeedPaintDelegate);
// Create the override handling classes
_overrideNormal = new PaletteTripleOverride(_stateFocus.Item, _stateNormal.Item, PaletteState.FocusOverride);
_overrideTracking = new PaletteTripleOverride(_stateFocus.Item, _stateTracking.Item, PaletteState.FocusOverride);
_overridePressed = new PaletteTripleOverride(_stateFocus.Item, _statePressed.Item, PaletteState.FocusOverride);
_overrideCheckedNormal = new PaletteTripleOverride(_stateFocus.Item, _stateCheckedNormal.Item, PaletteState.FocusOverride);
_overrideCheckedTracking = new PaletteTripleOverride(_stateFocus.Item, _stateCheckedTracking.Item, PaletteState.FocusOverride);
_overrideCheckedPressed = new PaletteTripleOverride(_stateFocus.Item, _stateCheckedPressed.Item, PaletteState.FocusOverride);
// Create the draw element for owner drawing individual items
_contentValues = new FixedContentValue();
_drawButton = new ViewDrawButton(StateDisabled.Item, _overrideNormal,
_overrideTracking, _overridePressed,
_overrideCheckedNormal, _overrideCheckedTracking,
_overrideCheckedPressed,
new PaletteMetricRedirect(Redirector),
_contentValues, VisualOrientation.Top, false);
// Create the internal list box used for containing content
_listBox = new InternalListBox(this);
_listBox.DrawItem += new DrawItemEventHandler(OnListBoxDrawItem);
_listBox.MeasureItem += new MeasureItemEventHandler(OnListBoxMeasureItem);
_listBox.TrackMouseEnter += new EventHandler(OnListBoxMouseChange);
_listBox.TrackMouseLeave += new EventHandler(OnListBoxMouseChange);
_listBox.DataSourceChanged += new EventHandler(OnListBoxDataSourceChanged);
_listBox.DisplayMemberChanged += new EventHandler(OnListBoxDisplayMemberChanged);
_listBox.ValueMemberChanged += new EventHandler(OnListBoxValueMemberChanged);
_listBox.SelectedIndexChanged += new EventHandler(OnListBoxSelectedIndexChanged);
_listBox.SelectedValueChanged += new EventHandler(OnListBoxSelectedValueChanged);
_listBox.DisplayMemberChanged += new EventHandler(OnListBoxDisplayMemberChanged);
_listBox.Format += new ListControlConvertEventHandler(OnListBoxFormat);
_listBox.FormatInfoChanged += new EventHandler(OnListBoxFormatInfoChanged);
_listBox.FormatStringChanged += new EventHandler(OnListBoxFormatStringChanged);
_listBox.FormattingEnabledChanged += new EventHandler(OnListBoxFormattingEnabledChanged);
_listBox.GotFocus += new EventHandler(OnListBoxGotFocus);
_listBox.LostFocus += new EventHandler(OnListBoxLostFocus);
_listBox.KeyDown += new KeyEventHandler(OnListBoxKeyDown);
_listBox.KeyUp += new KeyEventHandler(OnListBoxKeyUp);
_listBox.KeyPress += new KeyPressEventHandler(OnListBoxKeyPress);
_listBox.PreviewKeyDown += new PreviewKeyDownEventHandler(OnListBoxPreviewKeyDown);
_listBox.Validating += new CancelEventHandler(OnListBoxValidating);
_listBox.Validated += new EventHandler(OnListBoxValidated);
// Create the element that fills the remainder space and remembers fill rectange
_layoutFill = new ViewLayoutFill(_listBox);
_layoutFill.DisplayPadding = new Padding(1);
// Create inner view for placing inside the drawing docker
_drawDockerInner = new ViewLayoutDocker();
_drawDockerInner.Add(_layoutFill, ViewDockStyle.Fill);
// Create view for the control border and background
_drawDockerOuter = new ViewDrawDocker(_stateNormal.Back, _stateNormal.Border);
_drawDockerOuter.Add(_drawDockerInner, ViewDockStyle.Fill);
// Create the view manager instance
ViewManager = new ViewManager(this, _drawDockerOuter);
// We need to create and cache a device context compatible with the display
_screenDC = PI.CreateCompatibleDC(IntPtr.Zero);
// Add list box to the controls collection
((KryptonReadOnlyControls)Controls).AddInternal(_listBox);
}