[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 אני רוצה שבעת הגרירה יראו את הכפתור זז ולא את האיקון של ברירת המחדל
איך עושים זאת?