Задать вопрос
smidl
@smidl
WordPress-разработчик

Где объявлять ListView, чтобы можно было менять его в любом месте программы?

Есть программа - по клику на кнопку открывает окно выбора папки. После удачного выбора берет файлы из этой папки и их имена пихает в ListView.

Но дело в том, что в моем коде в итоге программа работает только один раз... Что не так? Если перенести инициализацию Listview в другое место - тогда нельзя обращаться к нему для добавления итемов, поскольку переменная листвью находится вне зоны видимости...

Я понимаю, что это ерундовая проблема, но решения не могу найти.

KAgMRv8s4G1Z3m.jpg
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        public void MyButtons()
        {
            Button b1 = new Button();
            b1.Location = new System.Drawing.Point(this.ClientRectangle.Width / 2 - 100 / 2, this.ClientRectangle.Height / 2 - 70/ 2);
            b1.Size = new Size(100, 70);
            b1.TabIndex = 0;
            b1.Text = "Выбрать папку";
            b1.UseVisualStyleBackColor = true;

            //Вешаем обработчик на кнопку
            b1.Click += new EventHandler(b1_click);
            Controls.Add(b1);
        }

        public void b1_click(object sender, EventArgs e)
        {

            FolderBrowserDialog FBD = new FolderBrowserDialog();
            if (FBD.ShowDialog() == DialogResult.OK)
            {
                // Инициализация и настроки ListView
                ListView ListView1 = new ListView();
                ListView1.Location = new System.Drawing.Point(12, 12);
                ListView1.Name = "ListView1";
                ListView1.Size = new System.Drawing.Size(245, 200);
                ListView1.BackColor = System.Drawing.Color.DarkOrange;
                ListView1.ForeColor = System.Drawing.Color.Black;
                Controls.Add(ListView1);

                // Добавляем файлы из выбранной директории в ListView
                System.IO.DirectoryInfo DI = new System.IO.DirectoryInfo(FBD.SelectedPath);
                foreach (System.IO.FileInfo FI in DI.GetFiles())
                {
                    ListView1.Items.Add(FI.Name);
                }
            }
           
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            MyButtons();
        }

    }
}
  • Вопрос задан
  • 247 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
@PaksinME
Извиняюсь что без тегов, пишу с телефона, но примерно так. Должно работать
///
public partial class Form1 : Form
{
ListView ListView1
public Form1()
{
InitializeComponent();
}
/////

private void Form1_Load(object sender, EventArgs e)
{
ListView1 = new ListView();
ListView1.Location = new System.Drawing.Point(12, 12);
ListView1.Name = "ListView1";
ListView1.Size = new System.Drawing.Size(245, 200);
ListView1.BackColor = System.Drawing.Color.DarkOrange;
ListView1.ForeColor = System.Drawing.Color.Black;
Controls.Add(ListView1);
///
Из public void b1_click Инициализация и настроки ListView убирай
Ответ написан
Комментировать
Protos
@Protos
Спрашивай - отвечу
Ну так объяви ListView ListView1 = new ListView() между двумя функциями, а не внутри функции, если надо менять и из другой формы то сделай public ListView ListView1 = new ListView(). Перед каждым новым заполнением можно его очищать listview1.items.clear()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы