PDA

View Full Version : سوال: اندازه گیری فاصله بین فشار دو کلید در C#



erroric
یک شنبه 25 فروردین 1392, 16:20 عصر
با سلام خدمت همه دوستان و اساتید

من یه برنامه می خوام بنویسم که توی این برنامه نیاز هست که بتونم فاصله زمانی بین فشار دو کلید اندازه گیری بشه. مثلاً اگر کاربر حرف a رو زد و پس از دوثانیه حرف b رو وارد کرد و بعد 3 ثانیه بعد حرف دیگه ای وارد کرد یه خروجی بهم بده که فاصله زمانی بین حروف وارد شده چقدر بوده. همچنین اینکه مدت زمان پایین نگه داشتن کلیدها چقدر بوده. آیا تابع خاصی وجود داره برای این کار یا خودم باید طراحی کنم.

از دوستان ممنونم می شم راهنمایی بفرمایید.

mehrdad1991h
یک شنبه 25 فروردین 1392, 16:55 عصر
با سلام خدمت همه دوستان و اساتید

من یه برنامه می خوام بنویسم که توی این برنامه نیاز هست که بتونم فاصله زمانی بین فشار دو کلید اندازه گیری بشه. مثلاً اگر کاربر حرف a رو زد و پس از دوثانیه حرف b رو وارد کرد و بعد 3 ثانیه بعد حرف دیگه ای وارد کرد یه خروجی بهم بده که فاصله زمانی بین حروف وارد شده چقدر بوده. همچنین اینکه مدت زمان پایین نگه داشتن کلیدها چقدر بوده. آیا تابع خاصی وجود داره برای این کار یا خودم باید طراحی کنم.

از دوستان ممنونم می شم راهنمایی بفرمایید.

تا اونجا که من میدونم خودت باید طراحی کنی
برای طراحی هم میتونی یه تایمر بزاری و یه ارایه و زمان ها را باتوجه به تایمر به دست بیاری بریزی داخل ارایه بعد به کاربر نشون بدی

plus
یک شنبه 25 فروردین 1392, 17:13 عصر
شما باید رویدادهای KeyDown و KeyUP کنترلی که فوکوس روش هست (کاربر داره روش کلیدها رو میزنه) رو هندل کنید.هر بار کلیدی فشرده یا رها میشه، زمان جاری رو با استفاده از DateTime.Now در یک لیست ذخیره کنید و مشخص کنید که این زمان مربوط به چه کلیدی بوده، برای اینکه هم زمان و هم کلید رو ذخیره کنید، میتونید از یک struct استفاده کنید. چیز شبیه به این:

[CSHARP]
public partial class Form1
{
enum KeyEventReason
{
KeyDown,
KeyUp,
}

struct KeyEventInformation
{
public DateTime Time;
public Keys KeyCode;
public KeyEventReason Reason;
}

List<KeyEventInformation> KeyEvents = new List<KeyEventInformation>();

...
...
...
private void TextBox1_KeyDown(object sender, EventArgs e)
{
KeyEvent keyEvent = new KeyEvent();

keyEvent.Time = DateTime.Now;
keyEvent.Reason = KeyEventReason.KeyDown;
keyEvent.KeyCode = e.KeyCode;

KeyEvents.Add(keyEvent);
}

private void TextBox1_KeyUp(object sender, EventArgs e)
{
KeyEvent keyEvent = new KeyEvent();

keyEvent.Time = DateTime.Now;
keyEvent.Reason = KeyEventReason.KeyUp;
keyEvent.KeyCode = e.KeyCode;

KeyEvents.Add(keyEvent);
}


private void Button1_Click(object Sender, EventArgs e)
{
// Process/Display collected information
foreach (KeyEvent keyEvent in KeyEvents)
{
// ...
}
}

}

توی رویداد دکمه (بعد از فشرده شدن کلید ها توسط کاربر)، شما لیستی از رویدادهای مربوط به فشردن/رها کرده به همراه کد کلید و زمان رویاد رو خواهید داشت.میتونید با DateTime.Subtract مدت زمان فشرده شدن کلید و یا فاصله فششرده شدن کلید ها رو محاسبه کنید و نمایش بدین.البته این کارو میتونید در حین اینکه کاربر داره کلید ها رو فشار میده هم انجام بدین..

erroric
چهارشنبه 28 فروردین 1392, 15:25 عصر
با تشکر از پاسخ شما دوست عزیز، من کد شما رو که وارد می کنم، این پیغام رو می ده، آیا برای Keyevent فایل هدر خاصی مورد نیازه؟ ممنون می شم راهنمایی بفرمایید.
عکس مشکل پیوست شده.102971

plus
چهارشنبه 28 فروردین 1392, 18:53 عصر
با تشکر از پاسخ شما دوست عزیز، من کد شما رو که وارد می کنم، این پیغام رو می ده، آیا برای Keyevent فایل هدر خاصی مورد نیازه؟ ممنون می شم راهنمایی بفرمایید.
عکس مشکل پیوست شده.102971
من اشتباها بجای KeyEventInformation ، اون KeyEvent رو گذاشتم.struct مربوط به نگه داری کلید های فشرده شده، در بالا، با اسم KeyEventInformation تعریف شده.

erroric
شنبه 31 فروردین 1392, 15:54 عصر
من اشتباها بجای KeyEventInformation ، اون KeyEvent رو گذاشتم.struct مربوط به نگه داری کلید های فشرده شده، در بالا، با اسم KeyEventInformation تعریف شده.
بسیار ممنون دوست عزیز. برنامه راه افتاد، حالا من توی یه لیست رویدادهای مربوط به بالا/پایین بودن کلید به همراه زمان اونها رو دارم. حالا تو قسمت foreach بخوام اینا رو نمایش بدم مثلاً توی یه listbox که مثلاً اولاً کد کلید بعد بالا/پایین بودن بعد زمان ( برحست میلی ثانیه) رو نشون بدم چه کدی برای استفاده از اطلاعات موجود در List<keyeventinformation> باید وارد کنم. بسیار ممنون از اینکه وقت می ذارید دوست عزیز.

mousa1992
شنبه 31 فروردین 1392, 16:30 عصر
سلام برای بدست آوردن زمان بین فشرده شدن دو کلید و یا زمان نگه داشته شدن میتونید از کلاس Stopwatch استفاده کنید
نمونه زیر رو ببین


System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
Thread.Sleep(100);
sw.Stop();
label1.Text = sw.Elapsed.TotalSeconds.ToString();


موفق باشی