SQL Server administration and T-SQL development, Web Programming with ASP.NET, HTML5 and Javascript, Windows Phone 8 app development, SAP Smartforms and ABAP Programming, Windows 7, Visual Studio and MS Office software
ASP.NET, VB.NET, Microsoft .NET Framework, Microsoft Visual Studio, Windows Forms, Controls and more Tutorials and Articles for Programmers

ListView ve FolderBrowserDialog Kontrolleri ile bir dizindeki dosyaları listelemek


Bu yazıda bir dizinde yeralan dosyaları ListView kontrolü içinde listelemek ve bu liste üzerinde seçilen bir dosyanın çift tıklayarak çalıştırılması örneğinden bahsedeceğim. Amaç kullanıcının dilediği bir dizini browse ederek seçebilmesi ve seçimin tamamlanmasının ardından bir ListView Windows Forms kontrolü içerisinde seçilmiş dizin içindeki dosyaların listelenmesidir. Dilerse kullanıcı ListView içinde listelenmiş dosyalardan birisini seçerek üzerinde çift tıklamak yoluyla o dosyayı açabilme şansına sahiptir.

ListView kontrolü için böyle bir fonksiyona sahip olacak şekilde geliştireceğimiz proje aslında aşağıdaki resimde görüldüğü gibi basit bir yapıya sahip. Proje aslında bir FileList ismindeki formdan oluşmakta.

FolderBrowserDialog

FileList formu üzerinde kullanıcıların sistemdeki dizinleri browse edebilmelerini sağlayan FolderBrowserDialog kontrolümüz var. FolderBrowserDialog kontrolünü soldaki menüden seçerek sürükle bırak yöntemi ile forma ekleyebiliriz. Tüm işlemlerimizin başında yeralan dizinleri browse etmemizi sağlayacak olan ateşlemeyi "Listele" butonumuz gerçekleştirecektir.

btnListele kontrolünün Click event'inde aşağıdaki kod çalışmaktadır.

Private Sub btnListele_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListele.Click
        FolderBrowserDialog1.ShowDialog()
        If FolderBrowserDialog1.SelectedPath.Length > 0 Then
                Listele(FolderBrowserDialog1.SelectedPath)
        End If
End Sub
Code




FolderBrowserDialog kontrolünün ShowDialog() metodu ile kullanıcının dizinleri browse ederek birisini seçebilmesini sağlayan "Browse For Folder" diyalog penceresi açılmaktadır. Kullanıcının bu diyalog penceresinde seçerek onaylayacağı dizin FolderBrowserDialog  kontrolünün SelectedPath özelliğine atanmaktadır. Kullanıcının seçtiği dizin bir parametre olarak Listele yordamına gönderilmektedir. Burada gerçekleştirilecek kontrollerden birisi de kullanıcının diyalog penceresini açarak sonra bir dizin seçmeden işlemden vazgeçmesi olacaktır. Bu durumda FolderBrowserDialog1.SelectedPath değeri boş bir string yani "" değerine eşit olacaktır.

Listele yordamında ListView kontrolümüz hazırlanmakta ve parametre olarak yordama aktarılmış seçilmiş dizin içindeki dosyalar okunarak ListView kontrolüne eklenmektedir.

Private Sub Listele(ByVal Path As String)
        ListView1.Items.Clear()
        ListView1.View = View.Details
        ListView1.CheckBoxes = True
        ListView1.Activation = ItemActivation.TwoClick
        ListView1.Columns.Add("Dosya", 100, HorizontalAlignment.Left)
 
        Dim d() As String
        d = System.IO.Directory.GetFiles(Path)
        Dim i As Int32 = 0
        While i < d.Length
                    ListView1.Items.Add(d(i).Substring(d(i).LastIndexOf("\") + 1))
                    i = i + 1
        End While
        txtDirectory.Text = d(0).Substring(0, d(0).LastIndexOf("\") + 1)
End Sub
Code

Önce ListView1.Items.Clear() metodu ile ListView içinde halihazırda bulunan dosya isimleri silinmekte ardından da ListView1.Columns.Add("Dosya", 100, HorizontalAlignment.Left) komut satırı ile ListView kontrolümüze "Dosya" başlığı ile bir kolon eklemekteyiz.

Ve System.IO.Directory.GetFiles(Path) komut satırı ile elde ettiğimiz string tipindeki diziyi bir dizi değişkene atayarak bu dizi içindeki değerleri okuyarak ListView kontrolümüzün Items koleksiyonuna dosya isimlerini eklemekteyiz.

System.IO.Directory.GetFiles(path) metodu ile elde ettiğimiz string dizisi içindeki ilerlemeyi While döngüsü kurarak gerçekleştiriyoruz.

d(i).Substring(d(i).LastIndexOf("\") + 1) ile "C:\Eralper\KodYaz\article028\image001.jpg" örneğindeki gibi elde edeceğimiz dizi içindeki dosyaların yerleri ile ilgili değerleri "image001.jpg" şeklindeki gibi sadece dosya isimlerine dönüştürmekteyiz.

Ardından tek yapılması gereken çift tıklama ile dosyanın açılmasını sağlayacak olan aşağıdaki olay kodlarının yazılmasına.

Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick
        txtFile.Text = ListView1.Items(ListView1.SelectedIndices.Item(0)).Text
        System.Diagnostics.Process.Start(txtDirectory.Text & ListView1.Items(ListView1.SelectedIndices.Item(0)).Text)
End Sub
Code

Bu olayı ListView1_DoubleClick olay yordamında System.Diagnostics.Process.Start() fonksiyonunu kullanarak gerçekleştirebiliriz. Process.Start ile Process sınıfının ilgili dosya için tanımlı olan default programın çalışmasını sağlanmış oluyoruz.

Bu örnek ile ilgili vb.net Windows Application projesini KodyazListViewProcess.zip isimli zip dosyası içinde bulabilirsiniz.

Visual Studio


Copyright © 2004 - 2021 Eralper YILMAZ. All rights reserved.