Αυτήν τη στιγμή είστε εκτός σύνδεσης, σε αναμονή για επανασύνδεση στο Internet

Πώς μπορείτε να δημιουργήσετε ένα προσαρμοσμένο μενού σε Visual Basic .NET ή Visual Basic 2005

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:888168
Περίληψη
Μάθετε πώς μπορείτε να δημιουργήσετε ένα προσαρμοσμένο μενού στην Microsoft Visual Basic .NET ή Microsoft Visual Basic 2005 έως και συζητήσεις και παραδείγματα κώδικα.
ΕΙΣΑΓΩΓΗ
Αυτό το άρθρο περιγράφει τον τρόπο δημιουργίας ενός προσαρμοσμένου μενού στη Microsoft Visual Basic .NET ή Microsoft Visual Basic του 2005. Μπορείτε να δημιουργήσετε ένα προσαρμοσμένο μενού, η μεταβίβαση τουMainMenuστοιχείο ελέγχου και προσθέτοντας ιδιότητες για τα στοιχεία τηςMainMenuControl.

Επιστροφή στην αρχή

Επεκτείνετε την κλάση MenuItem

Για ναMenuItemη κλάση δεν παρέχει ενσωματωμένη τρόπο εμφάνισης του εικονιδίου. Για παράδειγμα, υπάρχει καμίαΕικονίδιο (Icon)η ιδιότητα που μπορείτε να ορίσετε να εμφανίζεται ένα εικονίδιο. Όταν μια κλάση του Microsoft .NET Framework δεν παρέχει μια δυνατότητα που θέλετε, μπορείτε να επεκτείνετε την κλάση αυτή και μπορείτε να δώσετε τη δυνατότητα στον εαυτό σας.

Μπορείτε να επεκτείνετε τοMenuItemκλάσης, έτσι ώστε να μπορείτε να δημιουργήσετε ένα στοιχείο μενού σχεδιάζονται κατόχου. Ένα στοιχείο μενού σχεδιάζονται κάτοχος σημαίνει ότι ο προγραμματιστής είναι υπεύθυνος για το σχέδιο τουMenuItemη κλάση στην οθόνη.

Για να επεκτείνετε τοMenuItemκλάση, χρησιμοποιήστε την παρακάτω σύνταξη μεταβίβασης της κλάσης.
Public Class MyIconMenu    Inherits MenuItemEnd Class
Επιστροφή στην αρχή

Για να δηλώσετε ένα αντικείμενο γραμματοσειράς και εικονίδιο αντικειμένου για την κλάση MenuItem

Όταν κάνετε μεταβίβαση από τοMenuItemη κλάση, που κληρονομούν τις ιδιότητες, μεθόδους και συμβάντα. Μπορείτε να δημιουργήσετε το δικό σας εικονίδιο για την προσαρμοσμένη κλάση, αντικαθιστώντας τη συμπεριφορά των δύο από τις μεθόδους που θα μεταβιβαστούν. Μπορείτε να παρακάμψετε τη συμπεριφορά τουOnMeasureItemη μέθοδος και από τοOnDrawItemΗ μέθοδος. Πρέπει επίσης να δηλώσετε ιδιωτικά πεδία μέσα σε προσαρμοσμένη κλάση σας, για τη διατήρηση ενόςγραμματοσειράobject and anΕικονίδιο (Icon)Object. You need aγραμματοσειράobject so that your custom class can contain text in addition to icons.

If you require a way for developers who use your custom class to initialize your private fields, use the constructor of your custom class. A Visual Basic .NET 2003 constructor is a special method that is calledΝέα. Για ναΝέαmethod is called by the .NET Framework when your custom class is instantiated. By using Visual Basic .NET 2003, you can pass parameters to your constructor.

Visual Basic .NET 2003 also supports method overloading. You can define the same method many times, as long as the method signatures are unique.

By using constructors and method overloading, you can let developers initialize the private fields of your custom class. The code for your custom class may look similar to the following code example.
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
Notice that you have used method overloading on your constructor so that the developer has the option of having a menu item with an icon or a menu item without an icon. You must also set theOwnerDrawproperty of your custom class to theTruevalue if you want to display an icon. This step is important because if this step is not completed, no icons are displayed on your menu.

Επιστροφή στην αρχή

Add items to your menu

Examine the two methods that must be overridden. Για ναOnMeasureItemmethod is called when your menu is drawn. Για ναOnMeasureItemmethod lets you specify the size of your menu by setting two properties of theMeasureItemEventArgsconstructor. The two properties of theMeasureItemEventArgsconstructor that you set are theItemHeightη ιδιότητα και τοItemWidthΙδιότητα. These settings are passed as parameters to theOnMeasureItemΗ μέθοδος.

You may want to determine the height of the menu item based on the height of the icon. This may or may not always be appropriate. Typically, the height of the text of the menu item should not exceed the height of the icon.

To determine the width of your menu, you must know the width of the string that is displayed in the menu item. Μπορείτε να χρησιμοποιήσετε τοStringFormatobject to retrieve this information. This object can be found in theSystem.Drawingχώρος ονομάτων. When you measure the width of the menu item, you must also consider the icon.

The code for yourOnMeasureItemmethod may be similar to the following code example.
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
Επιστροφή στην αρχή

Draw your menu

After you specify the size of your menu, you must draw your menu by using theOnDrawItemmethod of your custom class. This method is passed to theDrawItemEventArgsObject. Μπορείτε να χρησιμοποιήσετε τοDrawItemEventArgsobject to obtain aΓραφικάobject for your menu item. This lets you draw directly on the surface of your menu by using the powerful GDI+ features that are available in the .NET Framework. First, draw a background color. Then, draw the icon. Last, draw the text of the menu item.

The code for your menu may be similar to the following code example.
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
Επιστροφή στην αρχή

Create a keyboard shortcut for the menu item

In the code examples, theAppendShortcutfunction is called in both theOnMeasureItemη μέθοδος και τοOnDrawItemΗ μέθοδος. You could measure and draw your string based on theTextproperty of the menu item. However, this does not consider the fact that the menu item might have a keyboard shortcut. If the menu item does have a keyboard shortcut, you must display the keyboard shortcut and increase the width of the menu item. You must represent the keyboard shortcut as a string. Για ναAppendShortcutfunction represents the keyboard shortcut as a string and appends the shortcut string to the existing menu item text.

The code for theAppendShortcutfunction may be similar to the following code example.
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
Επιστροφή στην αρχή

Highlight the menu item

After you create a basic icon menu item, you may want to highlight the menu item as it is selected. You must draw a border and highlight the text in theOnDrawItemΗ μέθοδος.

Επιστροφή στην αρχή

Code example

The following code example is the complete code for your custom class. This code example includes the code to highlight the menu item.
' 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
ΣΗΜΕΙΩΣΗΠρέπει να αλλάξετε τον κώδικα της Visual Basic του 2005. Από προεπιλογή, η Visual Basic δημιουργεί δύο αρχεία για το έργο όταν δημιουργείτε ένα έργο Windows Forms. Εάν η φόρμα ονομάζεται Φόρμα1, τα δύο αρχεία που αντιπροσωπεύει τη φόρμα ονομάζονται Form1.vb και Form1.Designer.vb. Συντάξτε τον κώδικα στο αρχείο Form1.vb. Η σχεδίαση φορμών Windows εγγράφει τον κώδικα στο αρχείο Form1.Designer.vb. Η σχεδίαση φορμών Windows χρησιμοποιεί τη μερική λέξη-κλειδί για να διαιρέσετε την εφαρμογή της Φόρμα1 σε δύο ξεχωριστά αρχεία. Αυτή η συμπεριφορά αποτρέπει είναι διάσπαρτα με τον κώδικά σας τον κώδικα που δημιουργήθηκε από σχεδιαστή.

Για περισσότερες πληροφορίες σχετικά με τις νέες βελτιώσεις γλώσσα της Visual Basic 2005, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft Developer Network (MSDN) στο Web:Για περισσότερες πληροφορίες σχετικά με την μερική κλάσεις και η σχεδίαση φορμών Windows, επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:Επιστροφή στην αρχή

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί αυτόματα

Ιδιότητες

Αναγνωριστικό άρθρου: 888168 - Τελευταία αναθεώρηση: 12/23/2010 07:55:00 - Αναθεώρηση: 2.0

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

  • kbvs2005swept kbvs2005applies kbhowtomaster kbprogramming kbmacroexample kbexpertiseinter kbhowto kbmt KB888168 KbMtel
Σχόλια
1.microsoft.com/c.gif?DI=4050&did=1&t=">1&t=">ody>tomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("