none
VS2003 VB.NET如何於RUNTIME時取得各Menu Item的(name) ? RRS feed

  • 問題

  • 各位先進:晚安!
    於VS2003 VB.NET開發的應用程式, Design時會於Menu Item的屬性視窗中設定每個Menu Item的(name)及Text等屬性值, 就如同Form一般.
    但於RUNTIME時, 如何取得每個Menu Item的(name)屬性值? (Text屬性值可取得, 但找不到(name)屬性值的取得方法)

    謝謝!

    • 已移動 璉璉Moderator 2009年10月3日 上午 03:30 (從:Visual Studio一般討論區(General))
    2009年10月1日 下午 04:46

解答


  • 我想應該這樣就行了吧..............
    Public Class TestingMenuItem
        Inherits System.Windows.Forms.MenuItem

        Private _name As String = ""

        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
                _name = value
            End Set
        End Property

    End Class

    然後在form的程式碼中用這個TestingMenuItem來取代MenuItem
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim item As New TestingMenuItem
            item.Name = "test"
            item.Text = "this is a CustomControl"
            MainMenu1.MenuItems.Add(item)       
         End Sub


    我想這樣就有Name屬性可以用了
    家裡沒有2003,沒辦法實際執行,還請您試看看

    • 已標示為解答 Lolota Lee 2009年10月8日 上午 05:31
    2009年10月2日 下午 03:08

所有回覆

  • .Net 1.1 是在 Menu.Controls 中,用遞回找
    .Net 2.0 新的 MenuStrip 控制項則是用 MenuStrip.Items ,用遞回找


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年10月2日 上午 12:26
  • 不太懂! 用遞回找是可找到所有的MenuItem, 但裡頭只有設計段時給的Text值, 沒有(name)值, 如何找到每個MenuItem的(name)值?

    2009年10月2日 上午 12:52
  • 所有沒有變更過的 name ,都是預設 name 配上數字。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年10月2日 上午 01:35
  • 鐵定找不到的啊
    MenuItem的Name在屬性視窗中是歸類到「設計」裡面去

    2009年10月2日 上午 01:46
  • 可是於Runtime時如何能知道某個MenuItem的Text是對應哪一個name? 又Design時name又以變更過, 要如何處理?

    ex: Menu

    M1
       m11
       m12

    M2
       m21
       m22

    M1 的 (name) = MenuItem1, Text = M1
    m11 的 (name) = MenuItem2, Text = m11
    m12 的 (name) = MenuItem3, Text = m12

    M2 的 (name) = MenuItem4, Text = M2
    m21 的 (name) = MenuItem5, Text = m21
    m22 的 (name) = MenuItem6, Text = m22

    於RUNTIME時用遞回可找出所有的MenuItem, 找出每個MenuItem時想取得它們的name值及Text值(如 m12 的 name 值為 MenuItem3, Text 值為 m12)
    How to do ?



    2009年10月2日 上午 02:17
  • 找Name有什麼用意嗎??

    如果您是要幫MenuItem加個Unique的編號
    可以在遞迴的時候用menuItem的位置去給編號,這樣m11的編號就是「0,0」,而m21的編號就是「1,0」

    想取得Name是不可能的,如果您是想把Name跟Text存到資料庫的話,建議改存「自訂編號」跟Text
    2009年10月2日 上午 02:43
  • 目前是如此處理. 但長期下來, 因程式機能的擴充或刪除, 造成原先的「自訂編號」跟Text對應不起來.

    2009年10月2日 上午 03:41
  • 不然就自己寫一個Control去繼承MenuItem,然後多寫一個Name屬性出來
    我是沒有這樣實做過,但是應該可行,您可以試試看

    請參閱
    http://msdn.microsoft.com/zh-tw/library/cc438236(VS.71).aspx

    2009年10月2日 上午 04:06
  • 升級到 VB2008 很久了,不確定 VB2003 的狀況。
    VB 2005 以後的 MenuStrip 我很確定有 Name ,我不用 .Net 內建的語系工具,我是用 db 存放 LangId / Name / Text ,依使用者選擇的語系來顯示。

    我是先用選單名稱抓取選單物件 (遞回):
    obj = GetFormControlByString(srcForm, strControl)
    再用設定選單文字:
    obj.GetType.InvokeMember(strProperty, Reflection.BindingFlags.SetProperty, Nothing, obj, objValue)


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年10月2日 上午 04:20
  • 謝謝! 也曾有過此念頭, 但因功力不足而放棄.

    2009年10月2日 上午 06:11
  • 謝謝!
    只是納悶: VB6.0 的Menu可以, VB 2005 以後的 MenuStrip 也可以, VB 2003就不行,
    不知是否有個微軟的文件有說明到為甚麼?

    2009年10月2日 上午 06:15

  • 我想應該這樣就行了吧..............
    Public Class TestingMenuItem
        Inherits System.Windows.Forms.MenuItem

        Private _name As String = ""

        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
                _name = value
            End Set
        End Property

    End Class

    然後在form的程式碼中用這個TestingMenuItem來取代MenuItem
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim item As New TestingMenuItem
            item.Name = "test"
            item.Text = "this is a CustomControl"
            MainMenu1.MenuItems.Add(item)       
         End Sub


    我想這樣就有Name屬性可以用了
    家裡沒有2003,沒辦法實際執行,還請您試看看

    • 已標示為解答 Lolota Lee 2009年10月8日 上午 05:31
    2009年10月2日 下午 03:08
  • 移文到:
    Visual Basic


    T.L. Cheng
    2009年10月3日 上午 03:30
    版主