我知道我可以在我的menustrip上添加一个dateTimePicker,并使用以下行
Dim dp = New ToolStripControlHost(New DateTimePicker)
MenuStrip1.Items.Add(dp)
但我不知道如何在Design Time中将DateTimePicker添加到Menustrip。它背后的技巧是什么?我一直在尝试和搜索一个小时,即使我知道必须有一种方法!
,我也将放弃。 tl; dr
如何在设计时间的Menustrip中添加DateTimePicker?另外,我们可以将其添加到工具条中。
您在使用工具controlhost时接近解决方案,但是您需要从该类派生,如链接到示例所示。该示例令人沮丧的是,它不会用System.windows.forms.design.toolstripitemdesigneravailabiliture Attribute来装饰派生类。
以下是获得工作示例的简约实现。您可能需要覆盖自动尺寸,以适应您的控制需求/需求。该实现覆盖了Text
属性,以防止设计师将无效的文本分配给基础DateTimerPicker
控件。
<System.Windows.Forms.Design.ToolStripItemDesignerAvailability(
System.Windows.Forms.Design.ToolStripItemDesignerAvailability.ToolStrip _
Or System.Windows.Forms.Design.ToolStripItemDesignerAvailability.StatusStrip _
Or System.Windows.Forms.Design.ToolStripItemDesignerAvailability.MenuStrip)> _
Public Class TSDatePicker : Inherits ToolStripControlHost
Public Sub New()
MyBase.New(New System.Windows.Forms.DateTimePicker())
End Sub
Public ReadOnly Property ExposedControl() As DateTimePicker
Get
Return CType(Control, DateTimePicker)
End Get
End Property
<Browsable(False), EditorBrowsable(EditorBrowsableState.Advanced), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Overrides Property Text As String
Get
Return ExposedControl.Text
End Get
Set(value As String)
' verify valid date
Dim dt As DateTime
If DateTime.TryParse(value, dt) Then
ExposedControl.Text = value
End If
End Set
End Property
End Class
要添加为评论,但我相信它是合理的。
我成功的唯一方法是在设计时间(表单(添加一个,并将Visible
设置为False
,然后使用菜单项将Visible
设置为True
(也可能需要设置位置和/或Bring它在前面(。
您确实需要手动处理将Visible
再次处理为False
。