Teď jste offline a čekáte, až se znova připojí internet.

Jak vytvořit vlastní nabídku, Visual Basic .NET nebo Visual Basic 2005

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:888168
Souhrn
Zjistěte, jak vytvořit vlastní nabídku v Microsoft Visual Basic .NET nebo Microsoft Visual Basic 2005 pomocí diskuse i příklady kódu.
Úvod
Tento článek popisuje, jak vytvořit vlastní nabídky v aplikaci Microsoft Visual Basic .NET nebo Microsoft Visual Basic 2005. Vytvořit vlastní nabídku dědění MainMenu řízení a přidání vlastností do položky řízení MainMenu.

back to the top

Rozšířit třídy MenuItem

Třídy MenuItem neposkytuje předdefinované způsob zobrazení Ikona. Například je vlastnost žádné ikony, které lze nastavit zobrazení Ikona. Při třídy Microsoft .NET Framework neposkytuje funkce, které chcete, můžete rozšířit třídy a můžete poskytnout funkci sami.

Třídy MenuItem můžete rozšířit, takže můžete vytvořit položku nakreslena vlastník nabídky. Položka nakreslena vlastník nabídky znamená, že je Vývojář zodpovědný za výkresu třídy MenuItem na obrazovce.

Rozšířit třídy MenuItem, použijte následující syntaxi dědičnosti třídy.
Public Class MyIconMenu    Inherits MenuItemEnd Class
back to the top

Deklarovat objekt písma a ikony objektu pro třídu MenuItem

Při dědit ze třídy MenuItem dědí jeho vlastnosti, metody a události. Můžete vytvořit vlastní ikonu pro vlastní třída přepsáním chování dvou metod, které jste dědí. Přepsat chování metody OnMeasureItem a metodu OnDrawItem. Soukromé polí musí také deklarovat v rámci vlastní třídy držet písmo objektu a ikona objektu. Objekt písmo třeba, aby vlastní třídy mohou obsahovat text na ikony.

Pokud vyžadují způsobem pro vývojáře, kteří používají vlastní třída inicializovat soukromé polí použijte konstruktor vlastní třídy. Konstruktor Visual Basic .NET 2003 je zvláštní metoda, která se nazývá Nový. Nová metoda nazývá .NET Framework při vytvoření instance vlastní třídy. Pomocí jazyka .NET 2003 předat parametry vaše konstruktoru.

Visual Basic .NET 2003 podporuje také přetížení metody. Můžete definovat stejnou metodu mnohokrát, jako jsou jedinečné podpisy metodu.

Pomocí konstruktory a metodu přetížení můžete nechat vývojáři inicializovat soukromé polí vlastní třídy. Kód pro vlastní třídy se může podobat následující příklad kódu.
Public Class MyIconMenu Inherits MenuItem       	Private font As Font        Private icon As Icon            Sub New(ByVal menuText As String)                   MyClass.New(menuText, Nothing, Shortcut.None, Nothing)           	End Sub            Sub New(ByVal menuText As String, ByVal handler As EventHandler,  ByVal shortcut As Shortcut, ByVal ico As icon)                MyBase.New(menuText, handler, shortcut)                Me.icon = ico                Me.font = New Font("Arial", 8)                Me.OwnerDraw = True            End Sub   End Class
Všimněte si, že jste použili metodu přetížení na vaše konstruktor tak, aby vývojář má možnost nutnosti položka nabídky s ikonu nebo položku nabídky bez ikona. Musíte také nastavit vlastnost OwnerDraw vlastní třídy na hodnotu true, pokud chcete zobrazit ikonu. Tento krok je důležitý, protože pokud tento krok není dokončena, jsou v nabídce zobrazeny žádné ikony.

back to the top

Přidání položek do nabídky

Prozkoumejte dvě metody musí být přepsána. OnMeasureItem metoda je volána, když je nakreslena vaší nabídce. Metoda OnMeasureItem umožňuje určit velikost vaší nabídce nastavením dvou vlastností konstruktor MeasureItemEventArgs. Jsou dvě vlastnosti MeasureItemEventArgs konstruktoru, která nastavíte vlastnost ItemHeight a vlastnost ItemWidth. Tato nastavení jsou předány jako parametry metody OnMeasureItem.

Chcete zjistit výšku na základě výšky na ikonu položky nabídky. To může nebo nemusí být vždy vhodné. Výška text položky nabídky obvykle by neměl překročit výšku na ikonu.

Chcete-li určit šířku vaší nabídce, musíte znát šířku řetězec zobrazený v položce nabídky. Pomocí objektu StringFormat můžete tyto informace načíst. Tento objekt lze nalézt v oboru názvů System.Drawing. Měření šířky položky nabídky musíte zvážit také na ikonu.

Kód pro metodu OnMeasureItem může být podobná následující příklad kódu.
Protected Overrides Sub OnMeasureItem(ByVal e As MeasureItemEventArgs)        MyBase.OnMeasureItem(e)        Dim sf As StringFormat = New StringFormat()        sf.HotkeyPrefix = HotkeyPrefix.Show        sf.SetTabStops(50, New Single() {0})        e.ItemHeight = Me.icon.Height + 6        e.ItemWidth = CInt(e.Graphics.MeasureString(AppendShortcut(), _                            Me.font, 1000, sf).Width) + Me.icon.Width + 5        sf.Dispose()        sf = NothingEnd Sub
back to the top

Nakreslit vaší nabídce

Po určení velikosti vaší nabídce musí nakreslete vaší nabídce pomocí metody OnDrawItem vlastní třídy. Tato metoda je předán objekt DrawItemEventArgs. Získání objektu Graphics pro položku nabídky můžete použít objekt DrawItemEventArgs. To umožňuje kreslit přímo na povrch vaší nabídce pomocí výkonných GDI + funkce, které jsou k dispozici v rozhraní .NET Framework. První nakreslete barvu pozadí. Potom nakreslete na ikonu. Poslední nakreslete text položky nabídky.

Kód pro vaší nabídky může být podobná následující příklad kódu.
Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)   Dim br As Brush   Dim sf As StringFormat   MyBase.OnDrawItem(e)   e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds)   If Not (Me.icon Is Nothing) Then      e.Graphics.DrawIcon(Me.icon, e.Bounds.Left + 3, e.Bounds.Top + 3)   End If   sf = New StringFormat()   sf.HotkeyPrefix = HotkeyPrefix.Show   sf.SetTabStops(50, New Single() {0})   br = New SolidBrush(SystemColors.WindowText)   e.Graphics.DrawString(AppendShortcut(), Me.font, br, e.Bounds.Left + _                          Me.icon.Width + 10, e.Bounds.Top + 2, sf)   'Clean up resources.   br.Dispose()   br = Nothing   sf.Dispose()   sf = NothingEnd Sub
back to the top

Vytvoření klávesové zkratky pro položku nabídky

V příkladech kódu funkce AppendShortcut nazývá v OnMeasureItem metodu a metodu OnDrawItem. By měření a nakreslete vaše řetězce na základě vlastnost text položky nabídky. Však tato nepovažuje fakt, že položka nabídky pravděpodobně klávesovou zkratku. Položka nabídky nemá klávesovou zkratku, musíte zobrazit klávesové zkratky a zvětšit šířku položky nabídky. Klávesové zkratky musí představovat jako řetězec. Funkce AppendShortcut představuje klávesové zkratky jako řetězec a připojí řetězec zástupce existující text položky nabídky.

Kód funkce AppendShortcut může být podobná následující příklad kódu.
Private Function AppendShortcut() As String   Dim s As String   s = Me.Text   ' Check to see if we have a shortcut.   ' If so, append it to our existing text.     If Me.ShowShortcut And Me.Shortcut <> Shortcut.None Then      Dim k As Keys = CType(Shortcut, Keys)      s = s & Convert.ToChar(9) & _              TypeDescriptor.GetConverter(GetType(Keys)).ConvertToString(k)      End If   Return sEnd Function
back to the top

Zvýrazněte položku nabídky

Po vytvoření položky nabídky Základní ikonu můžete zvýraznit je vybrána položka nabídky. Musíte nakreslit ohraničení a zvýraznit text v metodě OnDrawItem.

back to the top

Příklad kódu

Následující příklad kódu je dokončeno kód vlastní třídy. Tento příklad kódu zahrnuje kód zvýrazněte položku nabídky.
' Form1.vbPublic Class Form1    Inherits System.Windows.Forms.Form#Region " Windows Form Designer generated code "    Public Sub New()        MyBase.New()        'This call is required by the Windows Form Designer.        InitializeComponent()        'Add any initialization after the InitializeComponent() call.    End Sub     'Form overrides dispose to clean up the component list.    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)        If disposing Then            If Not (components Is Nothing) Then                components.Dispose()            End If        End If        MyBase.Dispose(disposing)    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 by using the Windows Form Designer.      'Do not modify it by using the code editor.    Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu    Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()        Me.MainMenu1 = New System.Windows.Forms.MainMenu        Me.MenuItem1 = New System.Windows.Forms.MenuItem            Me.MainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem1})        Me.MenuItem1.Index = 0        Me.MenuItem1.Text = ""               Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)        Me.ClientSize = New System.Drawing.Size(292, 273)        Me.Menu = Me.MainMenu1        Me.Name = "Form1"        Me.Text = "Form1"     End Sub #End Region     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        'Loading the MyIconMenu onto the first menu in MainMenu1.        Dim ico As Icon = New Icon("c:\GSA.ico")        Dim fm As MyIconMenu = New MyIconMenu("Testing", Nothing, Shortcut.None, ico)        MainMenu1.MenuItems(0).MenuItems.Add(fm)    End Sub End Class' MyIconMenu.vbImports SystemImports System.ComponentModelImports System.DrawingImports System.Drawing.Drawing2DImports System.Drawing.TextImports System.Windows.Forms Public Class MyIconMenu    Inherits MenuItem     Private font As font    Private icon As icon     'Set properties for border highlighting.    Private borderWidth As Integer = 1    Private borderColor As Color = Color.DarkBlue      Sub New(ByVal menuText As String, ByVal handler As EventHandler, _            ByVal shortcut As Shortcut, ByVal ico As icon)         MyBase.New(menuText, handler, shortcut)        Me.icon = ico        Me.font = New Font("Arial", 8)        Me.OwnerDraw = True     End Sub     Public Overloads Sub Dispose()         Me.font.Dispose()        Me.font = Nothing        Me.icon.Dispose()        Me.icon = Nothing        MyBase.Dispose()     End Sub     Protected Overrides Sub OnMeasureItem(ByVal e As MeasureItemEventArgs)         MyBase.OnMeasureItem(e)        Dim sf As StringFormat = New StringFormat         sf.HotkeyPrefix = HotkeyPrefix.Show        sf.SetTabStops(50, New Single() {0})         e.ItemHeight = Me.icon.Height + 6        e.ItemWidth = CInt(e.Graphics.MeasureString(AppendShortcut(), _                           Me.font, 1000, sf).Width) + Me.icon.Width + 5         sf.Dispose()        sf = Nothing     End Sub     Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)         Dim br As Brush        Dim sf As StringFormat         MyBase.OnDrawItem(e)         If CBool(e.State And DrawItemState.Selected) Then            'Draw a border to highlight the menu.            e.Graphics.FillRectangle(SystemBrushes.HighlightText, _                                     e.Bounds)             ControlPaint.DrawBorder(e.Graphics, e.Bounds, _                                    Me.borderColor, Me.borderWidth, _                                    ButtonBorderStyle.Solid, _                                    Me.borderColor, Me.borderWidth, _                                    ButtonBorderStyle.Solid, _                                    Me.borderColor, Me.borderWidth, _                                    ButtonBorderStyle.Solid, _                                    Me.borderColor, Me.borderWidth, _                                    ButtonBorderStyle.Solid)         Else            e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds)        End If         If Not (Me.icon Is Nothing) Then            e.Graphics.DrawIcon(Me.icon, e.Bounds.Left + 3, _                                e.Bounds.Top + 3)        End If         sf = New StringFormat        sf.HotkeyPrefix = HotkeyPrefix.Show        sf.SetTabStops(50, New Single() {0})        br = New SolidBrush(SystemColors.WindowText)        e.Graphics.DrawString(AppendShortcut(), Me.font, br, _                              e.Bounds.Left + Me.icon.Width + 10, _                              e.Bounds.Top + 2, sf)         'Clean up resources.        br.Dispose()        br = Nothing        sf.Dispose()        sf = Nothing     End Sub     Private Function AppendShortcut() As String         Dim s As String        s = Me.Text         ' Check to see if we have a shortcut.        ' If so, append it to our existing text.          If Me.ShowShortcut And Me.Shortcut <> Shortcut.None Then            ' Use TypeDescriptor to get a string representation of a            ' Shortcut class.             Dim k As Keys = CType(Shortcut, Keys)             s = s & Convert.ToChar(9) & _            TypeDescriptor.GetConverter(GetType(Keys)).ConvertToString(k)        End If        Return s    End Function End Class
Poznámka je třeba změnit kód Visual Basic 2005. Ve výchozím nastavení jazyka při vytváření projektu model Windows Forms vytvoří dva soubory projektu. Pokud formulář Form1 název, dva soubory, které představují formuláře jsou nazvány Form1.vb a Form1.Designer.vb. Zapisovat kód v souboru Form1.vb. Návrhář model Windows Forms zapíše kód v souboru Form1.Designer.vb. Návrhář model Windows Forms používá klíčové slovo částečné implementace Form1 rozdělit do dvou samostatných souborů. Toto chování zabrání právě spolu s kódu direktivami kód generovaný Návrhář.

Další informace o vylepšení nový jazyk Visual Basic 2005 naleznete na webu Microsoft Developer Network (MSDN): Další informace o částečné třídy a Návrhář model Windows Forms na webu služby MSDN: back to the top

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 888168 - Poslední kontrola: 05/11/2007 07:08:50 - Revize: 2.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster kbprogramming kbmacroexample kbexpertiseinter kbhowto KB888168 KbMtcs
Váš názor
>le="display: none; " src="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">/html>l>0&did=1&t=">