Возможно ли создать ToolStripMenuItem с TextBox и Label? - PullRequest
3 голосов
/ 05 марта 2009

В приложении WinForms .Net 2.0 я хочу создать контекстное меню с ToolStripMenuItem, которое имеет как метку, так и текстовое поле в самом элементе. Пример того, о чем я говорю, можно найти в Access - при просмотре таблицы Access в контекстном меню есть параметры «Фильтр по выбору», «Фильтр без выбора», а затем «Фильтр по: _ _ _ _ _ _». ». Этот третий вариант по сути является меткой И текстовым полем в одном элементе. Это то, что я не могу понять, как это сделать.

У меня не было проблем с реализацией этого с двумя отдельными ToolStripMenuItems - один для текста, затем дочерний элемент только с текстовым полем. Но это неудобно и не так красиво выглядит, как реализация в Access.

Кто-нибудь может указать мне правильное направление на это? У меня проблемы с поиском, так как все, что я нахожу, похоже, связано с контекстными меню в самом текстовом поле.

1 Ответ

2 голосов
/ 05 марта 2009

Вот вам ответ:

Как: обернуть элемент управления Windows Forms с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...