בניית רכיבים מותאמים אישית שלמים יכולה להיות פרויקט מתקדם מאוד. אבל אתה יכול לבנות מחלקת VB.NET שיש בה יתרונות רבים של רכיב ארגז כלים בהרבה פחות מאמץ. הנה איך!
כדי לקבל טעם מה שאתה צריך לעשות כדי ליצור רכיב מותאם אישית מלא, נסה את הניסוי הזה:
-> פתח פרוייקט יישומי Windows חדש ב- VB.NET.
-> הוסף צ'ק בוקס מארגז הכלים לטופס.
-> לחץ על הלחצן "הצג את כל הקבצים" בראש פתרונות סייר.
זה יציג את הקבצים ש- Visual Studio יוצר עבור הפרוייקט שלך (כך שאתה לא צריך). כהערת שוליים היסטורית, המהדר של VB6 עשה הרבה מאותם דברים, אך מעולם לא היית יכול לגשת לקוד מכיוון שהוא נקבר ב "p-code". אתה יכול לפתח בקרות מותאמות אישית ב- VB6, אבל זה היה הרבה יותר קשה ונדרש כלי מיוחד שמיקרוסופט סיפקה בדיוק למטרה זו.
בצורה Designer.vb בקובץ, תגלה שהקוד שלהלן נוסף אוטומטית במיקומים הנכונים לתמיכה ברכיב CheckBox. (אם יש לך גרסה שונה של Visual Studio, ייתכן שהקוד שלך יהיה שונה במקצת.) זהו הקוד ש- Visual Studio כותב עבורך.
'נדרש על ידי מעצבי הטפסים של Windows רכיבים פרטיים _ כמערכת. ComponentModel. הערה של IContainer: הנוהל הבא נדרש 'על ידי מעצב הטפסים של Windows' ניתן לשנות באמצעות מעצב הטפסים של Windows. 'אל תשנה אותו באמצעות עורך הקוד._Private Sub InitializeComponent () Me. CheckBox1 = מערכת חדשה. חלונות. טפסים. צ'קבוקס () אותי. SuspendLayout () '' CheckBox1 'Me. CheckBox1.AutoSize = אמת אותי. CheckBox1.Location = מערכת חדשה. ציור. נקודה (29, 28) אותי. CheckBox1.Name = "CheckBox1".. . וכן הלאה ...
זהו הקוד שעליך להוסיף לתוכנית שלך כדי ליצור פקד מותאם אישית. זכור כי כל השיטות והמאפיינים של שליטת CheckBox בפועל הם בכיתה המסופקת על ידי .NET Framework: מערכת. חלונות. טפסים. CheckBox. זה לא חלק מהפרויקט שלך מכיוון שהוא מותקן ב- Windows לכל תוכנות ה- NET. אבל יש הרבה מזה.
נקודה נוספת שיש לשים לב אליה היא שאם אתה משתמש WPF (Windows Presentation Foundation). מחלקת NET CheckBox מגיעה מספרייה שונה לחלוטין בשם מערכת. חלונות. בקרות. מאמר זה עובד רק עבור יישום Windows Forms, אך מנהלי הירושה כאן עובדים עבור כל פרויקט VB.NET.
נניח שהפרויקט שלך זקוק לבקרה הדומה לאחד מהבקרות הסטנדרטיות. לדוגמה, תיבת סימון ששינתה צבע, או הציגה "פרצוף שמח" זעיר במקום להציג את הגרפיקה ה"צ'ק "הקטנה. אנו הולכים לבנות כיתה שעושה זאת ולהראות לך כיצד להוסיף אותה לפרויקט שלך. אמנם זה עשוי להועיל בפני עצמו, אך המטרה האמיתית היא להפגין את VB.NET ירושה.
בואו נתחיל בקידוד
כדי להתחיל, שנה את שם ה- CheckBox שרק הוספת אליו ישן. (יתכן שתרצה להפסיק להציג את "הצג את כל הקבצים" שוב כדי לפשט את סייר הפתרונות.) הוסף כעת כיתה חדשה לפרויקט שלך. ישנן כמה דרכים לעשות זאת, כולל לחיצה ימנית על הפרויקט בסייר פתרונות ובחירת "הוסף" ואז "כיתה" או בחירה "הוסף כיתה" תחת הפריט בתפריט פרויקט. שנה את שם הקובץ של המחלקה החדשה ל חדש לשמור על דברים ישרים. לבסוף, פתחו את חלון הקוד לכיתה והוסיפו קוד זה:
ירושה מהמחלקה החדשהCheckBox יורשת את CheckBox Private CenterSquareColor כצבע = צבע. עקיפות מוגנות באדום Sub OnPaint (ByVal pEvent _ As PaintEventArgs) Dim CenterSquare _ כמלבן חדש (3, 4, 10, 12). OnPaint (pEvent) אם אני. מסומן ואז pEvent. גרפיקה. מלבני מילוי (SolidBrush חדש (CenterSquareColor), CenterSquare) סוף אם סיום מחלקה משנה משנה
(במאמר זה ובאחרים באתר משתמשים בהמשך המשך קו כדי לשמור על שורות קצרות כך שיתאימו לשטח הזמין בדף האינטרנט.)
הדבר הראשון שיש לשים לב לגבי קוד הכיתה החדש שלך הוא ירושות מילת מפתח. המשמעות היא שכל המאפיינים והשיטות של VB.NET Framework CheckBox הם אוטומטית חלק מזה. כדי להעריך כמה עבודה זו חוסכת, עליך לנסות לתכנת משהו כמו רכיב CheckBox מאפס.
ישנם שני דברים עיקריים שצריך לשים לב אליהם בקוד שלמעלה:
הראשון הוא השימוש בקוד עקף כדי להחליף את התנהגות .NET הרגילה שתתרחש עבור OnPaint אירוע. אירוע OnPaint מופעל בכל פעם שמבחין ב- Windows שחלק מהתצוגה שלך צריך לשחזר. דוגמה לכך יכולה להיות כאשר חלון אחר חושף חלק מהתצוגה שלך. Windows מעדכן את התצוגה באופן אוטומטי, אך מתקשר לאירוע OnPaint בקוד שלך. (אירוע OnPaint נקרא גם כאשר הטופס נוצר בתחילה.) אז אם נעקוף את OnPaint, נוכל לשנות את מראה הדברים על המסך.
השנייה היא הדרך בה Visual Basic יוצר את CheckBox. בכל פעם שההורה "מסומן" (כלומר, אני. נבדק הוא נכון) אז הקוד החדש שאנו מספקים בשיעור NewCheckBox שלנו יצבע מחדש את מרכז ה- CheckBox במקום לצייר סימן ביקורת.
השאר זה מה שנקרא קוד GDI +. קוד זה בוחר מלבן בגודל זהה בדיוק למרכז תיבת הסימון ומצביע אותו באמצעות שיחות שיטת GDI +. "מספרי הקסם" להצבת המלבן האדום, "מלבן (3, 4, 10, 12)", נקבעו באופן ניסיוני. פשוט שיניתי את זה עד שזה נראה נכון.
יש צעד אחד חשוב מאוד שברצונך לוודא שאתה לא יוצא מהנהלים של עקיפה:
MyBase. OnPaint (pEvent)
עקיפה פירושה שהקוד שלך יספק את כל של הקוד לאירוע. אך לעיתים רחוקות זה מה שאתה רוצה. אז VB מספק דרך להריץ את קוד ה- NET הרגיל שהיה מבוצע לאירוע. זו האמירה שעושה זאת. זה מעביר את אותו פרמטר ממש - pEvent - לקוד האירוע שהיה מבוצע אם לא היה מבוטל, MyBase. OnPaint.
באמצעות הפקד החדש
מכיוון שהבקרה החדשה שלנו אינה נמצאת בארגז הכלים שלנו, יש ליצור אותה בצורה עם קוד. המקום הטוב ביותר לעשות זאת הוא בצורה עומס הליך אירוע.
פתח את חלון הקוד להליך אירוע הטעינה והוסף את הקוד הזה:
Sub פרטי frmCustCtrlEx_Load (שולח ByVal כמערכת. אובייקט, מערכת ByVal e As. EventArgs) מטפל ב- MyBase. טען עומק customCheckBox כחדש newCheckBox () באמצעות customCheckBox .Text = "CheckBox מותאם אישית" .Left = oldCheckBox. שמאל. למעלה = oldCheckBox. למעלה + oldCheckBox. גובה. גודל = גודל חדש (oldCheckBox. גודל. רוחב + 50, ישן צ'ק בוקס. גודל. גובה) סוף עם בקרות. הוסף (customCheckBox) סיום משנה
כדי למקם את תיבת הסימון החדשה בטופס, ניצלנו את העובדה שכבר יש שם ופשוט השתמשנו בגודל ובמיקום של אותה אחת (מותאם כך שמאפיין הטקסט יתאים). אחרת נצטרך לקודד את המיקום באופן ידני. כאשר MyCheckBox נוסף לטופס, אנו מוסיפים אותו לאוסף ה- Controls.
אבל הקוד הזה לא מאוד גמיש. לדוגמה, הצבע אדום מקודד קשה ושינוי הצבע דורש שינוי של התוכנית. אולי תרצה גם גרפיקה במקום סימן ביקורת.
להלן כיתת CheckBox חדשה ומשופרת. קוד זה מראה לך כיצד לבצע כמה מהצעדים הבאים לעבר תכנות מונחה עצמים VB.NET.
מחלקה ציבורית טובה יותר עובר בירושה של CheckBox מרכז פרטי QuareColor כצבע = צבע. Blue Private CenterSquare תמונה כמו מרכז פרטי Bitmap ריבוע כמו מלבן חדש (3, 4, 10, 12) עקיפות מוגנות Sub OnPaint _ (ByVal pEvent As _ System. חלונות. טפסים. PaintEventArgs). OnPaint (pEvent) אם אני. נבדק אז אם CenterSquareImage Is Nothing ואז pEvent. גרפיקה. מילוי מילוי (SolidBrush חדש (CenterSquareColor), CenterSquare) מלבד זאת. גרפיקה. DrawImage (CenterSquareImage, CenterSquare) סוף אם סוף אם סוף תת נכס ציבורי FillColor () כצבע קבל FillColor = CenterSquareColor סוף הגדר (ערך שווי ערך כצבע) CenterSquareColor = הגדרת קצה ערך רכוש קצה נכס ציבורי מילוי תמונה () כביצוע מפת סיביות קבל מילוי תמונה = CenterSquareImage קבע הגדר (ערך נקודת ערך לפי סיביות) CenterSquareImage = ערך קצה סוף קצה נכס סוף מעמד
מדוע גרסת BetterCheckBox טובה יותר
אחד השיפורים העיקריים הוא תוספת של שניים נכסים. זה משהו שהכיתה הישנה לא עשתה בכלל.
שני המאפיינים החדשים שהוצגו הם
צבע מילוי
ו
מילוי תמונה
כדי לקבל טעם של איך זה עובד ב- VB.NET, נסה את הניסוי הפשוט הזה. הוסף כיתה לפרויקט רגיל ואז הזן את הקוד:
רכוש ציבורי אשר יהיה
כשאתה לוחץ על Enter לאחר הקלדת "קבל", VB.NET Intellisense ממלא את כל גוש קוד הנכס וכל שעליך לעשות הוא לקוד את הפרטים האישיים לפרויקט שלך. (לא תמיד נדרשים חסימה של Get and Set החל מ- VB.NET 2010, כך שאתה צריך לפחות לומר ל- Intellisense הרבה כדי להתחיל בזה.)
רכוש ציבורי לא משנה מה קצה הגדר (ערך ערך) סוף נכס קבע
חסימות אלה הושלמו בקוד לעיל. מטרת גושי הקוד הללו היא לאפשר גישה לערכי המאפיינים מחלקים אחרים של המערכת.
עם תוספת של שיטות, היית בדרך ליצירת רכיב שלם. כדי לראות דוגמא פשוטה מאוד לשיטה, הוסף קוד זה מתחת להצהרות הנכס בכיתה betterCheckBox:
תת הציבור הדגיש () אותי. גופן = מערכת חדשה. ציור. גופן (_ "Microsoft Sans Serif", 12.0!, _ מערכת. ציור. סיגנון גופן. מודגש) אני. גודל = מערכת חדשה. ציור. גודל (200, 35) CenterSquare. אופסט (CenterSquare. שמאל - 3, CenterSquare. למעלה + 3) תת-סיום
בנוסף להתאמת הגופן המוצג ב- CheckBox, שיטה זו גם מתאימה את גודל התיבה ואת מיקום המלבן שנבדק כך שיהיה בגודל החדש. כדי להשתמש בשיטה החדשה, פשוט קוד אותה באותה צורה שבה אתה עושה כל שיטה:
MyBetterEmphasizedBox. להדגיש()
ובדומה למאפיינים, Visual Studio מוסיף אוטומטית את השיטה החדשה ל- Intellisense של מיקרוסופט!
המטרה העיקרית כאן היא פשוט להדגים כיצד קידוד שיטה. יכול להיות שאתה מודע לכך ששלט CheckBox רגיל מאפשר גם לשנות את הגופן, כך ששיטה זו לא באמת מוסיפה פונקציה רבה.
המאמר הבא בסדרה זו, תכנות בקרת VB.NET מותאמת אישית - מעבר לבסיס!, מציג שיטה שעושה זאת, וגם מסביר כיצד לבטל שיטה בבקרה מותאמת אישית.