我知道我可以通过以下行将DateTimePicker添加到我的MenuStrip中
Dim dp = New ToolStripControlHost(New DateTimePicker)
MenuStrip1.Items.Add(dp) 但我不知道如何在设计时将DateTimePicker添加到MenuStrip中。它背后的诀窍是什么?我已经尝试和寻找了大约一个小时,我即将放弃,尽管我知道一定有办法!
TL;博士
如何在设计时将DateTimePicker添加到MenuStrip中?或者,我们可以将它添加到ToolStrip中。
发布于 2017-04-18 15:34:20
在使用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发布于 2017-04-18 11:49:58
我想补充一下,但我相信这能证明答案是正确的。
我成功的唯一方法是在设计时(在表单中)添加一个,并将Visible设置为False,并使用菜单项将Visible设置为True (可能还需要设置位置和/或将其置于最前面)。
您确实需要再次手动处理将Visible设置为False。
https://stackoverflow.com/questions/43469427
复制相似问题