Windows’un programları çalıştırma veritabanı Registry, login isteyen uygulamalarda da yardımcı oluyor. Ne gereği var ram içinde de tutulabilir diyorsanız haklı olabilirsiniz. Uygulamayı farklı birilerine verdiğinizde kendi şifre ve kullanıcı adını kullanabilir. Bunun için her kullanıcıya ayrı değer tutan değişken tanımlamanız gerekir. Her neyse.. hikayeyi fazla uzatmadan Registry ile login olma olayına geçelim.
Bu projede 3 tane form kullandım. Biri ilk girişte yeni kullanıcı oluşturmak form, diğeri kullanıcı adı ve şifre ekranı form, diğeri de doğru login olunduğunda yeni sayfa için. Uygulamamızın çalışma mantığı şöyle ;
[stextbox id=”info”]Uygulama yüklü bilgisayarda ilk defa açıldığında yeni kullanıcı için kayıt ekranı gelecek. Kayıt edildikten sonra verilen kullanıcı adı ve şifre ile giriş yapılacak.[/stextbox]
Formları ve uygun textbox ları formlara ekleyerek kod kısmına geçebiliriz; İlk olarak Program.cs kısmına anahtarın var olup olmadığını kontrol ediyoruz.
[cc lang=”c#”]static void Main()
{
RegistryKey anahtar = Registry.CurrentUser;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (anahtar.OpenSubKey(@”Software\Coder”) == null)
{
Application.Run(new Form3());
}
else
{
Application.Run(new Form1());
}
}
[/cc]
Burada yapılan iş CurrentUser’daki Software anahtarı altında oluşturmak istediğimiz Coder isimli anatarın var olup olmadığını kontrol ettiriyoruz. Eğer anahtar varsa, kullanıcının login olacağı formu açtırıyoruz. Yoksa yeni kullanıcı ekranı oluşturuyoruz.
Yeni kullanıcı oluşturulması için resimdeki gibi form ekranı oluşturup kod kısmına geçebiliriz;
[cc lang=”c#”]
// using Microsoft.Win32; // Eklemeyi unutmayın !!!
private void button1_Click(object sender, EventArgs e) //kaydet butonu
{
RegistryKey anahtar = Registry.CurrentUser;
string sifre1 = txtsifre.Text;
string sifre2 = txtsifretekrar.Text;
if (sifre1 == sifre2)
{
try
{
anahtar = anahtar.CreateSubKey(“Software\\Coder”);
anahtar.SetValue(“kullanici”, txtkul.Text, RegistryValueKind.String);
anahtar.SetValue(“sifre”, txtsifre.Text, RegistryValueKind.String);
foreach (Control ktn in this.Controls) //tüm label’ları görünür yaptık
{
if (ktn is Label)
{
ktn.Visible= true;
}
}
label8.Text = txtkul.Text;
label9.Text=txtsifre.Text;
demosuresi();
Registry.CurrentUser.Flush();
}
catch (Exception)
{
label1.Text = “Hata!!!”;
}
}
else
{
MessageBox.Show(“Şifreler uyuşmuyor”);
}
}
private void btngiris_Click(object sender, EventArgs e)// login formuna giriş yaptırmak için
{
Form1 frm = new Form1();
frm.Show();
this.Hide();
}[/cc]
Ve son olarak login olmamızı sağlayan giriş formunu resimdeki gibi ayarlayıp kod kısmına geçebiliriz.
[cc lang=”c#”] private void button1_Click(object sender, EventArgs e)
{
RegistryKey anahtar = Registry.CurrentUser;
anahtar=anahtar.OpenSubKey(@”Software\Coder”);
string kuladi= (string)anahtar.GetValue(“kullanici”);
string sifre=(string)anahtar.GetValue(“sifre”);
if (txtkul.Text == kuladi & txtsifre.Text == sifre)
{
Form2 frm = new Form2();
frm.Show();
this.Hide();
}
else
{
MessageBox.Show(“Giriş başarısız”);
}
}[/cc]
Registry’a kayıt ettiğimiz anahları okuyarak kullanıcı adı ve şifresini kontrol ederek giriş yaptık…
hocam ben static void main kısmından hata alıyorum bunu nasıl giderebilirim
nası bi hata alıyorsun ?
hatayı çözdüm fakat hocam bende tek seferliğine kullanıcı adı ve kayıt yapıyor bu neden kaynaklanıyor olabilir.Şuan sadece tek kullanıcı için kayıtlı giriş mevcut.
bunu visual studio 2010 için de yapar mısın
Dostum biraz daha araştır. Gidişatın hiç iyi değil…