可以使用TextBox和Label创建ToolStripMenuItem吗?

时间:2009-03-05 02:14:00

标签: .net winforms user-interface

在WinForms .Net 2.0应用程序中,我想创建一个带有ToolStripMenuItem的上下文菜单,该菜单在项目本身中同时具有标签和文本框。我在谈论的一个例子可以在Access中找到 - 当查看Access表时,上下文菜单有“按选择筛选”,“筛选排除选择”,然后“筛选为:_ _ _ _ _ _”的选项”。第三个选项本质上是单个项目中的标签和文本框。这是我无法弄清楚如何做的。

使用两个单独的 ToolStripMenuItems实现此功能没有问题 - 一个用于文本,一个只有文本框。但这很尴尬,并不像Access中的实现那么好看。

有人能指出我正确的方向吗?我在搜索时遇到问题,因为我发现的所有内容似乎与文本框本身的上下文菜单有关。

1 个答案:

答案 0 :(得分:2)

以下是给你的答案:

How to: Wrap a Windows Forms Control with ToolStripControlHost
ToolStripControlHost Class

并且,我写了一个简短的演示(记住它看起来很可怕,因为我根本没有设计它):

(我喜欢VB.net,你没有指定你喜欢哪种语言)

Public Class ToolStripEntry
    Inherits ToolStripControlHost

    Public Sub New()
        MyBase.New(New ControlPanel)

    End Sub

    Public ReadOnly Property ControlPanelControl() As ControlPanel
        Get
            Return CType(Me.Control, ControlPanel)
        End Get
    End Property

End Class


Public Class ControlPanel
    Inherits Panel

    Friend WithEvents txt As New TextBox  //with events so you can just use the events
    Friend WithEvents lbl As New Label    //don think you can just do that in c#, but you get the idea

    Public Sub New()

        lbl.Anchor = AnchorStyles.Left Or AnchorStyles.Top Or AnchorStyles.Bottom
        lbl.Text = "Test"
        lbl.TextAlign = ContentAlignment.MiddleLeft
        lbl.Size = New Size(30, Me.Height)          //think of somthing!
        lbl.Location = New Point(0, 0)
        lbl.Parent = Me

        txt.Anchor = AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Top
        txt.Location = New Point(lbl.Right, 0)
        txt.Width = Me.Width - txt.Left
        txt.Parent = Me

    End Sub

End Class