Imports System.ComponentModel Imports System.Windows.Forms Imports System.Drawing Namespace Controls < _ ToolboxBitmap(GetType(System.Windows.Forms.ComboBox)), _ DefaultEvent("AfterSelect") _ > Public Class ComboBoxTree Inherits System.Windows.Forms.UserControl #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'UserControl overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents ComboBox As ComboBoxTree_ComboBox Private Sub InitializeComponent() Me.ComboBox = New ComboBoxTree_ComboBox Me.SuspendLayout() ' 'ComboBox ' Me.ComboBox.Dock = System.Windows.Forms.DockStyle.Top Me.ComboBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed Me.ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList Me.ComboBox.ItemHeight = 16 Me.ComboBox.Location = New System.Drawing.Point(0, 0) Me.ComboBox.Name = "ComboBox" Me.ComboBox.SelectedItem = Nothing Me.ComboBox.Size = New System.Drawing.Size(384, 22) Me.ComboBox.TabIndex = 0 ' 'ComboBoxTree ' Me.BackColor = System.Drawing.SystemColors.Window Me.Controls.Add(Me.ComboBox) Me.Name = "ComboBoxTree" Me.Size = New System.Drawing.Size(384, 72) Me.ResumeLayout(False) End Sub #End Region Public Event DropDown(ByVal sender As Object) Public Event CloseUp(ByVal sender As Object) Public Event BeforeSelect(ByVal sender As Object, ByVal Node As TreeNode, ByRef Cancel As Boolean) Public Event AfterSelect(ByVal sender As Object) Private p_DropDownWidth As Integer = -1 #Region " Standard Public Properties " Public Shadows Property Size() As Drawing.Size Get Return MyBase.Size End Get Set(ByVal Value As Drawing.Size) MyBase.Size = New Size(Value.Width, Me.ComboBox.Height) If p_DropDownWidth <= 0 Then Me.ComboBox.TreeView.Width = Value.Width End Set End Property Public Shadows Property Height() As Integer Get Return MyBase.Height End Get Set(ByVal Value As Integer) Me.ComboBox.Height = Value MyBase.Height = Me.ComboBox.Height End Set End Property Public Shadows Property Width() As Integer Get Return MyBase.Width End Get Set(ByVal Value As Integer) MyBase.Width = Value If p_DropDownWidth <= 0 Then Me.ComboBox.TreeView.Width = Value End Set End Property < _ DefaultValue(GetType(Color), "Window") _ > Public Shadows Property BackColor() As System.Drawing.Color Get Return MyBase.BackColor End Get Set(ByVal Value As System.Drawing.Color) MyBase.BackColor = Value Me.ComboBox.BackColor = Value End Set End Property Public Shadows Property ForeColor() As System.Drawing.Color Get Return MyBase.ForeColor End Get Set(ByVal Value As System.Drawing.Color) MyBase.ForeColor = Value Me.ComboBox.ForeColor = Value End Set End Property < _ Browsable(False) _ > Public Shadows Property BackgroundImage() As System.Drawing.Image Get Return MyBase.BackgroundImage End Get Set(ByVal Value As System.Drawing.Image) MyBase.BackgroundImage = Value Me.ComboBox.TreeView.BackgroundImage = Value End Set End Property Public Shadows Property Font() As System.Drawing.Font Get Return MyBase.Font End Get Set(ByVal Value As System.Drawing.Font) MyBase.Font = Value Me.ComboBox.Font = Value End Set End Property Public Shadows Property Enabled() As Boolean Get Return MyBase.Enabled End Get Set(ByVal Value As Boolean) MyBase.Enabled = Value Me.ComboBox.Enabled = Value End Set End Property Public Shadows Property ContextMenu() As System.Windows.Forms.ContextMenu Get Return MyBase.ContextMenu End Get Set(ByVal Value As System.Windows.Forms.ContextMenu) MyBase.ContextMenu = Value Me.ComboBox.ContextMenu = Value End Set End Property #End Region #Region " Particular Public Properties " < _ Browsable(False) _ > Public Property SelectedNode() As TreeNode Get Return Me.ComboBox.SelectedItem End Get Set(ByVal Value As TreeNode) Me.ComboBox.SelectedItem = Value End Set End Property < _ Category("Behavior"), _ DefaultValue(16) _ > Public Property ItemHeight() As Integer Get Return Me.ComboBox.ItemHeight End Get Set(ByVal Value As Integer) If Value <= 0 Then Value = 16 Me.ComboBox.ItemHeight = Value Me.Height = Me.ComboBox.Height Me.Invalidate() End Set End Property < _ Category("Behavior"), _ DefaultValue(0) _ > Public Property ImageIndex() As Integer Get Return Me.ComboBox.TreeView.ImageIndex End Get Set(ByVal Value As Integer) Me.ComboBox.TreeView.ImageIndex = Value End Set End Property < _ Category("Behavior"), _ DefaultValue(1) _ > Public Property SelectedImageIndex() As Integer Get Return Me.ComboBox.TreeView.SelectedImageIndex End Get Set(ByVal Value As Integer) Me.ComboBox.TreeView.SelectedImageIndex = Value End Set End Property < _ Category("Behavior") _ > Public Property ImageList() As ImageList Get Return Me.ComboBox.TreeView.ImageList End Get Set(ByVal Value As ImageList) Me.ComboBox.TreeView.ImageList = Value End Set End Property < _ Category("Behavior"), _ DefaultValue(-1) _ > Public Property DropDownWidth() As Integer Get Return p_DropDownWidth End Get Set(ByVal Value As Integer) If Value <= 0 Then p_DropDownWidth = -1 Me.ComboBox.TreeView.Width = Me.Width Else p_DropDownWidth = Value Me.ComboBox.TreeView.Width = p_DropDownWidth End If End Set End Property < _ Category("Behavior"), _ DefaultValue(194) _ > Public Property DropDownHeight() As Integer Get Return Me.ComboBox.TreeView.Height End Get Set(ByVal Value As Integer) If Value > 0 Then Me.ComboBox.TreeView.Height = Value Else Me.ComboBox.TreeView.Height = 194 End If End Set End Property Public Property DroppedDown() As Boolean Get Return Me.ComboBox.DroppedDown End Get Set(ByVal Value As Boolean) Me.ComboBox.DroppedDown = Value End Set End Property #End Region #Region " Public Methods " Public Function TreeView() As TreeView Return Me.ComboBox.TreeView End Function #End Region #Region " Private Methods " Private Sub UserControl_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize Me.Height = Me.ComboBox.Height Me.ComboBox.TreeView.Left = Me.Left Me.ComboBox.TreeView.Top = Me.Top + Me.Height If p_DropDownWidth <= 0 Then Me.ComboBox.TreeView.Width = Me.Width End Sub Private Sub ComboBox_DropDown() Handles ComboBox.DropDown RaiseEvent DropDown(Me) End Sub Protected Overrides Sub OnParentChanged(ByVal e As System.EventArgs) Me.ComboBox.TreeView.Parent = Me.Parent End Sub Private Sub ComboBox_AfterSelect() Handles ComboBox.AfterSelect RaiseEvent AfterSelect(Me) End Sub Private Sub ComboBox_BeforeSelect(ByVal Node As System.Windows.Forms.TreeNode, ByRef Cancel As Boolean) Handles ComboBox.BeforeSelect RaiseEvent BeforeSelect(Me, Node, Cancel) End Sub Private Sub ComboBox_CloseUp() Handles ComboBox.CloseUp RaiseEvent CloseUp(Me) End Sub Protected Overrides Sub OnCreateControl() MyBase.BackColor = System.Drawing.SystemColors.Window Me.ComboBox.BackColor = MyBase.BackColor End Sub #End Region Public Class SelectEventArgs Public Node As TreeNode Public Cancel As Boolean Public Sub New(ByVal Node As TreeNode) Me.Node = Node Me.Cancel = False End Sub End Class Private Sub ComboBoxTree_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown End Sub Private Sub ComboBoxTree_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress End Sub End Class End Namespace