PDA

View Full Version : چک کردن فشرده شدن کلید shift+(



sabz12
چهارشنبه 07 مرداد 1394, 20:34 عصر
با سلام امیدوارم سلامت باشید
من می خواهم وقتی کلید shift+ پرانتز باز یا shift+کروشه باز زده میشه متدی را صدا کنم ولی پیدا نکردم

if(e.Shift&&e.KeyCode == Keys.Parenthesis)
{
صدا کردن متد
}

behzadkhan
چهارشنبه 07 مرداد 1394, 21:19 عصر
با سلام

دوست عزیز

کد زیر را به فرمی که می خواهید این کار انجام شود اضافه کنید:


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// 65755 = Shift + {
// 65593 = Shift + (
if ((int)keyData == 65755 || (int)keyData == 65593)
{
MessageBox.Show("bingo");
return true;
}

return base.ProcessCmdKey(ref msg, keyData);
}


با تشکر

sabz12
پنج شنبه 08 مرداد 1394, 11:10 صبح
اول فكر كردم بايد اين متد را تو رويداد KeyDown صدا كنم ولي اين طور نيست به تنهايي اين متد كار ميكنه !!!تو منابع اموزشي ،كدوم قسمت را مطالعه كنم تا درك بهتري در مورد اين كد داشته باشم ؟
يك سوال ديگه اين عداد را از كجا اورديد مثلا ) ميشه 40 اسكي كه وقتي جاي عدد شما ميزارم بازم درست كار ميكنه؟
و اين كد يك مشكلي داره كه اگر رفع نشه نميتوم استفادش كنم و اون هم اين كه بازدن
shift+ پرانتز اين كاراكتر پرانتز ) در رچباكس نوشته نميشه.اگر true را false كنم بازم ) را نمي نويسه و در رچباكس عدد 9 را مينويسه؟نميدونم چطوري حلش كنم.
از توجه اساتيد خيلي ممنونم كه در بالابردن دانش دوستان تلاش مي كنن .سپاس فراوان

behzadkhan
پنج شنبه 08 مرداد 1394, 12:54 عصر
با سلام

دوست عزیز

در این کد هم مشکل تایپ نشدن کارکتر مورد نظر حل می شود

و

هم کدی که از ترکیب کلیدها بدست می آید در یک تکست باکس نمایشد داده می شود

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

فقط یادت باشه که یک تکست باکس جدید درست کنی.


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
TextBox1.Text = ((int)keyData).ToString();
// 65755 = Shift + {
// 65593 = Shift + (
if ((int)keyData == 65755 || (int)keyData == 65593)
{
MessageBox.Show("bingo");
}


return base.ProcessCmdKey(ref msg, keyData);
}


با تشکر

sabz12
پنج شنبه 08 مرداد 1394, 15:21 عصر
دوستان راه ديگري نيست كه احتياج به ساخت تكسباكس جديد نباشه؟؟

behzadkhan
پنج شنبه 08 مرداد 1394, 16:09 عصر
دوستان راه ديگري نيست كه احتياج به ساخت تكسباكس جديد نباشه؟؟

با سلام

دوست عزیز

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

قرار بر این هست که مثلا شما می خواهید کد Ctrl + T را بدست بیاورید بعد از اینکه اونو بدست آوردید دیگه نیازی به تکست باکس نیست.

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

مسلما راه های دیگری هم وجود دارد.

با تشکر

sabz12
پنج شنبه 08 مرداد 1394, 16:35 عصر
با تشكر
من مي خواهم در رچباكس يك متدي را صدا كنم با shift+( اگر نظري داريد دريغ نكنيد .مرسي

behzadkhan
پنج شنبه 08 مرداد 1394, 16:50 عصر
با تشكر
من مي خواهم در رچباكس يك متدي را صدا كنم با shift+(

اگر نظري داريد دريغ نكنيد .مرسي

با سلام

دوست عزیز


لطفا کد زیر را بررسی کنید:


private void MyMethod()
{
// این جا کد مورد نظر تان را که می خواهد بعد از فشردن کلید اتفاق بیفتد را بنویسید
MessageBox.Show("bingo");
}


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
// 65593 = Shift + (


// این شرط بررسی کلید ترکیبی
// Shift + (
// را انجام می دهد
// همچنین اکنون تشخیص فشرده شدن محدود شده
// و فقط اگر کنترل درون یک
// RichTextBox
// باشد متد ما را نمایش می دهد
if ((int)keyData == 65593 &&
this.ActiveControl is RichTextBox)
{
MyMethod();
return true;
}


return base.ProcessCmdKey(ref msg, keyData);
}


امیدوارم مشکلتان حل شده باشد.

با تشکر

sabz12
پنج شنبه 08 مرداد 1394, 19:19 عصر
این کد اخری نمی دونم چرا تو شرط نمیره اصلا
ایا راه دیگری نیست
خودم این طوری درستش کردم از توجه شما دوست عزیز هم بسیار ممنونم

if ((int)e.KeyData == 65593) {
MessageBox.Show("bingo");
}

ناامید
پنج شنبه 08 مرداد 1394, 20:31 عصر
سلام.

private void Message()
{
MessageBox.Show("Shift + ( OR Shift + {");
}
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Shift && (e.KeyCode == Keys.D9 || e.KeyCode == Keys.OemOpenBrackets))
{
this.Message();
}
}

منبع بخشی از کد stackoverflow.com