C# ile bir proje yapıyoruz ve projemizde birden fazla form var. Programımızı derlediğimizde projemizin Form1 penceresinden açıldığını görürüz. Peki ya biz projeyi farklı bir formdan örneğin Form2 den başlatmak istersek? Burada örnek olarak kullanacağımız senaryoda, bir programımız var ve biz bu programa sadece yetkili kişilerin erişmesini istiyoruz. Yetkili kişinin bir kullanıcı adı ve parolası olduğunu var sayalım. Bu durumda programı çalıştırdığımızda ana ekrandan önce bir “Login” yani “Giriş” penceresi çıkmalı ve kullanıcı gerekli bilgileri girdikten sonra ana ekrana yönlendirilmeli. Projemizde SQLite veritabanı kullanacağız. Öncelikle kullanıcı bilgilerimizi yani “Kullanıcı ID”, “E-Posta” ve “Parola” bilgilerinin tutulacağı bir veri tabanı oluşturmamız gerekiyor. Bunun için ben SQLite Administrator isimli programı kullanıyorum.
- Sol üstteki butona tıklayarak yeni bir veritabanı oluşturuyoruz. Adına kullanici deyip SQLite3DB formatında kaydediyorum.
- Soldaki tablolar klasörüne sağ tıklayıp tablo oluştur diyoruz. Çıkan pencereden önce tablo adı giriyoruz; ben “kullaniciBilgileri” olarak belirledim. Daha sonra 3 sütun oluşturacağız; “KullaniciID”, “EPosta” ve “Parola”. Alan ekle butonuna tıklayıp ilk sütun olan “KullaniciID” için alan tipini INTEGER seçip, ana anahtar ve otomatik artış kutularını işaretleyip ekle diyoruz. Tekrar alan ekle butonuna tıklayıp ikinci sütunu ekliyoruz; “EPosta”. Alan tipi Text ve boş değil kutusunu işaretleyip bu alanın boş bırakılmasını veritabanı tarafında engellemiş oluyoruz. Parola içinde aynı adımları izleyip en son oluştur butonuna tıklayıp tablomuzu tamamlamış oluyoruz.
- Sonuç olarak veritabanımız hazır.
- Microsoft visual studio’da yeni bir C# projesi başlatıyoruz ve üst menüden Tools > NuGet Package Manager > Package Manager Consele yolunu izleyerek Package Manager Consele açıyoruz. “Install-Package System.Data.SQLite” yazıp -tırnak işareti olmadan- SQLite referanslarının projemize eklenmesini sağlıyoruz. Projemizin üstüne sağ tıklayıp ikinci bir form ekliyoruz.
- Aynı adımlarla proje içerisinde bir klasör oluşturup adına Veritabani -siz kendinize göre belirleyebilirsiniz- diyoruz. Sürükle bırak yöntemiyle oluşturmuş olduğumuz veritabanı dosyasını bu klasörün içerisine atıyoruz ve properties panelinden “Copy to Output Directory” seçeneğini “Copy if newer” olarak seçiyoruz.
- Bu aşamada projemizi derlediğimizde, proje varsayılan olarak Form1’den başyacaktır. Eğer Form2 den başlatmak istersek “Program.cs” içerisindeki
Application.Run(new Form1());
kodunu
Application.Run(new Form2());
olarak değiştirebiliriz ancak bu yöntem kullanıcı giriş-çıkışı gibi farmlar arası yönlendirme metotları için buglar oluşturur. Varsayılan formu Form2 yapıp kullanıcı girişi yapıldıktan sonra bu formu kapatarak Form1’e yönlendirme yapmak programın tamamen kapanmasına neden olacaktır. Çünkü programın ana formu olarak Form2’yi belirledik ve this.Close(); koduyla formu kapatmaya çalışmak programı da kapanır. Bu nedenle başlangıç formu olarak Form1’e dokunmayıp açılışta Form1’in load kısmına yazılacak kodla Form1’i gizlemek ve Form2’yi açmak yöntem olarak daha kullanışlı olacaktır. Form1’in load kısmına;
AnaForm _anaForm = Application.OpenForms["AnaForm"] as AnaForm; private void Form1_Load(object sender, EventArgs e) { Form2 _form2 = new Form2(); // Yeni bir Form2 nesnesi oluşturduk _form2.Show(); // oluşturduğumuz Form2 nesnesini çalıştırdık this.Hide(); // Form1 i gizledik, görünmez hale getirdik }
7. Aşağıdakine benzer bir Form2 tasarımı oluşturup giriş butonunun click eventine -butonnun üzerine çift tıklayarak açabilirsiniz- aşağıdaki kodları yazıyoruz.
Form1 _Form1 = Application.OpenForms["Form1"] as Form1; private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "" || textBox2.Text == "") { MessageBox.Show("Lütfen boş alan bırakmayınız! Gerekli tüm bilgileri girdiğinizden emin olun."); } else { SQLiteConnection baglanti = new SQLiteConnection("Data Source=Veritabani/Kullanici.s3db"); baglanti.Open(); string sql = "SELECT * FROM kullaniciBilgileri WHERE EPosta=@EPosta AND Parola=@Parola"; SQLiteParameter prm1 = new SQLiteParameter("Eposta", textBox1.Text); SQLiteParameter prm2 = new SQLiteParameter("Parola", textBox2.Text); SQLiteCommand cmd = new SQLiteCommand(sql, baglanti); cmd.Parameters.Add(prm1); cmd.Parameters.Add(prm2); DataTable dt = new DataTable(); SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); da.Fill(dt); if (dt.Rows.Count > 0) { _Form1.Show(); this.Close(); MessageBox.Show("Giriş başarılı"); } else { MessageBox.Show("Hatalı E-Posta/Parola"); } baglanti.Close(); } }
8. Veritabanına önceden eklediğim “iletisim@berkayyurdakul.com” ve “1234” parolasıya giriş yaptığımızda program sorunsuz çalışıyor.
Projenin kaynak dosyasını indirmek için tıklayınız.