www.doronamir.com

E-mail: doron@doronamir.com

 

 

 

בניית פקד  מתוך WindowsControl

בשלב הראשון בתכנית הנ"ל נבנה פקד המכיל 2 מאפיינים חדשים וקריאה לאירוע חדש. בשלב השני נשבץ את הפקד בטופס רגיל ונבצע פנייה אל המאפיינים החדשים ונרשום שגרת טיפול עבור האירוע החדש.

 

  èè

תכנות הפקד:

בקוד הפקד ניתן לבנות מאפייני גישה אל הפקדים המרכיבים את הפקד החדש , ללא הגדרת מאפיינים אלו  עבור הפקדים

המרכיבים את הפקד החדש לא ניתן יהיה לגשת לאחר שהפקד ישובץ בפרויקט אחר .

הפקד מתפקד כמחלקה וללא חשיפת האיברים הפנימיים לא תתקיים גישה.

בקוד הנ"ל נבנו 2 מאפיינים אחד עבור אתחול הטיימר ( קוצב הזמן ) והשני עבור צביעת רקע התווית המרכיבה את הפקד

 . StartTimer בנוסף למאפיינים הוגדר בפקד החדש אירוע חדש בשם Get ולהחזיר ערך ע"י Set כל מאפיין מכיל אפשרות לקבל ערך ע"י  

label1 האירוע הנ"ל מופעל כאשר אירוע הטיימר מופעל .

 

כאשר אירוע הטיימר מופעל התאריך והשעה מועברים לתצוגה בפקד

 בטופס המארח Delegateכאשר האירוע החדש מופעל תתבצע שגרת טיפול אירוע שעליה יצביע ה.

 

using System;

using System.Collections;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Windows.Forms;

namespace MyClockControl1

{

   

    public class MyClockControl1 : System.Windows.Forms.UserControl

    {

        ...

        ...

        /* מאפיין עבור אתחול קוצב הזמן שיש בפקד בניית

        This Code will expose the properties

        of label1 and Timer1 from the host control */

 

        public bool TimerState

        {

            get{return timer1.Enabled;}

            set{timer1.Enabled=value;}

        }

        //מאפיין עבור צבע הפקד

        public Color ClockColor

        {

            get{return label1.BackColor;}

            set{label1.BackColor=value;}

        }

//הגדרת אירוע עבור הפקד החדש

        public event System.EventHandler StartTimer;

// האירוע החדש יופעל כאשר אירוע הקוצב זמן יופעל            

        private void timer1_Tick(object sender, System.EventArgs e)

        {

        label1.Text=System.DateTime.Now.ToString();

        //העברת הפרמטרים הנדרשים בעת העלאת אירוע

        if(StartTimer!=null)

            StartTimer(sender,e);

        }

       

    }

 

שיבוץ הפקד והפעלתו:

 

ToolBox  (בדרך זו ניתן יהיה לשדרג את הפקד החדש ללא חידוש הפנייה ) והוסף את הפקד החדש ל WinApplicationניתן להוסיף לפרויקט הקיים פרוייקט נוסף ,

גרור את הפקד על פני הטופס והוסף גם תיבת טקסט ופקד רגיל להפעלה , ניתן לפנות אל המאפיינים דרך הקוד או דרך חלון המאפיינים

בקוד הנ"ל מאפיין הצבע ומאפיין מצב הטיימר נקבעו דרך הקוד.

אל שיגרת האירוע אפשר להגיע דרך חלון האירועים , האירוע החדש יופיע בחלון לחץ על האירוע המבוקש והקליד אל השגרה את הקוד .

 

 

 

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

 

namespace TestControl

{

 

    public class Form1 : System.Windows.Forms.Form

    {

//...

//...

//לאחר גרירת הפקד החדש וכניסה לאירוע החדש הקוד הבא יתקבל

    // myClockControl11

            // Host the Control

this.myClockControl11.ClockColor = System.Drawing.SystemColors.Control;

            this.myClockControl11.Location = new System.Drawing.Point(16, 8);

            this.myClockControl11.Name = "myClockControl11";

            this.myClockControl11.Size = new System.Drawing.Size(248, 32);

            this.myClockControl11.TabIndex = 0;

            this.myClockControl11.TimerState = false;

//Delegate for StartTumer Event

this.myClockControl11.StartTimer += new System.EventHandler(this.myClockControl11_StartTimer);

            //

//...

//...

static void Main()

        {

            Application.Run(new Form1());

        }

 

        private void button1_Click(object sender, System.EventArgs e)

        {

            //אתחול מאפיין הצבע של הפקד החדש

            myClockControl11.ClockColor=Color.Yellow;

            //אתחול מאפיין קוצב הזמן של הפקד החדש

            myClockControl11.TimerState=!(myClockControl11.TimerState);

        }

// שגרת הטיפול עבור האירוע החדש

        double i; // הגדרת מונה כללי

    private void myClockControl11_StartTimer(object sender, System.EventArgs e)

        {

        i++;

        textBox1.Text ="StartTimer is Raised: " +  i.ToString();

        }

    }

}

עץ הפרויקט  ומיקומו בתיבת הכלים: