مشاركة عبر


كيفية القيام بما يلي: قم بتطوير عنصر تحكم Windows Forms بسيط

يأخذك هذا القسم من خلال الخطوات الأساسية لتأليف نماذج Windows مخصصة عنصر تحكم. يسمح عنصر التحكم البسيطة التي تم تطويرها في هذه معاينة محاذاة له Textخاصية إلى يمكن تغييرها. لا يمكنك رفع أو معالجة الأحداث.

إلى بإنشاء عنصر تحكم cusإلىm بسيط

  1. تعريف فئة مشتقة من System.Windows.Forms.Control.

    Public Class FirstControl
       Inherits Control
    
    End Class
    
    public class FirstControl:Control{}
    
  2. عرف الخصائص. (ليس مطلوباً لتعريف الخصائص، لأنه يرث عنصر تحكم العديد من الخصائص من Controlبشكل عام قم بتعريف الفئة، ولكن معظم عناصر التحكم المخصصة خصائص إضافى.) جزء تعليمات برمجية التالية بتعريف خاصية مسماة TextAlignment أن FirstControl يستخدم إلى تنسيق عرض Textالخاصية موروثة من Control. للحصول على مزيد من المعلومات حول تعريف خصائص، راجع نظرة عامة حول خصائص.

    ' ContentAlignment is an enumeration defined in the System.Drawing
    ' namespace that specifies the alignment of content on a drawing 
    ' surface.
    Private alignmentValue As ContentAlignment = ContentAlignment.MiddleLeft
    
    <Category("Alignment"), Description("Specifies the alignment of text.")> _
    Public Property TextAlignment() As ContentAlignment
    
       Get
          Return alignmentValue
       End Get
       Set
          alignmentValue = value
    
          ' The Invalidate method invokes the OnPaint method described 
          ' in step 3.
          Invalidate()
       End Set
    End Property
    
    // ContentAlignment is an enumeration defined in the System.Drawing
    // namespace that specifies the alignment of content on a drawing 
    // surface.
    private ContentAlignment alignmentValue = ContentAlignment.MiddleLeft;
    

    عندما تقوم بتعيين خاصية تغيير عرض المرئي عنصر تحكم، يجب أن تقوم باستدعاء Invalidateالأسلوب لإعادة رسم عنصر تحكم. Invalidateهو المعرفة في فئة BaseControl.

  3. يمنع OnPaintأسلوب موروثة من المحمية Controlلتوفير منطق التقديم لجهاز عنصر تحكم. إذا كنت قم بتجاوز لا OnPaint، الخاصة بك عنصر تحكم لن تكون قادراً على رسم نفسه. في جزء تعليمات برمجية التالية، OnPaintطريقة عرض Textخاصية موروثة من Controlمع المحاذاة المحددة مع alignmentValueالحقل.

    Protected Overrides Sub OnPaint(e As PaintEventArgs)
    
       MyBase.OnPaint(e)
       Dim style As New StringFormat()
       style.Alignment = StringAlignment.Near
       Select Case alignmentValue
          Case ContentAlignment.MiddleLeft
             style.Alignment = StringAlignment.Near
          Case ContentAlignment.MiddleRight
             style.Alignment = StringAlignment.Far
          Case ContentAlignment.MiddleCenter
             style.Alignment = StringAlignment.Center
       End Select
    
       ' Call the DrawString method of the System.Drawing class to write   
       ' text. Text and ClientRectangle are properties inherited from
       ' Control.
       e.Graphics.DrawString( _
           me.Text, _
           me.Font, _
           New SolidBrush(ForeColor), _
           RectangleF.op_Implicit(ClientRectangle), _
           style)
    
    End Sub
    
    protected override void OnPaint(PaintEventArgs e) 
    {   
        base.OnPaint(e);
        StringFormat style = new StringFormat();
        style.Alignment = StringAlignment.Near;
        switch (alignmentValue) 
        {
            case ContentAlignment.MiddleLeft:
                style.Alignment = StringAlignment.Near;
                break;
            case ContentAlignment.MiddleRight:
                style.Alignment = StringAlignment.Far;
                break;
            case ContentAlignment.MiddleCenter:
                style.Alignment = StringAlignment.Center;
                break;
        }
    
        // Call the DrawString method of the System.Drawing class to write   
        // text. Text and ClientRectangle are properties inherited from
        // Control.
        e.Graphics.DrawString(
            Text, 
            Font, 
            new SolidBrush(ForeColor), 
            ClientRectangle, style);
    
    } 
    
  4. توفير سمات الخاصة بك عنصر تحكم. تمكين السمات مرئية مصمم لعرض الخاص بك عنصر تحكم والخصائص والأحداث بشكل مناسب في وقت التصميم. جزء تعليمات برمجية التالية تطبيق سمات إلى TextAlignmentخاصية. في مصمم مثل كـ ‏‫Visual Studio، Categoryالسمة (معروضة في جزء تعليمات برمجية) يؤدي إلى خاصية المراد عرضها ضمن فئة المنطقية. Descriptionيؤدي سمة سلسلة وصفي أن dهوplayed في الأسفل نافذة خصائص عند TextAlignmentخاصية هو المحدد. ل المزيد من المعلومات حول السمات، راجع سمات وقت التصميم عن مكونات.

    <Category("Alignment"), Description("Specifies the alignment of text.")> _
    Public Property TextAlignment() As ContentAlignment
    
    [
    Category("Alignment"),
    Description("Specifies the alignment of text.")
    ]
    
  5. (اختياري) توفر الموارد الخاصة بك عنصر تحكم. يمكنك توفير مورد، مثل صورة نقطية للخاص بك عنصر تحكم باستخدام خيار مترجم ( /resC#) لحزمة موارد لها الخاص بك عنصر تحكم. في تشغيل الوقت، يمكن استرداد مورد باستخدام الأساليب ResourceManagerفئة. للحصول على مزيد من المعلومات حول إنشاء و باستخدام موارد، راجع الموارد في تطبيقات.

  6. يحول برمجياً والنشر الخاصة بك عنصر تحكم. إلى ترجمة ونشر FirstControl,ينفذ الخطوات التالية:

    1. حفظ تعليمات برمجية في نموذج التالي إلى ملف مصدر (مثل FirstControl.cs أو FirstControl.vb).

    2. ترجمة تعليمات برمجية المصدر إلى تجميع و حفظ في الدليل تطبيق الخاص بك. للقيام بذلك، قم بتنفيذ الأمر التالي من الدليل الذي يحتوي على المصدر ملف.

      vbc /t:library /out:[path to your application's directory]/CustomWinControls.dll /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll FirstControl.vb
      
      csc /t:library /out:[path to your application's directory]/CustomWinControls.dll /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll FirstControl.cs
      

      /t:libraryيعلم خيار المترجم المحول البرمجي أن تجميع الذي تقوم بإنشائه هو مكتبة (وليس ملحق تنفيذي). /outخيار بتعيين المسار و اسم تجميع. /rخيار بتوفير اسم للتجميعات التي يتم الرجوع إليها بواسطة تعليمات برمجية الخاصة بك. في هذا المثال، يمكنك إنشاء تجميع خاص الذي يمكن للتطبيقات الخاصة بك استخدم. لذلك، يجب عليك إلى حفظه direcإلىry تطبيق الخاص بك. لمزيد من المعلومات حول الحزم و نشر عنصر تحكم للتوزيع، راجع نشر برنامج .NET Framework.

ما يلي عينة العروض تعليمات برمجية ل FirstControl. عنصر تحكم تم تضمينه في مساحة الاسم CustomWinControls. يوفر مساحة الاسم تجمع منطقي لذات الصلة أنواع. يمكنك إنشاء عنصر التحكم الخاص بك في مساحة الاسم جديد أو موجود. في C#, usingإعلان (في Visual أساسى، Imports) تسمح بأنواع إلى يمكن الوصول إليها من مساحة الاسم بدون استخدام اسم مؤهل بشكل كامل من نوع. في المثال التالي، usingيسمح إعلان التعليمة البرمجية الوصول فئة Controlمن System.Windows.Formsكبساطة Controlبدلاً من الاضطرار إلى استخدام اسم مؤهل بشكل كامل System.Windows.Forms.Control.

Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms


Public Class FirstControl
   Inherits Control

   Public Sub New()
   End Sub 


   ' ContentAlignment is an enumeration defined in the System.Drawing
   ' namespace that specifies the alignment of content on a drawing 
   ' surface.
   Private alignmentValue As ContentAlignment = ContentAlignment.MiddleLeft

   <Category("Alignment"), Description("Specifies the alignment of text.")> _
   Public Property TextAlignment() As ContentAlignment

      Get
         Return alignmentValue
      End Get
      Set
         alignmentValue = value

         ' The Invalidate method invokes the OnPaint method described 
         ' in step 3.
         Invalidate()
      End Set
   End Property


   Protected Overrides Sub OnPaint(e As PaintEventArgs)

      MyBase.OnPaint(e)
      Dim style As New StringFormat()
      style.Alignment = StringAlignment.Near
      Select Case alignmentValue
         Case ContentAlignment.MiddleLeft
            style.Alignment = StringAlignment.Near
         Case ContentAlignment.MiddleRight
            style.Alignment = StringAlignment.Far
         Case ContentAlignment.MiddleCenter
            style.Alignment = StringAlignment.Center
      End Select

      ' Call the DrawString method of the System.Drawing class to write   
      ' text. Text and ClientRectangle are properties inherited from
      ' Control.
      e.Graphics.DrawString( _
          me.Text, _
          me.Font, _
          New SolidBrush(ForeColor), _
          RectangleF.op_Implicit(ClientRectangle), _
          style)

   End Sub

End Class
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace CustomWinControls
{
    public class FirstControl : Control
    {

        public FirstControl()
        {

        }

        // ContentAlignment is an enumeration defined in the System.Drawing
        // namespace that specifies the alignment of content on a drawing 
        // surface.
        private ContentAlignment alignmentValue = ContentAlignment.MiddleLeft;

        [
        Category("Alignment"),
        Description("Specifies the alignment of text.")
        ]
        public ContentAlignment TextAlignment 
        {

            get 
            {
                return alignmentValue;
            }
            set 
            {
                alignmentValue = value;

                // The Invalidate method invokes the OnPaint method described 
                // in step 3.
                Invalidate(); 
            }
        }


        protected override void OnPaint(PaintEventArgs e) 
        {   
            base.OnPaint(e);
            StringFormat style = new StringFormat();
            style.Alignment = StringAlignment.Near;
            switch (alignmentValue) 
            {
                case ContentAlignment.MiddleLeft:
                    style.Alignment = StringAlignment.Near;
                    break;
                case ContentAlignment.MiddleRight:
                    style.Alignment = StringAlignment.Far;
                    break;
                case ContentAlignment.MiddleCenter:
                    style.Alignment = StringAlignment.Center;
                    break;
            }

            // Call the DrawString method of the System.Drawing class to write   
            // text. Text and ClientRectangle are properties inherited from
            // Control.
            e.Graphics.DrawString(
                Text, 
                Font, 
                new SolidBrush(ForeColor), 
                ClientRectangle, style);

        } 
    }
}

استخدام عنصر تحكم مخصص تشغيل نموذج

يلي مثال يظهر نموذج بسيط يستخدم FirstControl. يقوم بإنشاء ثلاثة مثيلات FirstControl، كل منها القيمة مختلفة TextAlignmentخاصية.

إلى يحول برمجياً ثم قم بتشغيل هذا النموذج

  1. حفظ تعليمات برمجية في المثال التالي إلى مصدر ملف (SimpleForm.cs أو SimpleForms.vb).

  2. ترجمة تعليمات برمجية المصدر في تجميع تنفيذي قبل تنفيذ الأمر التالي من الدليل الذي يحتوي على المصدر ملف.

    vbc /r:CustomWinControls.dll /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll SimpleForm.vb
    
    csc /r:CustomWinControls.dll /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll SimpleForm.cs
    

    CustomWinControls.dll هو تجميع الذي يحتوي على الفئة FirstControl. يجب أن يكون هذا تجميع في نفس الدليل كملف المصدر الخاص بالنموذج الذي يقوم بالوصول إلى ذلك (SimpleForm.cs أو SimpleForms.vb).

  3. ينفذ SimpleForm.exe using the following الأمر.

    SimpleForm
    
Imports System
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms




Public Class SimpleForm
   Inherits System.Windows.Forms.Form

   Private firstControl1 As FirstControl

   Private components As System.ComponentModel.Container = Nothing


   Public Sub New()
      InitializeComponent()
   End Sub 





   Private Sub InitializeComponent()
      Me.firstControl1 = New FirstControl()
      Me.SuspendLayout()

      ' 
      ' firstControl1
      ' 
      Me.firstControl1.BackColor = System.Drawing.SystemColors.ControlDark
      Me.firstControl1.Location = New System.Drawing.Point(96, 104)
      Me.firstControl1.Name = "firstControl1"
      Me.firstControl1.Size = New System.Drawing.Size(75, 16)
      Me.firstControl1.TabIndex = 0
      Me.firstControl1.Text = "Hello World"
      Me.firstControl1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter

      ' 
      ' SimpleForm
      ' 
      Me.ClientSize = New System.Drawing.Size(292, 266)
      Me.Controls.Add(firstControl1)
      Me.Name = "SimpleForm"
      Me.Text = "SimpleForm"
      Me.ResumeLayout(False)
   End Sub 


   <STAThread()>  _
   Shared Sub Main()
      Application.Run(New SimpleForm())
   End Sub 
End Class 
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace CustomWinControls
{

    public class SimpleForm : System.Windows.Forms.Form
    {
        private FirstControl firstControl1;

        private System.ComponentModel.Container components = null;

        public SimpleForm()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        private void InitializeComponent()
        {
            this.firstControl1 = new FirstControl();
            this.SuspendLayout();

            // 
            // firstControl1
            // 
            this.firstControl1.BackColor = System.Drawing.SystemColors.ControlDark;
            this.firstControl1.Location = new System.Drawing.Point(96, 104);
            this.firstControl1.Name = "firstControl1";
            this.firstControl1.Size = new System.Drawing.Size(75, 16);
            this.firstControl1.TabIndex = 0;
            this.firstControl1.Text = "Hello World";
            this.firstControl1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;

            // 
            // SimpleForm
            // 
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.firstControl1);
            this.Name = "SimpleForm";
            this.Text = "SimpleForm";
            this.ResumeLayout(false);

        }

        [STAThread]
        static void Main() 
        {
            Application.Run(new SimpleForm());
        }


    }
}

راجع أيضًا:

المبادئ

الأحداث في عناصر التحكم Windows Forms

موارد أخرى

خصائص عناصر التحكم Windows Forms