PDA

View Full Version : کمک برای کار با تایمر



elderado
جمعه 17 شهریور 1391, 06:34 صبح
با سلام به همه ی مهندسین عزیز
دوستان من توی یه تکه کد که کار لاگین رو انجام میده برای امنیت یک تایمر گذاشتم که با هر سه بار اشتباه زدن یوزر نیم و پسورد دکمه ی لاگین رو به یه مدت خاص غیر فعال میکنه
این کد برای بار اول کار میکنه و مشکلی نداره
اما برای بار دوم ثانیه ها 2 تا 2 تا زیاد میشن
نمیدونم مشکل کار کجاست
لطفا راهنمایی کنید
ممنونم
اینم کد:

int wrongcount = 0, delaytime = 6,i=3;
private void btn_loginn_Click(object sender, EventArgs e)
{

DataTable p = new DataTable();
DataTable s = new DataTable();
s = bl.bl.select("select user_name from users where user_name =N'" + txt_usr.Text + "'");
p = bl.bl.select("select user_pass from users where user_pass=N'" + txt_pass.Text + "' and user_name=N'"+txt_usr.Text+"'");
try
{
if (s.Rows[0]["user_name"].ToString() == txt_usr.Text)
{
if (p.Rows[0]["user_pass"].ToString() == txt_pass.Text)
{
if (bl.bl.select("select user_state from users where user_name=N'" + txt_usr.Text + "'").Rows[0][0].ToString() == "فعال")
{
frm_main.role = (bl.bl.select("select user_role from users where user_name=N'" + txt_usr.Text + "' and user_pass=N'" + txt_pass.Text + "'").Rows[0]["user_role"].ToString());
this.Hide();
frm_main.user_id = Convert.ToInt32(bl.bl.select("select user_id from users where user_name =N'" + txt_usr.Text + "' and user_pass=N'" + txt_pass.Text + "'").Rows[0][0].ToString());
frm_main f = new frm_main();
f.Show();
}
else { MessageBox.Show("نام کاربری غیر فعال شده است ، با مدیریت تماس بگیرید"); }
}
}
}
catch
{

wrongcount++;
if (wrongcount >= 50)
{
MessageBox.Show("نرم افزار غیر فعال شده است، با پشتیبانی تماس بگیرید، 09398541092 ");
bl.bl.ginsert("update users set user_state=N'غیرفعال'");
}
else if (wrongcount == i)
{


MessageBox.Show("شما به تعداد " + wrongcount + " ورود اشتباه داشته اید، لطفا " + delaytime + " ثانیه صبر کنید");
tm.Tick += new EventHandler(tm_Tick);
tm.Interval = 1000;
tm.Enabled = true;
tm.Start();
i += 3;

}
else { MessageBox.Show("نام کاربری یا رمز عبور اشتباه است"); }
}
}
int sec = 0;
void tm_Tick(object sender, EventArgs e)
{
sec++;
label1.Text = sec.ToString();
if (sec < delaytime)
{
btn_loginn.Enabled = false;
}
else
{
tm.Stop();
btn_loginn.Enabled = true;
sec = 0;
delaytime *= 6;
}
}

Mahmoud Zaad
جمعه 17 شهریور 1391, 08:52 صبح
سلام
فکر نمی کنم به تایمر نیاز باشه. شما یه متغیر interger تعریف می کنید که تعداد دفعاتی که کاربر اشتباه وارد می کنه رو می شماره بعد میگید اگه سه تا بود مثلا از برنامه خارج بشه.
یه مثال ساده:



if (count == 3)
{
MessageBox.Show("EXIT");
}
else
{

if (textBox2.Text == "m")
{
MessageBox.Show("OK");
}
else
{
count++;
MessageBox.Show("ERROR");
}
}



متغیر رو هم که به صورت سراسری int



count = 0;

تعریف کردیم. الان من چک کردم اگه مقدار تکست باکس 2، m بود پیغام OK بده در غیر اینصورت ERROR و یه دونه به متغیر count اضافه بشه و اگه سه بار هم اشتباه وارد بشه پیغام EXIT بده!

nima.sh
جمعه 17 شهریور 1391, 10:51 صبح
به نظر من بهترین راه وساده ترین را اینه که به قول دوستمون maysamfthi عزیز یه conter بذاری اگه مساوی با مثلا 3 شد،timer رو فراخونی کنی:timer1.enable=true
داخل timer هم میتونی به مدت n ثانیه button رو غیرفعال کنی...
button1.enable=false;
موفق باشی....

elderado
جمعه 17 شهریور 1391, 12:43 عصر
با تشکر از راهنمایی دوستان

خب اینکه تا n ثانیه باتن رو غیر فعال کنم رو چجوری کدش رو باید بنویسم؟

اگه منظور شما از n ثانیه اینه که برای همیشه غیر فعال بشه یا اینکه به قول دوستمون کلا خارج بشه از نرم افزار ، باید بگم که این کار زیاد به نظر ن جالب نیست

من می خوام هر بار که کاربر تا سه بار اشتباه وارد کنه به مدت مشخصی مجبور به صبر کردن بشه و این مدت هر بار زیاد تر بشه

همونطور که از کد پیداست

مشکل چیه که برای بار دوم اون متغیر sec دوتا دوتا زیاد میشه؟

ممنون میشم اینو بهم بگید

ya30ien2
جمعه 17 شهریور 1391, 16:10 عصر
دوست عزیز منم فکر میکنم اساتید درست میگن
برای اشتباه وارد کردن conter بهترین و ریباترین راه هستش
حالا اگه 3 بار اشتباه وارد کرد تایمر رو فعال میکنی و داخل تایمر دستور رو بصورت ifمینویسی که تا زمانی که به زمان تعیین شده نرسیده فقط به ثانیه یکی اضافه کنه وقتی به زمان مشخص شده رسید اونوقت وارد دستور else میشه و باتون رو فعال میکنه

nima.sh
جمعه 17 شهریور 1391, 19:07 عصر
کل دستور به این شکله:
اول یه متغیر سراسری تعریف کن که conter:
int conter=0;
بعد داخل باتن کد رو بنویس:

if(textbox1.text!=Fieald ){
conter++;
}
{else
messageBox("true");
}
if(conter==3)
timer1.enable=true;

تو شرط اول میاد بررسی میکنه که textbox با فیلد توی دیتابیس مساوی هست یا نه(البته کد رو خودت بنویس)
اگه نبود به conter یه واحد زیاد میکنه
اگه نبود پیام true برمیگردونه...
تو شرط دوم میاد بررسی میکنه که conter مساوی با 3 هست یا نه،اگه بود timer رو فعال میکنه...
حالا تو timer:
button1.enable=false;
فقط interval رو مساوی 1000 بذار تا هر 1 ثانیه اعمال بشه و حتما enable مساوی با false باشه...
موفق باشی...

elderado
جمعه 17 شهریور 1391, 20:15 عصر
ممنونم بابت راهنمایی دوستان
اما من هنوز جواب سوالم رو نگرفتم
چرا تایمر من برای بار دوم که فعال میشه دوتا دوتا زیاد میشه، و برای بار سوم 3 تا 3 تا و ...
کجای کد مشکل داره؟

elderado
شنبه 18 شهریور 1391, 05:49 صبح
دوستان عزیز اگه خوب توجه کنید میبینید که منم غیر از همینی که شما میفر مایید انجام ندادم
اونجا هم شمارنده داره
wrongcount
شمارنده هست اسمش هم روشه
لطفا رهنمایی کنید برای این مشکل چیکار باید بکنم
ممنونم

matin.soft
شنبه 18 شهریور 1391, 08:33 صبح
با سلام دوست عزیز شما پس از فعال شدن تایمر و شمردن از 0 تا 6 تایمرتون رو در نهایت غیر فعال نمی کنید و تایمر همچنان به کار خود ادامه می دهد.

elderado
شنبه 18 شهریور 1391, 16:33 عصر
مرسی دوست عزیز ولی غیر فعال میشه
اگه نشه که از بلاک تایمر بیرون نمیره
tm.stop();
مگه این کد غیر فعالش نمیکنه؟

Mahmoud Zaad
شنبه 18 شهریور 1391, 16:54 عصر
این یه نمونه:

roolinjax
شنبه 18 شهریور 1391, 17:03 عصر
سلام
دوست عزیز من کد شما رو روی سیستم خودم تست کردم ، تایمر در هر بار یکی یکی اضافه میشه .
کد کاملا درسته و مشکلی نداره.
حتی من خط به خط trace کردم اما به چیز عجیبی بر نخوردم
موفق باشی

elderado
شنبه 18 شهریور 1391, 21:57 عصر
من از همه دوستان بخاطر توجه شون تشکر میکنم

من وقتی که خودم هم خط به خط اجراش میکنم درست انجام میشه

بچه ها به کد من دقت کنید
منم دقیقا همینی رو نوشتم که شما نوشتین