사용자 정의 ToolStripItem에 메뉴 텍스트를 표시하는 방법은 무엇입니까?

디코더 94

Mainform VB.Net :

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class Form1
    Inherits System.Windows.Forms.Form

    'Form overrides dispose to clean up the component list.
    <System.Diagnostics.DebuggerNonUserCode()>
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()>
    Private Sub InitializeComponent()
        Me.tsBasket = New System.Windows.Forms.ToolStrip()
        Me.tsiFruit = New System.Windows.Forms.ToolStripDropDownButton()
        Me.tsBasket.SuspendLayout()
        Me.SuspendLayout()
        '
        'tsBasket
        '
        Me.tsBasket.Dock = System.Windows.Forms.DockStyle.None
        Me.tsBasket.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden
        Me.tsBasket.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tsiFruit})
        Me.tsBasket.Location = New System.Drawing.Point(355, 213)
        Me.tsBasket.Name = "tsBasket"
        Me.tsBasket.Size = New System.Drawing.Size(121, 25)
        Me.tsBasket.TabIndex = 5
        '
        'tsiFruit
        '
        Me.tsiFruit.ImageTransparentColor = System.Drawing.Color.Magenta
        Me.tsiFruit.Name = "tsiFruit"
        Me.tsiFruit.Size = New System.Drawing.Size(87, 22)
        Me.tsiFruit.Text = "add fruit"
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(800, 450)
        Me.Controls.Add(Me.tsBasket)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.tsBasket.ResumeLayout(False)
        Me.tsBasket.PerformLayout()
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub

    Friend WithEvents tsBasket As ToolStrip
    Friend WithEvents tsiFruit As ToolStripDropDownButton
End Class

양식로드 :

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim men As New TestTool()
    men.Text = "showmeplease"
    men.Image = Nothing
    men.NewProperty = "BO"

    Dim men2 As New TestTool()
    men2.Text = "showmeplease2"
    men2.Image = Nothing
    men2.NewProperty = "BO2"

    tsiFruit.DropDownItems.Add(men)
    tsiFruit.DropDownItems.Add(men2)
    AddHandler men.Click, AddressOf tsiType_Click
    AddHandler men2.Click, AddressOf tsiType_Click
End Sub

Private Sub tsiType_Click(sender As System.Object, e As System.EventArgs)
    Dim MenuItem As TestTool = DirectCast(sender, TestTool)
    MessageBox.Show(MenuItem.NewProperty & "  " & MenuItem.Text)
End Sub

커스텀 클래스 :

Public Class TestTool
    Inherits ToolStripItem

    Private newPropertyValue As String
    Public Property NewProperty() As String
        Get
            Return newPropertyValue
        End Get
        Set(ByVal value As String)
            newPropertyValue = value
        End Set
    End Property

    Sub New()

        ' This call is required by the designer.
        ' InitializeComponent()

    End Sub
End Class

내 사용자 정의 클래스 / Usercontrol에서 : The designer must create an instance of type 'System.Windows.Forms.ToolStripItem' but it cannot because the type is declared as abstract.그리고 메뉴 항목에 텍스트가 나타나지 않지만 클릭 이벤트가 제대로 작동합니다.

이것이 Display 값과 Member 값을 가질 수 있도록 ToolMenuStrip을 확장 (OO를 사용하여 상속)하는 올바른 방법입니까, 사용하지 않고 개체를 저장할 수 있기를 원합니다 .Tag.

편집 : 중첩 된 메뉴를 사용하려고 할 때 발생합니다.

System.InvalidCastException: 'Unable to cast object of type 'System.Windows.Forms.ToolStripMenuItem' to type 'WindowsApp1.TestTool'.'

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim men As New TestTool()
    men.Text = "showmeplease"
    men.Image = Nothing
    men.NewProperty = "BO"

    Dim men2 As New TestTool()
    men2.Text = "showmeplease2"
    men2.Image = Nothing
    men2.NewProperty = "BO2"

    tsiFruit.DropDownItems.Add(men)
    tsiFruit.DropDownItems.Add(men2)

    Dim TypeMenuItem As TestTool = men.DropDownItems.Add("hh")

    For Each mInfo As String In Moreinfo
        TypeMenuItem.DropDownItems.Add(mInfo, Nothing, AddressOf tsiType_Click)
    Next
    AddHandler men.Click, AddressOf tsiType_Click
    AddHandler men2.Click, AddressOf tsiType_Click
End Sub

Private p_Moreinfo As List(Of String)
Public Property Moreinfo() As List(Of String)
    Get

        Dim test As New List(Of String)
        test.Add("A")
        test.Add("B")
        Return test
    End Get
    Set(ByVal value As List(Of String))
        p_Moreinfo = value
    End Set
End Property
dr.null

Option Strict 검사 를 활성화하면 (필요한 Form1_Load경우) 이벤트 에서 아래 줄에 오류가 표시됩니다 .

' Error: Option Strict On disallows implicit conversions from ToolStrinpItem
' to TestTool.
Dim TypeMenuItem As TestTool = men.DropDownItems.Add("hh")

때문에 .DropDownItems.Add(String)과부하는 반환 ToolStripItem및 유형이 아닌 객체를 TestTool. .DropDownItems소유자 항목의 유형을 상속하지 않습니다.

' Compiles.
Dim TypeMenuItem As ToolStripItem = men.DropDownItems.Add("hh")

' Compiles.
Dim TypeMenuItem As ToolStripMenuItem = DirectCast(men.DropDownItems.Add("hh"), ToolStripMenuItem)

' Throws System.InvalidCastException.
Dim TypeMenuItem As TestTool = DirectCast(men.DropDownItems.Add("hh"), TestTool)

따라서 Load이벤트 의 코드 는 다음과 같아야합니다.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim men As New TestTool With {
        .Text = "showmeplease",
        .NewProperty = "BO"
    }

    Dim men2 As New TestTool With {
        .Text = "showmeplease2",
        .NewProperty = "BO2"
    }

    tsiFruit.DropDownItems.Add(men)
    tsiFruit.DropDownItems.Add(men2)

    Dim TypeMenuItem As New TestTool() With {.NewProperty = "hh", .Text = "SomeText"}

    men.DropDownItems.Add(TypeMenuItem)

    For Each mInfo As String In Moreinfo
        Dim item = New TestTool With {.NewProperty = mInfo, .Text = "SomeText"}
        AddHandler item.Click, AddressOf tsiType_Click
        TypeMenuItem.DropDownItems.Add(item)
    Next

    AddHandler men.Click, AddressOf tsiType_Click
    AddHandler men2.Click, AddressOf tsiType_Click
End Sub

마찬가지로 다음과 같은 tsiType_Click경우에 이벤트 에서 예외가 발생하지 않도록 방지합니다 .

Private Sub tsiType_Click(sender As Object, e As EventArgs)
    Dim item = TryCast(sender, TestTool)

    If item IsNot Nothing Then
        MessageBox.Show($"{item.NewProperty} {item.Text}")
    Else
        MessageBox.Show(DirectCast(sender, ToolStripItem).Text)
    End If
End Sub

TestTool@jmcilhinney가 다음과 같이 주석을 달았을 클래스를 수정했다고 생각합니다 .

Public Class TestTool
    Inherits ToolStripMenuItem

    Sub New()
        MyBase.New
    End Sub

    Public Property NewProperty As String

End Class

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MacOS 메뉴 표시 줄의 URL에서 사용자 지정 텍스트를 표시하는 방법은 무엇입니까?

분류에서Dev

Firefox 컨텍스트 메뉴에 사용자 정의 스크립트를 추가하는 방법은 무엇입니까?

분류에서Dev

Xubuntu XFCE Thunar 파일 관리자에서 파일 컨텍스트 메뉴를 사용자 정의하는 방법은 무엇입니까?

분류에서Dev

Xubuntu XFCE Thunar 파일 관리자에서 파일 컨텍스트 메뉴를 사용자 정의하는 방법은 무엇입니까?

분류에서Dev

PyQt5를 사용하여 Python 텍스트 상자의 기본 컨텍스트 메뉴에 추가하는 방법은 무엇입니까?

분류에서Dev

사용자 정의 도구 모음 위에 옵션 메뉴를 사용하는 방법은 무엇입니까?

분류에서Dev

사용자 정의 도구 모음 위에 옵션 메뉴를 사용하는 방법은 무엇입니까?

분류에서Dev

Angular Material에서 md-select의 팝업 메뉴를 사용자 정의하는 방법은 무엇입니까?

분류에서Dev

Joomla 2.5 메뉴 항목에 사용자 정의 HTML 코드를 추가하는 방법은 무엇입니까?

분류에서Dev

Yii에서 오류 표시 메시지를 사용자 정의하는 방법은 무엇입니까?

분류에서Dev

동일한 동적 컨텍스트 메뉴를 동적 수의 사용자 컨트롤에 바인딩하는 방법은 무엇입니까?

분류에서Dev

사용자 정의 메뉴 템플릿에서 선택한 페이지를 표시하는 방법은 무엇입니까?

분류에서Dev

WPF : 사용자 지정 컨트롤에 텍스트를 표시하는 방법은 무엇입니까?

분류에서Dev

CosmicMinds Material Library를 사용하여 Material Textfield에서 애니메이션 자리 표시 자 텍스트의 공간을 줄이는 방법은 무엇입니까?

분류에서Dev

Symfony KNP 메뉴 번들에 사용자 지정 유권자를 등록하는 방법은 무엇입니까?

분류에서Dev

자바 : JFrame의 메뉴 바가 시스템 메뉴 바 또는 프레임 자체에 표시되는지 확인하는 방법은 무엇입니까?

분류에서Dev

DropzoneJS에서 사용자 지정 오류 메시지를 표시하는 방법은 무엇입니까?

분류에서Dev

사전의 wxPython 메뉴 : 사전에 나타나는 올바른 순서로 메뉴를 표시하는 방법은 무엇입니까?

분류에서Dev

Flutter에서 특정 글자의 텍스트를 강조 표시하는 방법은 무엇입니까?

분류에서Dev

jquery에서 Chris Domigan의 ContextMenu 플러그인을 사용하여 컨텍스트 메뉴를 바인딩 해제 / 제거하는 방법은 무엇입니까?

분류에서Dev

메시지의 이메일 주소를 텍스트 상자에 추가하는 방법은 무엇입니까?

분류에서Dev

JQuery를 사용하여 텍스트 상자에 특정 텍스트를 표시하는 방법은 무엇입니까?

분류에서Dev

XFCE 용 Whisker 메뉴를 사용자 정의하는 방법은 무엇입니까?

분류에서Dev

Android의 Java에서 팝업 메뉴에 대한 사용자 정의 테마를 설정하는 방법은 무엇입니까?

분류에서Dev

워드 프레스에서 사용자 지정 텍스트를 사용하여 게시물을 표시하는 방법은 무엇입니까?

분류에서Dev

gnome-terminal에서 선택한 텍스트의 컨텍스트 메뉴에서 "Google 검색"을 사용하는 방법은 무엇입니까?

분류에서Dev

gnome-terminal에서 선택한 텍스트의 컨텍스트 메뉴에서 "Google 검색"을 사용할 수있게하는 방법은 무엇입니까?

분류에서Dev

TinyMCE 4의 사용자 정의 메뉴에 하나 이상의 요소를 추가하고 클릭 할 때 편집기 캔버스에 해당 내용을 표시하는 방법은 무엇입니까?

분류에서Dev

텍스트 파일의 사용자를 Unix 시스템에 추가하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    MacOS 메뉴 표시 줄의 URL에서 사용자 지정 텍스트를 표시하는 방법은 무엇입니까?

  2. 2

    Firefox 컨텍스트 메뉴에 사용자 정의 스크립트를 추가하는 방법은 무엇입니까?

  3. 3

    Xubuntu XFCE Thunar 파일 관리자에서 파일 컨텍스트 메뉴를 사용자 정의하는 방법은 무엇입니까?

  4. 4

    Xubuntu XFCE Thunar 파일 관리자에서 파일 컨텍스트 메뉴를 사용자 정의하는 방법은 무엇입니까?

  5. 5

    PyQt5를 사용하여 Python 텍스트 상자의 기본 컨텍스트 메뉴에 추가하는 방법은 무엇입니까?

  6. 6

    사용자 정의 도구 모음 위에 옵션 메뉴를 사용하는 방법은 무엇입니까?

  7. 7

    사용자 정의 도구 모음 위에 옵션 메뉴를 사용하는 방법은 무엇입니까?

  8. 8

    Angular Material에서 md-select의 팝업 메뉴를 사용자 정의하는 방법은 무엇입니까?

  9. 9

    Joomla 2.5 메뉴 항목에 사용자 정의 HTML 코드를 추가하는 방법은 무엇입니까?

  10. 10

    Yii에서 오류 표시 메시지를 사용자 정의하는 방법은 무엇입니까?

  11. 11

    동일한 동적 컨텍스트 메뉴를 동적 수의 사용자 컨트롤에 바인딩하는 방법은 무엇입니까?

  12. 12

    사용자 정의 메뉴 템플릿에서 선택한 페이지를 표시하는 방법은 무엇입니까?

  13. 13

    WPF : 사용자 지정 컨트롤에 텍스트를 표시하는 방법은 무엇입니까?

  14. 14

    CosmicMinds Material Library를 사용하여 Material Textfield에서 애니메이션 자리 표시 자 텍스트의 공간을 줄이는 방법은 무엇입니까?

  15. 15

    Symfony KNP 메뉴 번들에 사용자 지정 유권자를 등록하는 방법은 무엇입니까?

  16. 16

    자바 : JFrame의 메뉴 바가 시스템 메뉴 바 또는 프레임 자체에 표시되는지 확인하는 방법은 무엇입니까?

  17. 17

    DropzoneJS에서 사용자 지정 오류 메시지를 표시하는 방법은 무엇입니까?

  18. 18

    사전의 wxPython 메뉴 : 사전에 나타나는 올바른 순서로 메뉴를 표시하는 방법은 무엇입니까?

  19. 19

    Flutter에서 특정 글자의 텍스트를 강조 표시하는 방법은 무엇입니까?

  20. 20

    jquery에서 Chris Domigan의 ContextMenu 플러그인을 사용하여 컨텍스트 메뉴를 바인딩 해제 / 제거하는 방법은 무엇입니까?

  21. 21

    메시지의 이메일 주소를 텍스트 상자에 추가하는 방법은 무엇입니까?

  22. 22

    JQuery를 사용하여 텍스트 상자에 특정 텍스트를 표시하는 방법은 무엇입니까?

  23. 23

    XFCE 용 Whisker 메뉴를 사용자 정의하는 방법은 무엇입니까?

  24. 24

    Android의 Java에서 팝업 메뉴에 대한 사용자 정의 테마를 설정하는 방법은 무엇입니까?

  25. 25

    워드 프레스에서 사용자 지정 텍스트를 사용하여 게시물을 표시하는 방법은 무엇입니까?

  26. 26

    gnome-terminal에서 선택한 텍스트의 컨텍스트 메뉴에서 "Google 검색"을 사용하는 방법은 무엇입니까?

  27. 27

    gnome-terminal에서 선택한 텍스트의 컨텍스트 메뉴에서 "Google 검색"을 사용할 수있게하는 방법은 무엇입니까?

  28. 28

    TinyMCE 4의 사용자 정의 메뉴에 하나 이상의 요소를 추가하고 클릭 할 때 편집기 캔버스에 해당 내용을 표시하는 방법은 무엇입니까?

  29. 29

    텍스트 파일의 사용자를 Unix 시스템에 추가하는 방법은 무엇입니까?

뜨겁다태그

보관