PDA

View Full Version : سوال: از داخل رویداد چطوری میشه رویداد دیگه رو فعال کرد؟



دلتنگ اسمان
چهارشنبه 08 آبان 1392, 16:34 عصر
طبق کد زیر بعد ازانجام این کدها همین رویداد برای لیست باکس فعال بشه اما بشرطی که KeyCode = Keys.Downباشه. چون با این حالت e.KeyCode=null میشه. راه دیگه ای هم بلد نیستم. ممنون

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down)
{
string[] st = new string[] { "O", "M", "E", "N", "ME", "MN", "EN", "!M", "!E", "!N", "!ME", "!MN", "!EN" };
listBox1.DataSource = st;

listBox1.Left = textBox1.Left;
listBox1.Top = textBox1.Bottom;
listBox1.TabStop = false;
this.Size = new Size(30, 200);

listBox1.Show();

listBox1.Size = new Size(27, 180);
listBox1.Focus();
bl = true;

listBox1_KeyDown(null, null);
}
}

Mahmoud.Afrad
چهارشنبه 08 آبان 1392, 17:09 عصر
چون دو رویداد از یک جنس هستند میتونی به جای null دوم e رو قرار بدی.

دلتنگ اسمان
چهارشنبه 08 آبان 1392, 17:25 عصر
چون دو رویداد از یک جنس هستند میتونی به جای null دوم e رو قرار بدی.
اما محتوای key چیز دیگه ای.112389

Mahmoud.Afrad
چهارشنبه 08 آبان 1392, 17:34 عصر
زویداد دیگر رو برای چی میخواهید فراخوانی کنید؟

دلتنگ اسمان
چهارشنبه 08 آبان 1392, 17:50 عصر
زویداد دیگر رو برای چی میخواهید فراخوانی کنید؟
طبق شکل بالا (دومی) خود شما راهنمایی کردید و مشکل من حل شد.
توی این لینک (http://barnamenevis.org/showthread.php?425625-%D9%85%DA%AF%D8%B1-leave-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B1%DA%A9-%D8%B4%DB%8C-%D9%86%DB%8C%D8%B3%D8%AA%D8%9F)
اما حالا میخوام وقتی لیست باکس باز شد و لیست ها رو نشون داد با کلیدهای جهت دار(بالا و پایین) روی ایتمهای لیست باکس حرکت کنه.

Mahmoud.Afrad
چهارشنبه 08 آبان 1392, 18:25 عصر
همین الان هم این گار انجام میشه بدون نیاز به listBox1_KeyDown
فوکوس رو به لیست باکس میدید پس کلیدهای بالا و پایین کار میکنند.

دلتنگ اسمان
چهارشنبه 08 آبان 1392, 18:35 عصر
بله. فرمایش شما درسته اما وقتی که رو تکس باکس کلیک کنیم و بعد با کلیدها حرکت کنیم. اما اگه با کلید TAB رو تکس باکس رفته باشیم اونوقت دیگه کار نمیکنه.البته کد اخرین خط رو اضافه کردم که فقط وقتی کلید پایین میره کار میکنه اما بالا برنمیگرده.

if (e.KeyCode == Keys.Down)
{
listBox1.Show();
listBox1.Size = new Size(27, 180);
listBox1.Focus();
listBox1.Select();
bl = true;
SendKeys.SendWait("{DOWN}");
}

roolinjax
چهارشنبه 08 آبان 1392, 19:21 عصر
سلام من نمیدونم دقیقا چی میخواید
ولی خوب چیزی که مشخصه اینه که شما توی شرطی که میگه اگر کلید پایین زده شده کلید Down رو ارسال کنید
خوب معلومه بقیه کلیدها عمل نمیکنه
در واقع شما باید برای کلید بالا هم همین کد را بنویسید و این بار Up رو ارسال کنید

دلتنگ اسمان
چهارشنبه 08 آبان 1392, 19:51 عصر
سلام من نمیدونم دقیقا چی میخواید
ولی خوب چیزی که مشخصه اینه که شما توی شرطی که میگه اگر کلید پایین زده شده کلید Down رو ارسال کنید
خوب معلومه بقیه کلیدها عمل نمیکنه
در واقع شما باید برای کلید بالا هم همین کد را بنویسید و این بار Up رو ارسال کنید
مشکل من هم همینه که این UP رو کجا بنویسم که عمل کنه.

roolinjax
یک شنبه 12 آبان 1392, 19:04 عصر
این قبلی رو کجا نوشتین؟ Up رو هم همونجا جدا بنویسید
دو تا If که به هیچ ارتباطی ندارن ( زیر هم بنویسید یا میشه else if بنویسید)

Mahmoud.Afrad
دوشنبه 13 آبان 1392, 00:18 صبح
اگر میخواهید به محض زدن کلیدهای جهت نما تغییر در آیتم سلکت شده هم داشته باشید ، باید یه کمی به خودتون زحمت بدید و کدشو بنویسید.

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down)
{
listBox1.Show();
listBox1.Focus();
if (listBox1.Items.Count > 0 && listBox1.SelectedIndex < listBox1.Items.Count - 1)
{
listBox1.SelectedIndex += 1;
}
}
else if (e.KeyCode == Keys.Up)
{
listBox1.Show();
listBox1.Focus();
if (listBox1.Items.Count > 0 && listBox1.SelectedIndex > 0)
{
listBox1.SelectedIndex -= 1;
}
}
}