Silverlight 2.0 içerisinde Open File Dialog kullanımı

0 dakikada yazıldı

8124 defa okundu

Düzenle

Silverlight 2.0 Beta 2 içerisinden normal şartlarda uygulamanın
çalıştığı bilgisayardaki dosyalara ulaşma şansınız olmaz. Bu durum
aslında çok normal bir durum çünkü Silverlight tamamen internet
tarayıcısı içerisinde çalışıyor ve dışarıya çıkarak sisteme ulaşması
büyük bir güvenlik açığı olurdu. Oysa bizim bazı durumlarda Silverlight
tarafına sistemimizdeki bir dosyayı aktarmak isteyebiliriz. Örneğin
sistemdeki bir video dosyasını kullanıcının web sitesindeki Silverlight
ile açarak oynatmasını isteyebiliriz. Özellikle bu Silverlight
uygulamasının Macintosh tarafında da çalışacağını düşünürsek aslında Mac
için basit bir WMV Player bile yapmış oluyoruz. Peki sistemdeki
dosyalara nasıl ulaşacağız? Tabi ki "Open File Dialog" aracılığı ile.

Uygulamamızı tasarlayalım.

İlk olarak istemci tarafındaki video dosyalarını oynatacak olan
uygulamamızın ana ekran tasarımını yapalım. Sahnede adı Video olan bir
MediaElement ve bir de Button bulunacak. Düğmeye basıldığında Open File
Dialog aracılığı ile istemcide video dosyalarından birini alacağız.

<UserControl
x
:Class="SilverlightApplication55.Page"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   Width="400"
Height
="300">

    <Grid
x
:Name="LayoutRoot"
Background
="White">

        <MediaElement Margin="24,8,128,84"
x
:Name="Video"/>

        <Button
Height
="24" HorizontalAlignment="Stretch"
Margin
="192,0,128,44" VerticalAlignment="Bottom"
Content
="Dosya Aç" x:Name="btnAc"
Click
="btnAc_Click"/>

    </Grid>

</UserControl>

Kodlama zamanı

Düğmemize basıldığında ilk olarak yeni bir Open File Dialog yaratacağız
sonrasında da nesnemizin özelliklerini tanımlayacağız.

[VB]

Dim DosyaAc As New
OpenFileDialog

DosyaAc.Filter = "WMV Dosyaları
(*.wmv)|*.wmv"

DosyaAc.Multiselect = False

DosyaAc.ShowDialog()

[C#]

OpenFileDialog DosyaAc = new
OpenFileDialog();

DosyaAc.Filter = "WMV Dosyaları
(*.wmv)|*.wmv"
;   

DosyaAc.Multiselect = false;   

DosyaAc.ShowDialog();

Kod içerisinde Open File Dialog'un ilk olarak Filter özelliğini
tanımlıyoruz. Aslında buradaki kullanım Windows Forms'daki kullanım ile
neredeyse aynı. Bizim örneğimizdeki filtrede kullanıcıya sadece WMV
dosyalarını seçtiriyoruz. Bir sonraki adımda Open File Dialog nesnemizin
Multiselect özelliğinide False yaparak bir defada sadece bir
dosya seçilebilmesini de sağladıktan sonra artık Dialog'u ekranda
göstermek için ShowDialog metodunu çağırabiliriz.

[VB]

If DosyaAc.SelectedFile IsNot Nothing Then

Video.AutoPlay = True

Video.SetSource(DosyaAc.SelectedFile.OpenRead)

End If

[C#]

if (DosyaAc.SelectedFile != null) {

    Video.AutoPlay = true;

    Video.SetSource(DosyaAc.SelectedFile.OpenRead);

}

Kullanıcı Open File Dialog'u kapattıktan sonra herhangi bir dosyanın
seçilip seçilmediğini SelectedFile özelliği üzerinden kontrol ederek
eğer dosya seçilmiş ise OpenRead metodu ile dosyayı okuyabiliyoruz.
Biz okuduğumuz dosyayı MediaElement'in Source'una aktaracağımız için
ilk olarak aktarma sonrası hemen video oynatılsın diye MediaElement'in
AutoPlay özelliğini True yapıyoruz. Son olarak da SetSource
metoduna elimizdeki dosyayı aktarıyoruz. Böylece artık video dosyası
MediaElement içerisinde oynatılıyor olacak. Unutmayın videoyu
sunucuya almadık, hala tamamen istemci tarafında çalışıyoruz.

Birden çok dosya okuyalım

Open File Dialog'un MultiSelect özelliği True olduğunda birden
çok dosya seçilerek işlem yapılabiliyor. Bu konudaki örneğimizde sahnede
bir TextBox ve bir düğme bulunacak. Düğmeye tıklandığında sistemden
kullanıcıların istedikleri kadar fazla sayıda TXT dosyası
seçebilecekler. Bu dosyaların hepsinin içeriğini arka arkaya TextBox
içerisine yerleştireceğiz.

[VB]

        Dim DosyaAc As New
OpenFileDialog

        DosyaAc.Filter = "TXT Dosyaları
(*.txt)|*.txt"

        DosyaAc.Multiselect = True

        DosyaAc.ShowDialog()

        If DosyaAc.SelectedFiles IsNot Nothing Then

            For Each Dosya In DosyaAc.SelectedFiles

                txtMetin.Text += Dosya.OpenText.ReadToEnd

            Next

        End If

[C#]

OpenFileDialog DosyaAc = new
OpenFileDialog();

DosyaAc.Filter = "TXT Dosyaları
(*.txt)|*.txt"
;

DosyaAc.Multiselect = true;

DosyaAc.ShowDialog();

if (DosyaAc.SelectedFiles != null) {

    foreach ( Dosya in DosyaAc.SelectedFiles) {

        txtMetin.Text += Dosya.OpenText.ReadToEnd;

    }

}

Yukarıdaki kod içerisinde her zamanki gibi Open File Dialog nesnemizi
oluşturarak uygun filtreyi tanımlıyoruz. Dikkat etmemiz gereken nokta
Multiselect özelliğinin True olarak ayarlanmış olması. Dosyalar
seçildikten sonra SelectedFiles listesinden her bir dosyayı tek tek
alarak OpenText metoduyla dosya içerisindeki yazıyı okuyarak
txtMetin adındaki TextBox nesnemize aktarıyoruz.

Hepinize kolay gelsin.