본문 바로가기
Develop/C#

[C#] Drag and Drop 해서 폴더 안의 파일 리스트 보여주기

by 투게더리 2022. 2. 11.
반응형

1. Drag and Drop을 이용하여 무엇을 만들것인가 

listBox1에 폴더를 drag and drop 하면 폴더안의 파일 리스트를 listbox에 보여주고

label에는 drag and drop한 파일의 경로를 보여줌

c# drag and drop 프로그램


2. Drag and Drop 하기 위한 listbox 속성

[도구상자]를 이용해 label과 listbox를 만들고

listbox의 속성값중 AllowDrop을 true로 변경한다

 

listbox allowdrop


3. Drag and drop 전체 코드

listBox1_DragEnter : 파일을 drag해서 listbox안으로 들어갈때 호출되는 함수이며 마우스 effect를 바꿔 드래그 가능함을 보여주는 용도

listBox1_DragDrop : 파일을 drop 했을때 listbox에 파일 리스트를 보여주는용도

listBox1_SelectedIndexChanged : listbox에 추가된 item을 클릭했을때 그 값을 그냥 출력하는 용도

 

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.listBox1.SelectedIndexChanged += new EventHandler(this.listBox1_SelectedIndexChanged);
            this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
            this.listBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
        }

        private void listBox1_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                listBox1.Items.Clear();

                string[] files = e.Data.GetData(DataFormats.FileDrop, true) as string[];
                if(files.Length < 1)
                {
                    Console.WriteLine("there is no file");
                    return;
                }

                string file = files[0];
                lblFolderName.Text = file;

                string[] innerfiles = Directory.GetFiles(file);
                foreach(string f in innerfiles)
                {
                    string fullpath = f;
                    string filepath = Path.GetDirectoryName(fullpath).ToLower();
                    string filename = Path.GetFileNameWithoutExtension(fullpath);
                    string fileExtension = Path.GetExtension(fullpath);

                    listBox1.Items.Add(filename);
                }
            }
        }

        private void listBox1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Console.WriteLine(listBox1.SelectedItem.ToString());
        }
    }

*참고사항

하나의 파일이 아니라 여러개의 파일을 drag and drop 할 수 있어서

listBox1_DragDrop 에서 drop 이벤트를 받을때 

string[] files = e.Data.GetData(DataFormats.FileDrop, true) as string[]; 와 같이 list를 받게 된다.

 

하지만 나는 첫번째 file만 읽어 해당 파일(폴더)안에 있는 파일들을 추가하도록 하였다.

여러 파일에 대해 처리를 하려면 위 부분을 수정 하면 된다.

 


*github

https://github.com/battlemango/ImageCutter

 

GitHub - battlemango/ImageCutter: easy image crop

easy image crop. Contribute to battlemango/ImageCutter development by creating an account on GitHub.

github.com

 

 

다른 Post 보기

 

반응형

'Develop > C#' 카테고리의 다른 글

C# using 문법  (0) 2022.12.28
c# image crop 방법  (0) 2022.02.16
c# image crop 프로그램 example 공유 - ImageCutter  (0) 2022.02.16
c# 타이머, timer - stopwatch 만들기  (0) 2021.02.15

댓글