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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. עזרה c# | סייר ב ListView

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

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

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

    תגובה 1 תגובה אחרונה
    1
    • yossizY מנותק
      yossizY מנותק
      yossiz
      כתב ב נערך לאחרונה על ידי yossiz
      #2

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

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

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

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

      • שנה את הטופס בצורה שהוא יכלול רק את ה-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
      • dovidD dovid העביר נושא זה מ-תכנות ב-

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

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