PDA

View Full Version : بررسی انجام کار کاربر در اطلاعات فرم



مهدی رحیم زاده
جمعه 28 فروردین 1388, 17:44 عصر
سلام
میخوام بررسی کنم تا مثلا اگه کاربر داده های فرم رو توی یک بازه زمانی مثلا 60 ثانیه دستکاری نکرد ، یه کاری انجام بشه . چطور اینو تعیین کنم ؟ یه چیزی شبیه اسکرین سیور ویندوز با این تفاوت که اون بر حسب کار کیبور و ماوس عمل می کنه و من می خوام بر حسب اعمال تغییرات روی داده ها این کار رو انجام بدم .
با تشکر

hsmfaridmehr
جمعه 28 فروردین 1388, 19:52 عصر
خوب وقتی فرم لود میشه ی stopwatch رو start کن و ی متغییر از نوع bool
تو کلاست معرفی کن و توی event TextChange انو true کن و بعد از اون بازه ی زمانی اون متغییر رو چک کن اگه true بود خوب یعنی تغییر کرده

مهدی رحیم زاده
جمعه 28 فروردین 1388, 23:23 عصر
اینی که شما میگید رو باید برای همه تکس باکس ها بنویسم درسته ؟؟؟

hsmfaridmehr
شنبه 29 فروردین 1388, 09:20 صبح
اول اینکه من ی معذرت خواهی کنم چون باید از یک تایمر استفاده کنی نه StopWatch که هر ثانیه یک واحد به متغییرت که از 0 شروع میشه اضافه کنه و هر دفعه چکش کنه.
دوم هم اینکه برای یکی شون بنویس و اینو به ایونت TextChange بقیه اضافه کن



textBox1.TextChanged+= newEventHandler(textBox1_TextChanged);
textBox2.TextChanged += newEventHandler(textBox1_TextChanged);
textBox3.TextChanged += newEventHandler(textBox1_TextChanged);
textBox4.TextChanged += newEventHandler(textBox1_TextChanged);

seven7777777
شنبه 29 فروردین 1388, 10:36 صبح
خوب اینطوری هربار که تکست باکس ها تغییر کنند که متغیر bool مدام باید falsse بشه در حالی که false هست . راه دیگه ای نیست ؟
اصلا استفاده از یک timer برای چک کردن این مورد هم به نظر من صحیح نیست چون داره یه سربار به سیستم و cpu اعمال می کنه ، درسته ؟؟؟

hsmfaridmehr
شنبه 29 فروردین 1388, 11:52 صبح
اولا ایونت ها متغییر رو true می کنن نه false
درمورد timer هم بعد از زمان مورد نظر اون رو غیر فعال می کنیم



public partial class Form1 : Form
{
private int _counter = 0;
private bool _isChanged = false;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Interval = 1000;
textBox1.TextChanged += new EventHandler(TextChange);
textBox2.TextChanged += new EventHandler(TextChange);
textBox3.TextChanged += new EventHandler(TextChange);
textBox4.TextChanged += new EventHandler(TextChange);
}
private void TextChange(object sender, EventArgs e)
{
_isChanged = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
_counter++;
if (_counter == 60)
{
timer1.Enabled = false;
if (!_isChanged)
{
this.Close();
}
}
}
}

seven7777777
شنبه 29 فروردین 1388, 17:09 عصر
خوب اینکار که نباید یکبار انجام بشه .
مثلا وقتی کاربر تغییرات رو انجام داد دوباره باید تایمر تا 60 ثانیه کار کنه مثل screen saver ویندوز .
پس در طول بنامه کلا این تایمر باید قبل از هر شروع تغییر کاربر غیرفعال و بعدش فعال بشه که اینم مستلزم اینه که در هر لحظه عمل چک کردن انجام بشه .
این سناریو رو در نظر بگیر :
کاربر شروع به تغییر می کنه -> تایمر از کا میافته .
کاربر برای چند ثانیه کاری نمی کنه -> تایمر فعال میشه .
و همین دو کار رو تا آخر در نظر بگیر . یعنی همیشه تایمر یابد فعال باشه مگر اینکه این کار قرار باشه یکبار انجام بشه .