Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

C# listView1 как загрузить данные?

Всем привет. Возникла проблема которую уже какой день не могу решить.
Есть программа, которая загружает изображения в listView.
Код:

123456789101112131415161718192021222324252627282930313233343536373839404142434445
 Form1 
 
 public void LoadImage()  // Метод  
 
 {  
 
     listView1.Items.Clear(); 
 
     ImageList imageList = new ImageList();  
 
     imageList.ImageSize = new Size(100, 100);  
 
     listView1.LargeImageList = imageList;  
 
     listView1.View = View.LargeIcon;  
 
     string folderPath = @"d:\test\";   
 
     foreach (string imagePath in Directory.GetFiles(folderPath))  
 
     {  
 
         using (FileStream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))  
 
         {  
 
            Image image = Image.FromStream(stream);  
 
             imageList.Images.Add(image);  
 
         }  
 
     }  
 
     for (int index = 0; index < imageList.Images.Count; index++)   
 
     {  
 
         ListViewItem item = new ListViewItem { ImageIndex = index };  
 
         listView1.Items.Add(item);   
 
     }  
 
 } 

Ну и при вызове этого метода в форме (Form1) все прекрасно работает. Изображения погружаются в ListView.

НО!

Когда я пытаюсь получить доступ из другой формы к этому методу, например:

12
   Form1 form = new Form1(); 
  form.LoadImage();    

То изображения не выводятся в ListView хотя все циклы в методе отрабатывают.
Ну вот тут и вопрос, почему не происходит вывод изображения в ListView?

По дате
По рейтингу
Аватар пользователя
Мудрец
11мес

Привет! Похоже, проблема связана с тем, что вы создаете новый экземпляр `Form1`, когда вызываете метод `LoadImage()` из другой формы. Этот новый экземпляр не связан с уже существующим экземпляром `Form1`, который отображается на экране. Поэтому изменения, внесенные в новый экземпляр, не видны в уже отображаемой форме.

Чтобы решить эту проблему, вам нужно получить доступ к уже существующему экземпляру `Form1`. Один из способов сделать это - передать ссылку на текущий экземпляр `Form1` в другую форму. Вот пример, как это можно сделать:

1. В `Form1` добавьте метод для получения текущего экземпляра:

```csharp
public static Form1 Instance { get; private set; }

public Form1()
{
InitializeComponent();
Instance = this;
}
```

2. В другой форме используйте этот экземпляр для вызова метода `LoadImage()`:

```csharp
Form1.Instance.LoadImage();
```

Таким образом, вы будете вызывать метод `LoadImage()` на уже существующем экземпляре `Form1`, и изображения будут корректно отображаться в `ListView`.

Попробуйте этот подход и дайте знать, если возникнут дополнительные вопросы! 😊