HOW TO: Adicionar uma propriedade Tag à System.Windows.Forms.MenuItem

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Pedíamos-lhe o favor de preencher o formulário existente no fundo desta página caso tenha encontrado erros neste artigo e tenha possibilidade de colaborar no processo de aperfeiçoamento desta ferramenta. Obrigado.

555264
Author:
Paulo Morgado MVP
COMMUNITY SOLUTIONS CONTENT DISCLAIMER
MICROSOFT CORPORATION AND/OR ITS RESPECTIVE SUPPLIERS MAKE NO REPRESENTATIONS ABOUT THE SUITABILITY, RELIABILITY, OR ACCURACY OF THE INFORMATION AND RELATED GRAPHICS CONTAINED HEREIN. ALL SUCH INFORMATION AND RELATED GRAPHICS ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT AND/OR ITS RESPECTIVE SUPPLIERS HEREBY DISCLAIM ALL WARRANTIES AND CONDITIONS WITH REGARD TO THIS INFORMATION AND RELATED GRAPHICS, INCLUDING ALL IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, WORKMANLIKE EFFORT, TITLE AND NON-INFRINGEMENT. YOU SPECIFICALLY AGREE THAT IN NO EVENT SHALL MICROSOFT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, PUNITIVE, INCIDENTAL, SPECIAL, CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF USE, DATA OR PROFITS, ARISING OUT OF OR IN ANY WAY CONNECTED WITH THE USE OF OR INABILITY TO USE THE INFORMATION AND RELATED GRAPHICS CONTAINED HEREIN, WHETHER BASED ON CONTRACT, TORT, NEGLIGENCE, STRICT LIABILITY OR OTHERWISE, EVEN IF MICROSOFT OR ANY OF ITS SUPPLIERS HAS BEEN ADVISED OF THE POSSIBILITY OF DAMAGES.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sumário
Por vezes, tem de adicionar alguns dados a itens de menu. Este artigo mostra como você pode conseguir que adicionando uma propriedade Tag à System.Windows.Forms.Menu.
Sugestões
Adicionar uma propriedade Tag a System.Windows.Forms.MenuItem
Em primeiro lugar de todos, necessita de subclasse a classe System.Windows.Forms.MenuItem e declarar todos os construtores.
 
Adicionar a propriedade pública pretendida (tag) e um campo privado para suportá-lo (código).
 
Finalmente, apenas é necessário substituir os métodos necessários para intercalar e clonar itens de menu.
 
[C#]namespace System.Windows.Forms {     class TaggedMenuItem : System.Windows.Forms.MenuItem    {        public TaggedMenuItem() : base() {}         public TaggedMenuItem(string text) : base(text) {}         public TaggedMenuItem(string text, System.EventHandler onClick) : base(text, onClick) {}         public TaggedMenuItem(string text, MenuItem[] items) : base(text, items) {}         public TaggedMenuItem(string text, EventHandler onClick, Shortcut shortcut) :                base(text, onClick, shortcut) {}         public TaggedMenuItem(            MenuMerge mergeType,            int mergeOrder,            Shortcut shortcut,            string text,            EventHandler onClick,            EventHandler onPopup,            EventHandler onSelect,            MenuItem[] items) :                base(mergeType, mergeOrder, shortcut, text, onClick, onPopup, onSelect, items) {}        private object _tag;         public object Tag        {            get { return this._tag; }            set { this._tag = value; }        }         public override MenuItem CloneMenu()        {            TaggedMenuItem taggedMenuItem = new TaggedMenuItem();            taggedMenuItem.CloneMenu(this);            taggedMenuItem._tag = this._tag;            return taggedMenuItem;        }         public override MenuItem MergeMenu()        {            TaggedMenuItem taggedMenuItem = this.CloneMenu() as TaggedMenuItem;            taggedMenuItem._tag = this._tag;            taggedMenuItem.MergeMenu(this);            return taggedMenuItem;        }    } } [Visual Basic .NET]Namespace System.Windows.Forms    Public Class TaggedMenuItem        Inherits System.Windows.Forms.MenuItem         Public Sub New()            MyBase.New()        End Sub         Public Sub New(ByVal [text] As String)            MyBase.New(text)        End Sub         Public Sub New(ByVal [text] As String, ByVal onClick As EventHandler)            MyBase.New(text, onClick)        End Sub         Public Sub New(ByVal [text] As String, ByVal items As MenuItem())            MyBase.New(text, items)        End Sub         Public Sub New(ByVal [text] As String, ByVal onClick As EventHandler, ByVal shortcut As Shortcut)            MyBase.New(text, onClick, shortcut)        End Sub         Public Sub New(            ByVal mergeType As MenuMerge, _            ByVal mergeOrder As Integer, _            ByVal shortcut As Shortcut, _            ByVal [text] As String, _            ByVal onClick As EventHandler, _            ByVal onPopup As EventHandler, _            ByVal onSelect As EventHandler, _            ByVal items As MenuItem())            MyBase.New(mergeType, mergeOrder, shortcut, text, onClick, onPopup, onSelect, items)        End Sub         Private _tag As Object         Public Property Tag() As Object            Get                Return Me._tag            End Get            Set(ByVal value As Object)                Me._tag = value            End Set        End Property         Public Overloads Overrides Function CloneMenu() As MenuItem            Dim taggedMenuItem As New TaggedMenuItem            taggedMenuItem.CloneMenu(Me)            taggedMenuItem._tag = Me._tag            Return taggedMenuItem        End Function         Public Overloads Overrides Function MergeMenu() As MenuItem            Dim taggedMenuItem As TaggedMenuItem = DirectCast(Me.CloneMenu, TaggedMenuItem)            taggedMenuItem._tag = Me._tag            taggedMenuItem.MergeMenu(Me)            Return taggedMenuItem         End Function     End ClassEnd Namespace
Utilizar o System.Windows.Forms.TaggedMenuItem
Segue-se uma aplicação Windows Forms simples que mostra o modo como o TaggedMenuItem pode ser utilizado.
 
[C#]using System;using System.Windows.Forms; namespace TestCS{    public class TestForm : System.Windows.Forms.Form    {        public TestForm()        {            this.Size = new System.Drawing.Size(400,300);            this.Text = "TestForm";             EventHandler MenuItem_Click_EventHandler = new EventHandler(MenuItem_Click);             MainMenu mainMenu = new MainMenu();             MenuItem menuItem = new MenuItem("MenuItem", MenuItem_Click_EventHandler);            mainMenu.MenuItems.Add(menuItem);             TaggedMenuItem taggedMenuItem = new TaggedMenuItem("TaggedMenuItem", MenuItem_Click_EventHandler);            taggedMenuItem.Tag = "Test";            mainMenu.MenuItems.Add(taggedMenuItem);             this.Menu = mainMenu;             this.Menu.MergeMenu(mainMenu.CloneMenu());        }         private void MenuItem_Click(object sender, EventArgs e)        {            if (sender is TaggedMenuItem)                MessageBox.Show((sender as TaggedMenuItem).Tag.ToString(), "Tagged Menu Item");            else if (sender is MenuItem)                MessageBox.Show(string.Empty, "Standard Menu Item");        }         [STAThread]        static void Main()         {            Application.Run(new TestForm());        }    }} [Visual Basic .NET]Imports SystemImports System.Windows.Forms Namespace TestVB    Public Class TestForm        Inherits System.Windows.Forms.Form         Public Sub New()            MyBase.New()             Me.Size = New System.Drawing.Size(400, 300)            Me.Text = "TestForm"             Dim MenuItem_Click_EventHandler As EventHandler = New EventHandler(AddressOf Me.MenuItem_Click)             Dim menuItem As New MainMenu             Dim menuItem1 As New MenuItem("MenuItem", MenuItem_Click_EventHandler)            menuItem.MenuItems.Add(menuItem1)             Dim menuItem2 As New TaggedMenuItem("TaggedMenuItem", MenuItem_Click_EventHandler)            menuItem2.Tag = "Test"            menuItem.MenuItems.Add(menuItem2)             Me.Menu = menuItem             Me.Menu.MergeMenu(menuItem.CloneMenu)         End Sub         Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As EventArgs)            If TypeOf sender Is TaggedMenuItem Then                MessageBox.Show(DirectCast(sender, TaggedMenuItem).Tag.ToString, "Tagged Menu Item")            Else                If TypeOf sender Is MenuItem Then                    MessageBox.Show(String.Empty, "Standard Menu Item")                End If            End If        End Sub         <STAThread()> _        Public Shared Sub Main()            Application.Run(New TestForm)        End Sub     End ClassEnd Namespace 

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 555264 - Última Revisão: 12/08/2015 01:28:32 - Revisão: 1.0

  • Microsoft .NET Framework 1.1
  • kbnosurvey kbarchive kbpubmvp kbpubtypecca kbpubtypett kbhowto KB555264 KbMtpt kbmt
Esta informação foi útil?