我知道我可以使用以下行将DateTimePicker添加到我的MenuStrip
Dim dp = New ToolStripControlHost(New DateTimePicker)
MenuStrip1.Items.Add(dp)
但我无法弄清楚如何在设计时向MenuStrip添加DateTimePicker。它背后的诀窍是什么?我一直在尝试和寻找一个小时,我即将放弃,即使我知道必须有办法!
TL; DR
如何在设计时将DateTimePicker添加到我的MenuStrip?
或者,我们可以将其添加到ToolStrip中。
答案 0 :(得分:2)
您已接近使用ToolStripControlHost的解决方案,但您需要从该类派生,如链接示例中所示。该示例令人沮丧的是,它没有使用System.Windows.Forms.Design.ToolStripItemDesignerAvailabilityAttribute修饰派生类,以使其在设计图面上可用。
以下是获得实际示例的极简主义实现。您可能需要覆盖自动调整大小以满足控件的需要/需要。该实现会覆盖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
答案 1 :(得分:-1)
将作为评论添加,但我相信它可以证明答案。
我成功的唯一方法是在设计时添加一个(到表单)并将Visible
设置为False
并使用菜单项将Visible
设置为{ {1}}(可能还需要设置位置和/或将其置于前面)。
您需要再次手动处理True
到Visible
的设置。