티스토리 뷰

C#/WPF

WPF tutorial- The OpenFileDialog

광그로 2017. 6. 29. 15:55

윈도우 응용프로그램에서 파일 열기 혹은 저장을 할 때마다, 여러분은 거의 같은 dialog가 나타납니다.

WPF에서 여러분은 Microsoft.Win32 namepsace에서 표준 DIALOG를 찾을 수 있습니다.


Simple OpenFileDialog example


1
2
3
4
5
6
7
<DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center"  DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnOpenFile" Click="btnOpenFile_Click">Open file</Button>
        </WrapPanel>
        <TextBox Name="txtEditor" />
 
    </DockPanel>
cs

1
2
3
4
5
6
7
8
9
10
11
using System.IO;
using Microsoft.Win32;
 
private void btnOpenFile_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            if(openFileDialog.ShowDialog() == true)
            {
                txtEditor.Text = File.ReadAllText(openFileDialog.FileName);
            }
        }
cs

ShowDialog()는 nullable boolean 값을 return합니다.

파일을 선택하고 open하면, true를 return합니다.

OpenFileDilog의 FileName 속성을 이용, 선택한 파일의 전체 경로를 가져옵니다.



Filter

파일의 유형을 제한하고자 할 때 사용합니다. 이미지 파일만 올리기 원한다면 jpeg, bmp 등 이미지 확장자만으로 제한합니다.

위 예제 코드  OpenFileDialog openFileDialog = new OpenFileDialog(); 하단에 추가합니다.

1
2
openFileDialog.Filter = "JPEG files (*.jpeg)|*.jpeg|PNG files (*.png)|*.png|All files (*.*)|*.*";
 
cs


1
openFileDialog.Filter = "Image files (*.png 혹은 *.jpeg)|*.png;*.jpeg|All files (*.*)|*.*";
cs

확장자 사이에 ' ; ' 를 추가하여 여러 가지의 확장자 명을 가질 수 있습니다.


Setting the initial directory


Windows에서 OpenFileDialog의 초기 디렉토리를 결정하지만, InitialDirectory 속성을 사용하여 재정의할 수 있습니다.

1
openFileDialog.InitialDirectory = "C:\\Users";
cs


내 컴퓨터, 내 문서 등과 같은 windows의 특수한 폴더를 이용한다면, windows의 버전 혹은 사용자에 따라 다르기 때문에 특별한 주의가 필요합니다.

Environment class를 사용하여 해결 가능합니다.

1
2
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
 
cs

참고 사이트 : https://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx


Multiple files


여러 개의 파일을 선택하려면 Multiselect 속성을 활성화해야합니다.

1
2
3
4
5
6
<DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnOpenFile" Click="btnOpenFiles_Click">Open files</Button>
        </WrapPanel>
        <ListBox Name="lbFiles" />
    </DockPanel>
cs

1
2
3
4
5
6
7
8
9
10
11
12
 private void btnOpenFiles_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Multiselect = true;
            openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            if (openFileDialog.ShowDialog() == true)
            {
                foreach (string filename in openFileDialog.FileNames)
                    lbFiles.Items.Add(System.IO.Path.GetFileName(filename));
            }
        }
cs


ListBox에 FileNames 속성을 이용, 반복여 추가합니다.



참고로, 파일 작업, IO 작업을 수행할 때는 존재하지 않는 경로 등 관련 문제에 대한 예외를 주의 ㅎ

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

WPF tutorial - The other dialogs  (0) 2017.06.29
WPF tutorial - The SaveFileDialog  (0) 2017.06.29
WPF tutorial - The MessageBox  (0) 2017.06.29
WPF tutorial - Implementing a custom WPF Command  (0) 2017.06.29
WPF tutorial - Using WPF commands  (0) 2017.06.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함