יום שני, 11 באוקטובר 2010

יצירת User Control ושימוש ב-delegate


1) ניצור תוכנית רגילה Windows Application, ניתן שם לטופס ברירת המחדל: mainFrm.cs

2) לחיצה ימנית על solution, ואז addnew project → Windows Control Library
    ייווצר
User Control, נבחר ונשנה לו את השם – לדוגמה WCL, נוסיף לחצנים, תיבות וכדומה.

3) כעת ניתן להוסיף את הפרויקט WCL ב-reference של הטופס הראשי,
    אך כדי שיופיע גם ב-
Toolbox נעשה build לפחות ל-WCL.

4) לחיצה ימנית על reference שנמצא בבלוק של הטופס הראשי, נבחר Add Reference….
     נוסיף את ההפניה לפרויקט  שיצרנו בלשונית Projects או נבחר קובץ dll חיצוני בלשונית Browse

5) UserControl שיצרנו אמור להופיע ב-Toolbox.
    אם לא, נוסיף אותו ע"י לחיצה ימנית ←
Choose Items ← לשונית Net Framework ←נלחץ Browse
    ונבחר בקובץ ה-
dll שנמצא בפרויקט, בדרך כלל ב- ProjectName/SolutionName/bin/debug
   או  במקרה שלנו:
UcApp/UcApp/bin/debug




שימוש ב-delegate
עד כאן יצרנו UserControl והוספנו אותו לטופס הראשי בתור פקד.


כדי ליצור תקשורת בין אותו פקד לטופס הראשי נשתמש ב-delegate :
(את הקוד הבא נוסיף בתוך ה-UserControl)
public delegate void mydelegate(string s);
public event mydelegate strsent;
public virtual void onSendString(string s)
{
            strsent(s);
}

נלך לטופס הראשי, נבחר ב-WCL שמיקמנו בטופס, נבחר ב-Properties ואז נבחר בצורת הברק כדי להיכנס להגדרת 'Events' ונמצא את השם שהגדרנו ל-Event שיצרנו - כלומר strsent .
נלחץ לחיצה כפולה ובתוכו נגדיר אילו פעולות יתבצעו על המחרוזת שנקבל בהתרחש האירוע. למשל:
(הקוד הבא נמצא בטופס הראשי)
private void userControl11_strsent(string s)
{
            MessageBox.Show(s);
}


עד כאן הגדרנו לטופס הראשי שבהתקבל מחרוזת מתוך הפקד WCL שהגדרנו, אזי תוקפץ הודעה עם המחרוזת.
כעת עלינו לקשר בין הכפתור שנמצא ב-WCL לבין שליחת המחרוזת:
(הקוד הבא נמצא ב-UserControl)
private void button1_Click(object senderEventArgs e)
{
            onSendString(textBox1.Text);
           // strsent(textBox1.Text);
}


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


ניתן להוריד את ההסבר כולו להדפסה בתמונה:




אין תגובות:

הוסף רשומת תגובה