[3 במרץ 2008] [4 תגובות]
סביבת העבודה של .NET ושפת התיכנות #C בפרט, מאפשרת לנו להעשיר את ממשק המשתמש(GUI) של התוכנית שלנו באופציית הגרירה ושיחרור - Drag & Drop.
נדגים זאת על ידי הוספת יכולת ה-Drag & Drop לתיבת רשימה(Listbox). אל הרשימה נוכל לגרור קבצים ושמותיהם יופיע ברשימה.
ראשית נפתח פרוייקט חדש ב-#C ונוסיף לו Listbox בשם listBox1. נערוך את התכונה AllowDrop לערך True על מנת לאפשר את היכולת:
כעת נוסיף שני אירועים(Events) לתיבת הרשימה: DragEnter - כאשר נכנסים עם העכבר אל תחום התיבה, ו-DragDrop כאשר שוחררו קבצים לתוכה. נעשה זאת על ידי מעבר לתיבת האירועים בעזרת סימן הברק, ולאחר מכן נבצע הקלקה כפולה(Double Click) על האירועים הרצויים.
כאשר נוצר אירוע, סביבת ה-.NET תיצור פונקציה (באופן אוטומטי) שתטפל באירוע כאשר הוא מתרחש. כאשר מתרחש אירוע ה-DragEnter עם כניסת סמן העכבר לתיבת הרשימה, נרצה לסמן למשתמש כי הוא יכול לשחרר קבצים לתוך התיבה. נעשה זאת בעזרת הקוד הבא:
private void listBox1_DragEnter(object sender, DragEventArgs e) { // Allow dropping of files only (not text or images or whatever) if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) { // without this, the cursor stays a "NO DROP" symbol e.Effect = DragDropEffects.All; } }
כך זה יראה כאשר ניכנס עם סמן העכבר אל הרשימה:
כעת נרצה לטפל בשחרור הקבצים לתיבה, נעשה זאת באירוע DragDrop עם הקוד הבא:
private void listBox1_DragDrop(object sender, DragEventArgs e) { // transfer the filenames to a string array string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); // loop through the string array, adding each filename to the ListBox foreach (string file in files) { listBox1.Items.Add(file); } }
לאחר הגרירה והשחרור, נראה את רשימת הקבצים:
יכולת ה-Drag & Drop מוסיפה רבות לחווית המשתמש, וכעת תוכלו להעשיר את התוכניות באופצייה זאת.
ברצוני לציין שהאתר www.Codes.co.il חוזר לרשת בימים אלו!
זהו אינו פרסום מתחרה, אלא הפנייה, על-מנת לראות גם את מיטב מוחות המתכנתים בארץ בפורום.
אני מאמין שמי שהקים אתר זה, הוא אדם מוכשר, ואשמח לראות אותו גם מבקר בפורום שלי.
תודה מראש,
orl2008. =]
תודה
נהניתי ועזרתם לי רבות
שאלה בנושא של Drag & Drop.
כאשר אני יוצרת גרירה לפקד מסוים כמו BUTTON אני רוצה שבעת הגרירה יראו את הכפתור זז ולא את האיקון של ברירת המחדל
איך עושים זאת?