PDA

View Full Version : سوال: چگونگي ذخيره كليدهاي زده شده در فرم



javadspy++
شنبه 02 اردیبهشت 1391, 17:36 عصر
سلام.
چه طوري ميشه وقتي فوكوس روي فرم باشه ولي كليدهاي زده شده در تكس باكس نمايش داده شوند؟

بدين صورت كه ما هر كليدي رو زديم تو تكست نمايش بده..ولي فوكوس روي تكست نباشه!!؟

رافعی مهدی
شنبه 02 اردیبهشت 1391, 18:17 عصر
سلام
کافیه در کلاس Form (مثلاً Form1) متد ProcessCmdKey رو override کنید:



protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool result = base.ProcessCmdKey(ref msg, keyData);

textBox1.Text += keyData.ToString();

return result;
}

amirrr3
شنبه 02 اردیبهشت 1391, 18:40 عصر
تو رخداد key press فرمت کد زیر رو بنویس


textBox1.Text += e.KeyChar.ToString();

رافعی مهدی
شنبه 02 اردیبهشت 1391, 19:00 عصر
رویداد KeyPress به این صورتی که شما گفتید عمل نمیکنه. هنگامی که Focus روی textBox1 نیست، امتحان کنید:



private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
textBox1.Text = e.KeyChar.ToString();
}

هیچ اتفاقی نخواهد افتاد.

amirrr3
شنبه 02 اردیبهشت 1391, 19:50 عصر
دوست عزیز من تا چیزی رو تست نکنم اینجا مطرحش نمیکنم
در ضمن اگه دقت می کردی نوشتم keypress فرم فرم فرم فرم فرمت نه keypress تکست باکست
اتفاقی خواهد افتاد؟

amirrr3
شنبه 02 اردیبهشت 1391, 19:57 عصر
اینم یه سورس واسه محکم کاری
http://uplod.ir/x2ktdrn2qh9l/keypress.rar.htm
تو این سورس چهارتا تکس باکس حتی در حالت غیرفعال هم قرار دادم که متنش تغییر میکنه

رافعی مهدی
شنبه 02 اردیبهشت 1391, 20:06 عصر
!!!
من دقت نکردم یا ...؟
به کدی که نوشتم دوباره نگاه کن: Form1_KeyPress هست نه textBox1_KeyPress. (اگر اینجوری بود که جوابم خیلی خنده دار میشد چون keyPress روی کنترلی register شده بود که قراره اصلاً Focus نگرفته باشه!) من با اینکه در مورد تذکری که دادم مطمئن بودم، دوباره و سه باره هم تستش کردم، روش شما جواب نمیده. اگر در این مورد اشتباه میکنم لطفاً کدی که نوشتی و امتحانش هم کردی رو در یک فایل zip اینجا بذار تا من هم یه چیزی یاد بگیرم.

amirrr3
شنبه 02 اردیبهشت 1391, 20:12 عصر
گذاشتم که، اون بالاست
اگه جواب داد مارو هم بی خبر نذار

درضمن من با توجه به درخواست دوستمون این پاسخ رو دادم و اونجا قید نشده که فوکوس رو کنترلی دیگه باشه و فقط گفته فرم

در پایان اگه از ما ناراحت شدی شرمنده
موفق باشی

رافعی مهدی
شنبه 02 اردیبهشت 1391, 20:26 عصر
کدی که گذاشتید رو بررسی کردم، شما یک حالت بسیار خاص به وجود آوردید که فقط در همون فرم شما جواب میده و به همین دلیل یک جواب عمومی محسوب نمیشه، حالا چرا؟ علتش اینه که پراپرتی TabStop مربوط به تمام کنترلهایی که روی فرم گذاشتید (که چهار تا TextBox هستند) رو False کردید، چنین فرمی در عمل در یک Application هرگز ساخته نمیشه. برای مثال فقط یک Button معمولی به این فرم اضافه کنید (و بدون هیچ دستکاری اضافی اجازه بدهید مثل هر دکمه دیگری در سایر برنامه ها Focus به خودش بگیره) در این صورت Focus از روی Container فرم به یکی از کنترلهای Child اون (در اینجا این Button) منتقل میشه و دیگه کد شما جواب نمیده. بنابراین میشه گفت در برنامه شما صورت سوال دور زده شده است. اما روشی که من معرفی کردم رو قبلاً از Hans Passant (http://stackoverflow.com/users/17034/hans-passant) در اینجا (http://stackoverflow.com/a/2435190/668342) یاد گرفته بودم.

شما هم موفق باشید