DateTimePicker和Menustrip中的其他控件



我知道我可以在我的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

相关内容

  • 没有找到相关文章

最新更新