PDA

View Full Version : سوال: مچ كردن دكمه هاي كيبورد با باتن هاي يك فرم



hunter_ara
دوشنبه 03 مرداد 1390, 11:27 صبح
سلام.
من يه ماشين حساب ساده نوشتم و ميخوام مثل ماشين حساب ويندوز ميخوام علاوه بر موس با كيبورد هم كار كنه.


ميدونم براي اين كار بايد روي Keydown Event كار كنم. يكم كد هم نوشتم ولي كار نميكنه.
اگر كمكم كنيد ممنون ميشم.
حتي اگر [ keyCode || KeyChar دكمه هاي كيبورد رو بهم بديد هم ممنون ميشم.
تو MSDN گشتم ولي پيدا نكردم.

72895

اينم كدم:


//textbox Keydown
// Handle the KeyDown event to determine the type of character entered into the control.
private void TxtView_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
bool CharEntered;
CharEntered = false;

if (!((e.KeyCode >= Keys.D0 || e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 || e.KeyCode <= Keys.NumPad9)))
{
switch (e.KeyCode)
{
case Keys.Back:
case Keys.Add:
case Keys.Multiply:
break;
}

CharEntered = true;
}
// Stop the character from being entered into the control since it is non-numerical.

if (CharEntered == true)
{
e.Handled = true;
}
}


http://barnamenevis.org/images/misc/pencil.png

hunter_ara
دوشنبه 03 مرداد 1390, 15:20 عصر
يعني هيچكس راهي بلد نيست كه بشه اين كار رو انجام داد؟؟؟؟
كارم به خاطر اين يك تيكه 4 روزه كه مونده رو زمين :گریه:

mehrdad1261
دوشنبه 03 مرداد 1390, 18:36 عصر
سلام.
من يه ماشين حساب ساده نوشتم و ميخوام مثل ماشين حساب ويندوز ميخوام علاوه بر موس با كيبورد هم كار كنه.


ميدونم براي اين كار بايد روي Keydown Event كار كنم. يكم كد هم نوشتم ولي كار نميكنه.
اگر كمكم كنيد ممنون ميشم.
حتي اگر [ keyCode || KeyChar دكمه هاي كيبورد رو بهم بديد هم ممنون ميشم.
تو MSDN گشتم ولي پيدا نكردم.

72895

اينم كدم:


//textbox Keydown
// Handle the KeyDown event to determine the type of character entered into the control.
private void TxtView_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
bool CharEntered;
CharEntered = false;

if (!((e.KeyCode >= Keys.D0 || e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 || e.KeyCode <= Keys.NumPad9)))
{
switch (e.KeyCode)
{
case Keys.Back:
case Keys.Add:
case Keys.Multiply:
break;
}

CharEntered = true;
}
// Stop the character from being entered into the control since it is non-numerical.

if (CharEntered == true)
{
e.Handled = true;
}
}


http://barnamenevis.org/images/misc/pencil.png

سلام دوست عزیز
کد کاراکتر های اسکی رو از اینجا ببین
http://www.asciitable.com/
سوالت هم درست متوجه نشدم ولی یه مثال میزنم


if (e.KeyCode == Keys.NumPad0)
{
textbox1.text=textbox1.text+"0";
}

alireza264
دوشنبه 03 مرداد 1390, 20:23 عصر
بچه خوب باید دستورات رو تو رویداد keydown یا keyup یا keypress فرم بنویسی نه تو textbox

BehinAfzar
دوشنبه 03 مرداد 1390, 21:58 عصر
سلام
ابتدا خصوصیت keypreview ی فرم رو true کن بعد دستورات رو توی خصوصیت keypress فرم بنویس
موفق باشی

alicam
سه شنبه 04 مرداد 1390, 02:03 صبح
دو تا مشکل اساسی داره برنامه ات. یکی اینکه چرا برای تکس باکس نوشتی ؟ باید برای فرم یه keydown بنویسی.
دوم اینکه شما اصلا کاری نداری به کد های اسکی
این کد رو ببین :

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
e.KeyCode = Keys.A;
}

hunter_ara
سه شنبه 04 مرداد 1390, 08:24 صبح
دوست عزيز mehrdad1261 (http://barnamenevis.org/member.php?47640-mehrdad1261) من برنامه نويس ‍C++ هستم بنابر اين با كد هاي اسكي اشنا هستم و نيازي به ديدن اونا ندارم. من keychar يا keycode خواستم كه ديگه نيازي بهشون نيست چون خودم يه برنامه براش نوشتم: 72924
ضمنا C# زبان جديد تر و سطح بالا تر از C++ هست و دليل نميشه چون با اسكي كدها خوب بلدم كار كنم بيخيال keycode كه خود C# در اختيارم گذاشته بشم يا چون اسمبلي بلدم اسمبلي بنويسم.
در هر صورت ممنون از مثالت. :لبخندساده:


بچه خوب باید دستورات رو تو رویداد keydown یا keyup یا keypress فرم بنویسی نه تو textbox
دوست عزيز اين كار رو نميكنم چون اگر تو formEvent بنويسم بايد براي تغييراتش تو تكست باكس اضافه كد بنويسم. ممنون.


سلام
ابتدا خصوصیت keypreview ی فرم رو true کن بعد دستورات رو توی خصوصیت keypress فرم بنویس
موفق باشی

ميشه يكم درباره ي keypreview توضيح بدي كه چيكار ميكنه؟؟؟
ممنون


دو تا مشکل اساسی داره برنامه ات. یکی اینکه چرا برای تکس باکس نوشتی ؟ باید برای فرم یه keydown بنویسی.
دوم اینکه شما اصلا کاری نداری به کد های اسکی.


دوست عزيز اين كار رو نميكنم چون اگر تو formEvent بنويسم بايد براي تغييراتش تو تكست باكس اضافه كد بنويسم.
ممنون.


الان اگر كسي ميدونه بهم بگه چطوري كليد هاي تركيبي مثل ‍ Ctrl + C يا Shift + 8 كه + ميشه رو هندل كنم

k_ce_esf
سه شنبه 04 مرداد 1390, 10:13 صبح
خصوصیت keypreview ی فرم رو باید true کرد تا کدهایی که برای کلید های کیبورد نوشتیم،بتونن کارشون را انجام بدن،به عنوان مثال اگه بخواییم یه فرم را بتونیم با دکمه Esc هم ببندیم به همچین کدی نیاز داریم:


privatevoid frmMain_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
this.Close();
}

اگه این خاصیت در فرم true نباشه،این کد عمل نمیکنه.

در مورد کلید های ترکیبی هم کاری که من میکنم و بم جواب میده یه چیزی مثل مثال زیره :


privatevoid txt1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.Control == true) && (e.KeyCode == Keys.C))
{



}
}


دلیل خاصی نیست که حتما از کدهای اسکی استفاده کنید!

hunter_ara
سه شنبه 04 مرداد 1390, 10:35 صبح
خصوصیت keypreview ی فرم رو باید true کرد تا کدهایی که برای کلید های کیبورد نوشتیم،بتونن کارشون را انجام بدن،به عنوان مثال اگه بخواییم یه فرم را بتونیم با دکمه Esc هم ببندیم به همچین کدی نیاز داریم:


privatevoid frmMain_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
this.Close();
}

اگه این خاصیت در فرم true نباشه،این کد عمل نمیکنه.

در مورد کلید های ترکیبی هم کاری که من میکنم و بم جواب میده یه چیزی مثل مثال زیره :


privatevoid txt1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.Control == true) && (e.KeyCode == Keys.C))
{



}
}


دلیل خاصی نیست که حتما از کدهای اسکی استفاده کنید!

كدي كه نوشتي براي Ctrl + C هست يا براي Shift + C؟؟؟

من هم به Ctrl و هم به Shift نياز دارم.

حالا راهي نداره كه رو تكست باكس بنويسم؟؟؟؟

k_ce_esf
سه شنبه 04 مرداد 1390, 10:51 صبح
كدي كه نوشتي براي Ctrl + C هست يا براي Shift + C؟؟؟

من هم به Ctrl و هم به Shift نياز دارم.

حالا راهي نداره كه رو تكست باكس بنويسم؟؟؟؟

منظور این کد اینه که اگه کلید Ctrl و C با هم فشار داده بشه،کدهای داخل بلوک if اجرا بشه.
برای Shift+C هم میتونید مشابه کد های قبلی عمل کنید:
if ((e.Shift== true) && (e.KeyCode == Keys.C))

منظورتون از سوال دوم را متوجه نشدم!من هم این کد ها را در رویداد KeyDown مربوط به TextBox نوشتم!

hunter_ara
سه شنبه 04 مرداد 1390, 10:59 صبح
مرسي خيلي لطف كردي :تشویق: :لبخندساده: