Skip to main content

AccessTr.neT


ListView1 Listeleme Hakkında

ListView1 Listeleme Hakkında

Çözüldü #1
Kod:
Private Sub DRm_Button2_Click(sender As System.Object, e As System.EventArgs) Handles DRm_Button2.Click

       Dim FilesInDir As String() = Directory.GetFiles(Application.StartupPath & "\REPERTUARX\", "*.txt", SearchOption.AllDirectories)
       Dim SFile As String
       ListView1.Items.Clear()
       For Each SFile In FilesInDir
           ListView1.Items.Add(New ListViewItem(New String() {SFile.Replace(Application.StartupPath & "\REPERTUARX\", ""), CStr(FileLen(SFile))}))

       Next

   End Sub

Application.StartupPath & "\REPERTUARX\" Klasörümün içinde birçok klasör var ve yukarıdaki gibi arama yapıp sonuçları listview de gösteriyorum

Sonuç şöyle oluyoru

TÜRKÜLER\Ah Le Yar.txt
TÜRKÜLER\XXXX.txt
TÜRKÜLER\Deneme.txt
TÜRKÜLER\Yar.txt
POP\Yyyyyy.txt
DİĞER\Cccccc.txt

Ben yukardaki kodu nasıl revize etmeliyim ki

Listvievde 1 kolon klasör ismi 2. kolon şarkı ismi olsun.

Örnek

Klasör Adı    Şarkı Adı

POP             Yyyy.txt
.rar WindowsApplication1.rar (Dosya Boyutu: 77,75 KB | İndirme Sayısı: 13)
drummers, 11-05-2009 tarihinden beri AccessTr.neT üyesidir.
Son Düzenleme: 20/05/2015, 15:25, Düzenleyen: drummers.
Cevapla
#2
Sadece bir formdan ibaret olan örnek projeyi eklerseniz yardımcı olmak isterim.
AccessTr.Net teknik konular içeren bir sitedir. Bu tip sitelerde en iyi şekilde yardım alabilmeniz için Site Kurallarını mutlaka okumanız ve buna göre hareket etmeniz lazım.
Cevapla
#3
(20/05/2015, 14:48)alpeki99 yazdı: Sadece bir formdan ibaret olan örnek projeyi eklerseniz yardımcı olmak isterim.

Dosya eklenmiştir. İlaveten Listeleme işlemi bittikten sonra listedeki herhangi bir item tıklanırsa o itemin içeriğini richtextbox da okutmak istiyorum. Teşekkürler
drummers, 11-05-2009 tarihinden beri AccessTr.neT üyesidir.
Son Düzenleme: 20/05/2015, 15:26, Düzenleyen: drummers.
Cevapla
#4
Normalde bir konuda birden fazla soru olduğu zaman cevap vermem ancak sizi az çok bilip suistimal etmeyeceğinizi düşünerek cevaplıyorum.

Öncelikle bir prosedür oluşturuyorum:
Sub KlasorleriListele()

       Dim satir As Integer
       Dim sarkiBaslangic, klasorBaslangic, sarkiAdiUzunlugu As Integer
       Dim sarkiAdi, klasorAdi As String

       Dim FilesInDir As String() = Directory.GetFiles(Application.StartupPath & "\REPERTUARX\", "*.txt", SearchOption.AllDirectories)
       Dim SFile As String
       ListView1.Items.Clear()

       For Each SFile In FilesInDir
           sarkiBaslangic = SFile.LastIndexOf("\") + 2
           sarkiAdi = Mid(SFile, sarkiBaslangic)
           sarkiAdiUzunlugu = Len(SFile) - sarkiBaslangic + 2

           klasorBaslangic = SFile.IndexOf("X\") + 3
           klasorAdi = Mid(SFile, klasorBaslangic, (Len(SFile) - sarkiAdiUzunlugu + 1) - klasorBaslangic)

           ListView1.Items.Add(klasorAdi)
           ListView1.Items(satir).SubItems.Add(sarkiAdi)
           satir += 1
       Next
   End Sub

Listview'de sağ üst köşedeki üçgen kulakçık menüsünde Edit Columns tıklayın. Add butonuna tıklayıp yeni bir sütun ekleyin. Ben genişliklerini 100 ve 200 yaptım.

Yukarıdaki KlasorleriListele prosedürü tek başına çalışamaz. Bundan dolayı Formun Load yani Yüklendiğinde olayında ve butonun tıklanma olayında bu prosedürü çalıştırıyoruz:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

       KlasorleriListele()
   End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        KlasorleriListele()
    End Sub

Bu şekilde yapılacak olursa yukarıdaki kodlar ile listeleme işlemleri yapılabilir. Gelelim TXT dosyaların içeriğinin RichTextBox ta gösterilmesine.

Öncelikle yeni bir prosedür ekliyoruz:

Sub DosyaIceriginiOku(ByVal dosyaAdresi As String)


       Try
           Using sr As New StreamReader(dosyaAdresi, System.Text.Encoding.Default)
               Dim dosyaIcerigi As String
               dosyaIcerigi = sr.ReadToEnd()
               RichTextBox1.Text = dosyaIcerigi
           End Using
       Catch e As Exception
           MsgBox("Dosya içeriği okunamadı :" & vbCrLf & vbCrLf & e.Message)
       End Try

   End Sub

Bu prosedür öncekinden farklı olarak bir parametre alacak. Bu parametreye içeriğini görüntülemek istediğimiz TXT dosyasının adresini göndereceğiz. Ona sonra geliriz şimdi prosedürü incelemeye devam edelim.

Try-Catch kaçınılmaz olarak kullanılmalıdır yoksa programda kırılmaya sebebiyet verecek hatalar alabilirsiniz.

StreamReader da ikinci parametre olarak System.Text.Encoding.Default kullanmazsanız dosya içeriğini gösterirken Türkçe karakterler yerine garip karakterler çıkacaktır.

Gelelim bu prosedüre gönderilecek dosya adresini nasıl alacağımıza. Listview'in özelliklerinden FullRowSelect özelliğini True yapıyoruz. Listview üzerinde tıklama işleminde eğer tıklanılan satırın Index değeri değişirse tıklanan satırdaki klasör ve şarkı isimlerini kullarak Txt dosyası adresini prosedüre parametre olarak gönderiyoruz:

Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged

       DosyaIceriginiOku(Application.StartupPath & "\REPERTUARX\" & ListView1.Items(ListView1.FocusedItem.Index).SubItems(0).Text & "\" & ListView1.Items(ListView1.FocusedItem.Index).SubItems(1).Text)
   End Sub

[Resim: do.php?img=4869]
AccessTr.Net teknik konular içeren bir sitedir. Bu tip sitelerde en iyi şekilde yardım alabilmeniz için Site Kurallarını mutlaka okumanız ve buna göre hareket etmeniz lazım.
Cevapla
#5
(21/05/2015, 10:08)alpeki99 yazdı: StreamReader da ikinci parametre olarak System.Text.Encoding.Default kullanmazsanız dosya içeriğini gösterirken Türkçe karakterler yerine garip karakterler çıkacaktır.

Öncelikle çok teşekkürler, emeğinize sağlık. Konu benim açımdan çözüme kavuşmuştur.

System.Text.Encoding.Default

ile

Encoding.GetEncoding("windows-1254")

arasında bir fark varmı ?
drummers, 11-05-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
#6
Benim yazdığımda işletim sisteminin kodlaması hangisi ise -bende Türkçe Win yüklü- onun karakter kodlaması alınır. Mesela İngilizce veya Almanca olsaydı Türkçe karakterler yine sorunlu görünürdü.

Sizin yazdığınızda TXT dosyalarının kodlamasını 1254 yani ANSI olarak kabul eder ona göre gösterim yapar ancak UTF-8 ile kodlanmış bir dosya olsaydı bu defa ne sizin kod ne benimki işe yarardı.

Hangisini kullanırsanız kullanın esas olan TXT dosyanın hangi karakter seti ile kaydedildiğidir. Mesela sizin TXT dosyalarını ANSI olarak kodlanmış. Biz bu şekilde kullandık ancak farklı kodlamalar UTF-8 vs. söz konusu olduğunda dosya kodlamasını tespit edip çeviri işlemi yapmak lazım.

Kısacası farklı kodlama yapıları sözkonusu olmayacak ise her ikiside kullanılabilir.
AccessTr.Net teknik konular içeren bir sitedir. Bu tip sitelerde en iyi şekilde yardım alabilmeniz için Site Kurallarını mutlaka okumanız ve buna göre hareket etmeniz lazım.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task