أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

إن المستعرض الذي تستخدمه غير معتمد

إنك تحتاج إلى تحديث المستعرض لاستخدام الموقع.

التحديث إلى أحدث إصدار من Internet Explorer

كيفية إنشاء قائمة مخصصة في Visual Basic .NET أو في Visual Basic 2005

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية888168
الموجز
التعرف على كيفية إنشاء قائمة مخصصة في Microsoft Visual Basic .NET أو Microsoft Visual Basic 2005 خلال كل المناقشات أمثلة التعليمات البرمجية.
مقدمة حول
توضح هذه المقالة كيفية إنشاء قائمة مخصصة في Microsoft Visual Basic .NET أو في Microsoft Visual Basic 2005. إنشاء قائمة مخصصة بواسطة يرث عنصر التحكم MainMenu وبواسطة إضافة خصائص إلى عناصر التحكم MainMenu.

back to the top

توسيع الفئة MenuItem

لا يوفر فئة MenuItem طريقة مضمن من عرض رمز. على سبيل المثال، هناك لم خاصية رمز يمكنك تعيين لعرض رمز. عندما لا توفر فئة Microsoft .NET Framework ميزة التي تريدها, يمكنك توسيع تلك الفئة ثم يمكنك توفير الميزة بنفسك.

يمكنك توسيع فئة MenuItem بحيث يمكنك إنشاء عنصر قائمة رسم مالك. يعني عنصر قائمة رسم مالك مسؤولةً المطور للرسم فئة MenuItem على الشاشة.

لتوسيع فئة MenuItem استخدم بناء الجملة توريث فئة التالي.
Public Class MyIconMenu    Inherits MenuItemEnd Class
back to the top

تعريف كائن خط والكائن على رمز من فئة MenuItem

عند ترث الفئة MenuItem ترث خصائص وأساليب وأحداث الخاص به. يمكنك إنشاء الرمز الخاص بك لفئة مخصصة عن طريق تجاوز سلوك اثنين من الطرق التي ترث. تجاوز الأداء أسلوب OnMeasureItem أسلوب OnDrawItem. يجب أيضاً تعريف حقول خاصة داخل فئة المخصصة الخاصة بك للاحتفاظ خط الكائن "والكائن" رمز. تحتاج كائن الخط بحيث يمكن أن تحتوي الفئة المخصصة على نص بالإضافة إلى رموز.

إذا تتطلب طريقة للمطورين الذين يستخدمون فئة مخصصة تهيئة حقول خاصة استخدام منشئ فئة مخصصة. مُنشئ Visual Basic .NET 2003 هو أسلوب خاص يسمى جديد. يتم استدعاء أسلوب جديد بواسطة .NET Framework عند إنشاء مثيل فئة مخصصة. باستخدام Visual Basic .NET 2003 يمكنك تمرير المعلمات إلى مُنشئ الخاص بك.

كما يعتمد Visual Basic .NET 2003 الزائد الأسلوب. يمكنك تحديد عدة مرات نفس الأسلوب طالما كانت التواقيع أسلوب فريدة.

باستخدام المُنشئات و الزائد أسلوب تستطيع أن تسمح للمطورين تهيئة حقول خاصة فئة مخصصة. قد يتشابه رمز الفئة المخصصة المثال التعليمات البرمجية التالي.
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
لاحظ أن أنك استخدمت الأسلوب الزائد على مُنشئ الخاص بك بحيث يكون لدى المطور خيار عنصر قائمة برمز أو عنصر قائمة دون رمز. يجب عليك أيضاً تعيين الخاصية OwnerDraw الفئة المخصصة إلى القيمة true إذا كنت تريد عرض رمز. هذه الخطوة مهماً لأنه إذا لم يتم إكمال هذه الخطوة يتم عرض أية رموز في القائمة.

back to the top

إضافة عناصر إلى القائمة الخاصة بك

فحص طريقتين التي يجب أن يتم تجاوز. يتم استدعاء أسلوب OnMeasureItem عندما يتم رسم القائمة الخاصة بك. أسلوب OnMeasureItem يتيح لك تحديد حجم القائمة الخاصة بك بواسطة إعداد خصائص جهازي مُنشئ MeasureItemEventArgs. خصائص اثنين من منشئ MeasureItemEventArgs التي تقوم بتعيينها هي ItemHeight والخاصية ItemWidth. يتم تمرير هذه الإعدادات كمعلمات إلى أسلوب OnMeasureItem.

قد تحتاج إلى تحديد ارتفاع عنصر القائمة استناداً إلى ارتفاع الرمز. قد أو قد تكون المناسبة دوماً. بشكل عام، يجب ألا يتجاوز ارتفاع النص عنصر القائمة ارتفاع الرمز.

لتحديد عرض القائمة الخاصة بك، يجب أن تعرف عرض السلسلة المعروضة في عنصر القائمة. يمكن استخدام كائن StringFormat استرداد هذه المعلومات. يمكن العثور على هذا الكائن في مساحة الاسم System.Drawing. عند لقياس عرض عنصر القائمة "، يجب مراعاة الرمز أيضاً.

قد تكون التعليمات البرمجية للأسلوب OnMeasureItem تشبه المثال التعليمات البرمجية التالي.
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

رسم القائمة الخاصة بك

بعد تحديد حجم القائمة الخاصة يجب رسم القائمة الخاصة بك بواسطة استخدام الأسلوب OnDrawItem فئة مخصصة. يتم تمرير هذه الطريقة إلى كائن DrawItemEventArgs. يمكن استخدام كائن DrawItemEventArgs الحصول على كائن الرسومات لعنصر القائمة. يتيح هذا إمكانية رسم مباشرةً على سطح القائمة الخاصة باستخدام فعالة GDI + الميزات المتوفرة في .NET Framework. أولاً، رسم لون خلفية. ثم ارسم الرمز. أخيراً، رسم النص عنصر القائمة.

قد تكون مشابهة لما المثال التعليمات البرمجية التالي التعليمة البرمجية الخاصة بك القائمة. e.Graphics.FillRectangle
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

إنشاء اختصار لوحة مفاتيح عنصر القائمة

تسمى دالة AppendShortcut في أسلوب OnMeasureItem وأسلوب OnDrawItem في أمثلة التعليمات البرمجية. قد لقياس ثم ارسم سلسلة الخاصة بك استناداً إلى الخاصية Text عنصر القائمة. على الرغم من ذلك، هذا لا جرب الحقيقة عنصر القائمة قد يكون لديك اختصار لوحة مفاتيح. إذا كان لدى عنصر القائمة اختصار لوحة مفاتيح, يجب أن عرض اختصار لوحة المفاتيح ثم قم بزيادة عرض عنصر القائمة. يجب أن يمثل اختصار لوحة المفاتيح كسلسلة. يمثل مفتاح الاختصار كسلسلة الدالة AppendShortcut وتقوم بإلحاق سلسلة الاختصار إلى نص القائمة الموجودة على العنصر.

قد تكون التعليمات البرمجية للدالة AppendShortcut تشبه المثال التعليمات البرمجية التالي.
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

تمييز عنصر القائمة

بعد إنشاء عنصر قائمة رمز أساسية قد ترغب في تمييزها عنصر القائمة كما يتم تحديده. يجب أن رسم حد ثم تمييز النص في أسلوب OnDrawItem.

back to the top

مثال التعليمة البرمجية

مثال التعليمة البرمجية التالية هي رمز إكمال لفئة المخصصة. يتضمن هذا المثال رمز التعليمات البرمجية لتمييز عنصر القائمة.
' 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. إذا تم تسمية النموذج Form1, يتم تسمية الملفين التي تمثل النموذج Form1.vb و Form1.Designer.vb. كتابة التعليمات البرمجية في ملف Form1.vb. مصمم نماذج Windows بكتابة التعليمة البرمجية في ملف Form1.Designer.vb. مصمم نماذج Windows يستخدم الكلمة الأساسية الجزئية لتقسيم تطبيق Form1 إلى ملفين منفصلة. يمنع هذا السلوك في التعليمات البرمجية التي تم إنشاؤها مصمم من يتم interspersed مع التعليمات البرمجية الخاصة بك.

لمزيد من المعلومات حول تحسينات اللغة 2005 Visual Basic الجديدة قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب: لمزيد من المعلومات حول فئات جزئية "و" مصمم نماذج Windows قم بزيارة موقع MSDN التالي: back to the top

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 888168 - آخر مراجعة: 05/11/2007 07:08:50 - المراجعة: 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 KbMtar
تعليقات
did=1&t=">/html>p;did=1&t=">id=1&t=">