在WinForms .Net 2.0应用程序中,我想创建一个带有ToolStripMenuItem的上下文菜单,该菜单在项目本身中同时具有标签和文本框。我在谈论的一个例子可以在Access中找到 - 当查看Access表时,上下文菜单有“按选择筛选”,“筛选排除选择”,然后“筛选为:_ _ _ _ _ _”的选项”。第三个选项本质上是单个项目中的标签和文本框。这是我无法弄清楚如何做的。
使用两个单独的 ToolStripMenuItems实现此功能没有问题 - 一个用于文本,一个只有文本框。但这很尴尬,并不像Access中的实现那么好看。
有人能指出我正确的方向吗?我在搜索时遇到问题,因为我发现的所有内容似乎与文本框本身的上下文菜单有关。
答案 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