Drag & Drop ב-#C

[3 במרץ 2008] [4 תגובות]

סביבת העבודה של .NET ושפת התיכנות #C בפרט, מאפשרת לנו להעשיר את ממשק המשתמש(GUI) של התוכנית שלנו באופציית הגרירה ושיחרור - Drag & Drop.

נדגים זאת על ידי הוספת יכולת ה-Drag & Drop לתיבת רשימה(Listbox). אל הרשימה נוכל לגרור קבצים ושמותיהם יופיע ברשימה.

ראשית נפתח פרוייקט חדש ב-#C ונוסיף לו Listbox בשם listBox1. נערוך את התכונה AllowDrop לערך True על מנת לאפשר את היכולת:

יצירת Listbox

כעת נוסיף שני אירועים(Events) לתיבת הרשימה: DragEnter - כאשר נכנסים עם העכבר אל תחום התיבה, ו-DragDrop כאשר שוחררו קבצים לתוכה. נעשה זאת על ידי מעבר לתיבת האירועים בעזרת סימן הברק, ולאחר מכן נבצע הקלקה כפולה(Double Click) על האירועים הרצויים.

 הגדרת Events

כאשר נוצר אירוע, סביבת ה-.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

יכולת ה-Drag & Drop מוסיפה רבות לחווית המשתמש, וכעת תוכלו להעשיר את התוכניות באופצייה זאת.

אם אהבת את הפוסט, אני שולח מדי פעם למייל עוד פוסטים מעניינים שלא תמיד מגיעים להתפרסם באתר. אתה מוזמן להצטרף לרשימה:
(אני שונא ספאם. אני מבטיח לעולם לא לשלוח משהו לא מעניין)

4 תגובות

  1. אור לוי | 1/1/2010 10:29:15 AM

    ברצוני לציין שהאתר www.Codes.co.il חוזר לרשת בימים אלו!

    זהו אינו פרסום מתחרה, אלא הפנייה, על-מנת לראות גם את מיטב מוחות המתכנתים בארץ בפורום.

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

    תודה מראש,

    orl2008. =]

  2. מתחיל | 2/16/2010 11:18:32 AM
    תודה
  3. מטילדה סמסונוביץ | 10/7/2010 2:19:54 AM
    נהניתי ועזרתם לי רבות
  4. יעל | 2/23/2011 7:42:32 AM

     שאלה בנושא של Drag & Drop.

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

    איך עושים זאת?

התגובות נעולות