PDA

View Full Version : کمک ،فرم login که ساختم یه مشکل داره؟



captain_black81
شنبه 07 اردیبهشت 1387, 16:19 عصر
سلام دوستان
من یه فرم login دارم که اطلاعات کاربر رو میگیره و اگه صحیح باشه بسته میشه اما ایراد اینه که اگه کاربر Alt+F4 بزنه بسته میشه و فرم اصلی رو نشون میده

razavi_university
شنبه 07 اردیبهشت 1387, 16:35 عصر
زمانی که فرم لوگین رو ShowDialog می کنی مقدار خروجیش رو چک کن
اگر DialogResult.Cancel بود از بزنامه خارج شو

captain_black81
شنبه 07 اردیبهشت 1387, 16:46 عصر
میشه کد مربوطه رو بنویسید؟
ممنون میشم. باید توی form load بنویسم؟
ببخشید اگه تازه کارم

captain_black81
شنبه 07 اردیبهشت 1387, 17:15 عصر
لطفا دوستان دست مارو بگیرند

sinpin
شنبه 07 اردیبهشت 1387, 17:43 عصر
فکر میکنم بهتر باشه اگه کدی که نوشتید رو اینجا قرار بدید تا دوستان اون رو تصحیح کنند.

ezamnejad
شنبه 07 اردیبهشت 1387, 18:52 عصر
کنترل Button خاصیتی به نام DialogResult دارد که با تنظیم این خاصیت به یکی از مقادیر موجود ، در هنگام کلیک Button مقدار آن به فرم فراخواننده برگشت داده می شود . در صورتی که کاربر کلید ALT+F4 را از صفحه کلید فشار دهد مقدار برگشت داده شده Cancel خواهد بود .


DialogResult dr;
Form2 f=new Form2();
dr = f.ShowDialog();
if (dr == DialogResult.Cancel)
{
Code Here...
}
else
{
Code Here...
}

اگر قصد دارید کاربر امکان بستن فرم login را نداشته باشد از کد زیر استفاده کنید .


private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}

razavi_university
یک شنبه 08 اردیبهشت 1387, 00:22 صبح
ممنون از ezamnejad که کدش رو گذاشتند
در تکمیل صحبتهای دوستان :
یک LoginControl هست که جناب Sinpin زحمتشو کشیدن تمام چیزهایی که لازم هست رو داره و می تونین به دلخواه خودتون امکاناتش رو تغییر بدین (در همین تالار جستجو کنین)
این چند تا کلاس نمونه رو میتونین ببینین که چطور میشه از اون کنترل استفاده کرد
یک فرم برای Login و فراخوانی اون در فرم ، کد مثال این دو فرم رو در قسمت ضمیمه به همراه فایل DLL همون کنترل گذاشتم.
موفق باشید

کدهای قسمت اعتبار سنجی کاربر بر اساس پسورد هش شده و ذخیره Log برنامه نوشته شده مطابق نیاز خود تغییر دهید

اَرژنگ
یک شنبه 08 اردیبهشت 1387, 12:49 عصر
لطفا دوستان دست مارو بگیرند

جستجو: login C# forum http://barnamenevis.org/forum/showthread.php?t=94791

captain_black81
یک شنبه 08 اردیبهشت 1387, 15:06 عصر
ممنونم با e.cancel=true; حل شد اما یه مشکل جدیدی بوجود اومد
وقتی کاربر رمز رو درست میزنه این دستور رو نوشتم :
this.close()
اما دوباره فرم main لود میشه و صفحه login دوم باز میشه
چیکار کنم؟

captain_black81
یک شنبه 08 اردیبهشت 1387, 15:12 عصر
آخه توی main فرم form1 لود میشه و توی form1_load نوشتم:
loginform lf=new loginform()

razavi_university
یک شنبه 08 اردیبهشت 1387, 15:30 عصر
میتونی فرم اصلی رو نشون بدی و بعد فرم لوگین رو ShowDialog کنی. حالا هر زمانی که لوگین بسته بشه فرم اصلیت نشون داده می شه البته باید برای مقدار خروجی فرم لوگین شرط بگذاری تا همون مشکل اول پیش نیاد

captain_black81
یک شنبه 08 اردیبهشت 1387, 15:45 عصر
میشه نمونه کدشو برام بنویسی؟ ممنون میشم

اَرژنگ
یک شنبه 08 اردیبهشت 1387, 15:53 عصر
بهترین روش که تا به حال دیدم: http://barnamenevis.org/forum/showpost.php?p=466715&postcount=8 روش دیگر (به خوبی روش بالا نیست): http://barnamenevis.org/forum/showthread.php?t=88552&highlight=login و از این روش پائینتر روشهایه آدامس و چوب اند که در شان برنامه نویس نیستند.

razavi_university
یک شنبه 08 اردیبهشت 1387, 16:08 عصر
میشه نمونه کدشو برام بنویسی؟ ممنون میشم




using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace TestLoginControl
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
LoginForm login = new LoginForm();
if (login.ShowDialog() == DialogResult.OK)
Application.Run(new MainForm());
}
}
}

این کدی است که در برنامه بالا استفاده شده

captain_black81
یک شنبه 08 اردیبهشت 1387, 16:20 عصر
ممنون آقای razavi_university
درست کار کرد اما loginform بسته نمیشه

اَرژنگ
یک شنبه 08 اردیبهشت 1387, 16:24 عصر
ممنون آقای razavi_university
درست کار کرد اما loginform بسته نمیشه

http://barnamenevis.org/forum/showpost.php?p=506627&postcount=13

captain_black81
یک شنبه 08 اردیبهشت 1387, 16:25 عصر
ممنون آقای razavi_university
درست کار کرد اما loginform بسته نمیشه
مشکل دیگه اینه که یه button گذاشتم توی loginform که اگه کاربر نتونست وارد شه برنامه رم ببنده، توی کلیکش نوشتم: application.exit()
اما این دکمه کار نمیکنه

اَرژنگ
یک شنبه 08 اردیبهشت 1387, 16:26 عصر
ممنون آقای razavi_university
درست کار کرد اما loginform بسته نمیشه
مشکل دیگه اینه که یه button گذاشتم توی loginform که اگه کاربر نتونست وارد شه برنامه رم ببنده، توی کلیکش نوشتم: application.exit()
اما این دکمه کار نمیکنه

http://barnamenevis.org/forum/showpost.php?p=506627&postcount=13

captain_black81
یک شنبه 08 اردیبهشت 1387, 16:32 عصر
دقیقا لینکی که دادین به همین مشکل که رسیدن ولش کردن

razavi_university
یک شنبه 08 اردیبهشت 1387, 16:36 عصر
ممنون آقای razavi_university
درست کار کرد اما loginform بسته نمیشه

دوست عزیز شما یکبار لینک اولی که جناب آرژنگ گذاشتند رو ببینین و اجراش کنین مشکلوت حل میشه
من هم کد همون رو واستون گذاشتم

captain_black81
یک شنبه 08 اردیبهشت 1387, 16:49 عصر
بسیار ممنون، حوصله تونو سر بردم.
اون لینک خیلی پیچیده بود و چیزی دستگیرم نشد، بهر حال ممنون.
من اطلاعات کاربر و پسورد رو روی SQL ذخیره میکنم


privatevoid button1_Click(object sender, EventArgs e)
{
string username = user.Text;
string password = pass.Text;

string command = "select max(permission) from users where username='" + username + "' and password='" + password+"'";
string Cmname = "select max(name) from users where username='" + username + "' and password='" + password+"'";
string person = "select max(id) from users where username='" + username + "' and password='" + password + "'";
// SQL Query

SqlConnection cnm = newSqlConnection();
general g = newgeneral();
cnm.ConnectionString = g.cnm;
SqlCommand cm = newSqlCommand();
cm.Connection = cnm;
cm.CommandType = CommandType.Text;
cm.CommandText = command;

SqlCommand cn=newSqlCommand();
cn.Connection=cnm;
cn.CommandType=CommandType.Text;
cn.CommandText=Cmname;
SqlCommand cp = newSqlCommand();
cp.Connection = cnm;
cp.CommandType = CommandType.Text;
cp.CommandText = person;

object s;
object n;
object p;

cnm.Open();
s = cm.ExecuteScalar();
n=cn.ExecuteScalar();
p = cp.ExecuteScalar();
cnm.Close();
string value = Convert.ToString(s);
string name= Convert.ToString(n);
string perscode = Convert.ToString(p);
if (value == "")
{
MessageBox.Show("شما مجاز به ورود به سیستم نمی باشید", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
LoginCount = LoginCount + 1;
if (LoginCount == 3)
{
Application.Exit();
}
}
else

{
int permission = Convert.ToInt32(s);
if (permission==1 || permission==2)
{
//MessageBox.Show("دمت گرم رخصت", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

label4.Text = name;
this.Close();



// kode shakhse vared shode ra dar registry mineshanad

int regkey = Convert.ToInt32(perscode);
Microsoft.Win32.Registry.CurrentUser.CreateSubKey( @"Software\kian\source");
Microsoft.Win32.Registry.CurrentUser.CreateSubKey( @"Software\kian\source").SetValue("Pers Code", regkey);
Microsoft.Win32.Registry.CurrentUser.CreateSubKey( @"Software\kian\source").Close();
}
else

{
}
}
}

captain_black81
یک شنبه 08 اردیبهشت 1387, 16:52 عصر
اشکالاتشو بگید لطفا

اَرژنگ
یک شنبه 08 اردیبهشت 1387, 17:38 عصر
اشکالاتشو بگید لطفا

اولین اشکلاش این است که کدها را با هم قاطی کردید، مثالهایی که بهشان لینک فرستادم با لایه بندی کار میکنند، اگر با این طرز کد نویسی ادامه بدید ، کوچکتین مشکلتان همین مشکلی که باهاش برخوردید خواهد بود. کدها را از هم جدا کنید، به مباحث ۳ لایه برنامه نویسی نگاه بندازید، تمام کد را همینطوری نمیشه پشت یک باتن کلیک گذاشت.

captain_black81
یک شنبه 08 اردیبهشت 1387, 17:53 عصر
چرا this.close کار نمیکنه؟
من کد دوستمونو بصورت زیر استفاده کردم

staticvoid Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);

Login login = newLogin();
if (login.ShowDialog() == DialogResult.OK)
{
Application.Run(newPartMain());
}

}

ولی فرم partmain لود نمیشه
یعنی چه اتفاقی باید بیافته که dialogresult.ok در ifدرست باشه؟

razavi_university
دوشنبه 09 اردیبهشت 1387, 22:53 عصر
كجا از This.close استفاده مي‌كني كه جواب نميده؟
شايد مقدار OK رو برنمي‌گردوني


اون لینک خیلی پیچیده بود و چیزی دستگیرم نشد، بهر حال ممنون.

من كه دو فرم اصلي كه نياز داشتين رو گذاشتم ديگه كجاش پيچيده بود؟؟