תחומים
    • הרשמה
    • התחברות
    • חיפוש
    • קטגוריות
    • פוסטים אחרונים
    • משתמשים
    • חיפוש
    חוקי הפורום

    עזרה c# | סייר ב ListView

    תכנות
    2
    2
    149
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • נ
      נ נח נערך לאחרונה על ידי

      כאן יש מדריך איך לעשות סייר קבצים עם listview ו treeview (הצלחתי😊)
      אני רוצה שיהיה רק listview, וכשלוחצים ב listview על תיקיה/קובץ - זה נפתח.
      אני לא יודע מה צריך לשנות בקוד שם
      תודה רבה!

      תגובה 1 תגובה אחרונה תגובה ציטוט 1
      • yossiz
        yossiz נערך לאחרונה על ידי yossiz

        @נ-נח יפה מאוד שהצלחת!
        עכשיו אתה חייב להבין מה עשית כדי שתבין איך לשנות שהוא יתאים לצרכים שלך.

        (אגב, הקוד כתוב בצורה לא טובה, (כמובן היא משתמשת רק לדוגמה), כי הוא טוען מיד בהרצה את כל עץ התקייות, וזה יכול להיות פעולה מאוד יקרה.
        אבל זה לא כל כך משנה, כי אתה בכל מקרה לא רוצה את העץ.)

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

        רשימת דברים נצרכים:

        • שנה את הטופס בצורה שהוא יכלול רק את ה-listView על כל הטופס (תשאיר את ה-imageList שזה נצרך עבור הצגת אייקונים)
        • בבנאי של הטופס נקרא לפונקציה בשם: PopulateListView במקום PopulateTreeView. התוכן של הפונקציה יאכלס את ה-listView ברשימת הקבצים ותיקיות בתיקייה הנבחרת. (יש לנו כבר קוד שעושה את זה בפונקציה TreeView1_NodeMouseClick אז נעתיק מהקוד ההוא ונתאים אותו להקשר שלנו).
        • במקום לטפל באירוע של treeView1.NodeMouseClick (שזה האירוע של לחיצת עכבר על אבר של ה-treeView ע"ה, שכבר לא קיים), נאזין לאירוע listView1.ItemActivate שזה האירוע שקורה בלחיצה כפולה על item ב-listView.
        • לפונקציה שמטפלת באירוע זה, נקרא כמיטב המסורת: ListView1_ItemActivate ותוכנו יהיה לקבל את הפרטים על ה-item שעליו לחצת, במקרה וזה תיקייה נרענן את ה-listView להציג את רשימת התוכן של התיקייה (שוב, יש לנו קוד שיודע לעשות את זה, אז נשתמש בה), במקרה וזה קובץ נפתח את הקובץ בתוכנה ברירת מחדל (כרגע, אין לנו קוד לזה, נחפש בגוגל איך עושים את זה...).

        בונוסים:

        • שנה את הכותרת של הטופס לשם או נתיב של התיקייה הנוכחית
        • תגרום שלא יהיה אפשר לבחור יותר משורה אחת, כי אין לנו דרך לטפל באירוע של פתיחת תיקייות מרובות
        • מכיון שכבר אין לנו עץ, תוסיף בראש הרשימה אייטם שמייצג את תקיית האבא כדי לתת אפשרות לנווט למעלה לאבא.

        קוד דוגמה שכתבתי עבור חלק מהמשימות:

            public partial class Form1 : Form
            {
                public Form1()
                {
                    InitializeComponent();
                    DirectoryInfo info = new DirectoryInfo(@"../..");
                    PopulateListView(info);
                    this.listView1.ItemActivate += ListView1_ItemActivate;
                }
        
                private void ListView1_ItemActivate(object sender, EventArgs e)
                {
                    ListView lv = (ListView)sender;
                    ListViewItem item = lv.SelectedItems[0];
                    if (item.Tag is DirectoryInfo)
                    {
                        DirectoryInfo info = (DirectoryInfo)item.Tag;
                        PopulateListView(info);
                    }
                }
        
                private void PopulateListView(DirectoryInfo info)
                {
                    listView1.Items.Clear();
                    if (info.Exists)
                    {
                        foreach (DirectoryInfo dir in info.GetDirectories())
                        {
                            var item = new ListViewItem(dir.Name, 0)
                            {
                                Tag = dir
                            };
                            ListViewItem.ListViewSubItem[] subItems = new ListViewItem.ListViewSubItem[]
                            {
                                new ListViewItem.ListViewSubItem(item, "Directory"),
                                new ListViewItem.ListViewSubItem(item, dir.LastAccessTime.ToShortDateString())
                            };
                            item.SubItems.AddRange(subItems);
                            listView1.Items.Add(item);
                        }
        
                        foreach (FileInfo file in info.GetFiles())
                        {
                            var item = new ListViewItem(file.Name, 1)
                            {
                                Tag = file
                            };
                            ListViewItem.ListViewSubItem[] subItems = new ListViewItem.ListViewSubItem[]
                            {
                                new ListViewItem.ListViewSubItem(item, "File"),
                                new ListViewItem.ListViewSubItem(item, file.LastAccessTime.ToShortDateString())
                            };
                            item.SubItems.AddRange(subItems);
                            listView1.Items.Add(item);
                        }
                        listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
                    }
                }
            }
        

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה תגובה ציטוט 11
        • הועבר מ תכנות ע"י  dovid dovid 
        • 1 / 1
        • פוסט ראשון
          פוסט אחרון
        בא תתחבר לדף היומי!