PDA

View Full Version : سوال: مگر leave رویداد ترک شی نیست؟



دلتنگ اسمان
دوشنبه 06 آبان 1392, 13:39 عصر
سلام. ببخشید یه سوال داشتم
میخوام بعد از نمایش اعضای لیست باکس (چه یه ایتمی رو انتخاب کنم و چه انتخاب نکنم ) در هر دو صورت لیست باکس مخفی بشه. اما متاسفانه نمیتونم کد صحیحش رو بنویسم.

veniz2008
دوشنبه 06 آبان 1392, 15:47 عصر
سلام. ببخشید یه سوال داشتم
میخوام بعد از نمایش اعضای لیست باکس (چه یه ایتمی رو انتخاب کنم و چه انتخاب نکنم ) در هر دو صورت لیست باکس مخفی بشه. اما متاسفانه نمیتونم کد صحیحش رو بنویسم.
سلام.
این رویداد زمانی فعال میشه که شی شما (در اینجا لیست باکس) فوکوس از روی اون برداشته بشه (حالت اکتیو و انتخاب خودش رو از دست بده).
مثلا توی فرم لود اینو بنویسید :

private void Form1_Load(object sender, EventArgs e)
{
listBox1.Items.Add(0);
listBox1.Items.Add(1);
}
حالا درون رویداد Leave مربوط به لیست باکس کد زیر رو بنویسید :

private void listBox1_Leave(object sender, EventArgs e)
{
listBox1.Visible = false;
}
کافیه فوکوس رو از روی لیست باکس بردارید (مثلا با موس یک شی دیگه رو انتخاب کنید یا کلید tab رو فشار بدید و ...).
موفق باشید.

دلتنگ اسمان
دوشنبه 06 آبان 1392, 16:48 عصر
ممنون از پاسختون.
بهتره مشکلم رو کامل بگم. یه تکس باکس دارم و یه لیست باکس(زیر هم گذاشتم).وقتی روی تکس باکس کلیک میکنم لیست باکس باز میشه و لیستی رو نشون میده. حالا میخوام وقتی کاربر چه از اون لیست چیزی رو انتخاب کنه یا انتخاب نکنه لیست باکس مخفی بشه. و فقط تکس باکس رو نشون بده .چیزی شبیه به کمبوباکس.در حالتی که انتخاب کنه مشکلی ندارم . مشکل من وقتیه که چیزی رو انتخاب نمیکنه .

veniz2008
دوشنبه 06 آبان 1392, 17:28 عصر
چند بار توضیحتون رو خوندم ولی متوجه نشدم.
اگر واستون مهم نیست چه انتخاب کرده باشه چه انتخاب نکرده باشه و قصد مخفی کردن دارید خوب راحت visible رو false کنید.(یا تو رویداد leave یا فرضا توی دکمه یا ...).
زمانیکه هیچ آیتمی از لیست باکس انتخاب نمیشه، خصوصیت selectedindex برابر 1- هست. شاید این مورد بهتون کمک کنه. مثلا با یه if چک کنید :

if (listBox1.SelectedIndex == -1)
{
listBox1.Visible = false;
}

دلتنگ اسمان
دوشنبه 06 آبان 1392, 20:44 عصر
هر کاری میکنم نمیتونم درست جواب بگیرم.
این کل کدهای منه:

string[] st = new string[] { "O", "M", "E", "N", "ME", "MN", "EN", "!M", "!E", "!N", "!ME", "!MN", "!EN" };
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox1.Text = listBox1.Text;
listBox1.Visible = false;

}

private void textBox1_Enter(object sender, EventArgs e)
{
listBox1.Visible = true;
listBox1.Size = new Size(27, 190);
listBox1.Items.Clear();
for (int t = 0; t < st.Length; t++)
listBox1.Items.Add(st[t]);
}

private void textBox1_Leave(object sender, EventArgs e)
{

if (listBox1.SelectedIndex == -1) listBox1.Visible = false;
}

veniz2008
دوشنبه 06 آبان 1392, 22:16 عصر
کدهاتون رو تست کردم هیچ ایرادی نداره و به درستی کار میکنن(چه متنی داخل تکست باکس وارد بشه چه نشه، به محض خارج شدن از تکست باکس، listbox هم مخفی میشه).
پروژه رو یکبار از نو build کنید (در پنجره solution بر روی نام پروژه کلیک راست کنید و گزینه Rebuild رو بزنید). اگر نتیجه نگرفتید در یک فرم دیگه همین کارها رو انجام بدید چون کدهایی که گذاشتید و تست کردم هیچ ایرادی ندارند.
راستی در رویداد textbox_leave هم دیگه نیازی به چک کردن selectedindex نیست و مستقیما لیست باکس رو مخفی کنید.
موفق باشید.

دلتنگ اسمان
سه شنبه 07 آبان 1392, 14:07 عصر
ممنون
من یه شیئی مثل کامبوباکس میخوام که دو شرط داشته باشه 1:زبانه نداشته باشه. 2-با کلیک روی باکسش یه لیست باز کنه. کمبوباکس زبانه داره و حتما هم باید روی زبانه کلیک کنی تا لیست رو نشون بده اگه روی قسمت متنیش کلیک کنی لیست باز نمیشه. با راهنمایی یکی از همین دوستان از یه تکس باکس و یه لیست باکس استفاده میکنم. مثل شکل زیر.موقع لود فرم لیست باکس مخفیه. وقتی روی تکس باکس کلیک میکنی لیست باکس نشون داده میشه و لیستس رو نشون میده. حالا ممکنه کاربر یه ایتمی رو از لیسا انتخاب کنه که در این صورت در تکس باکس نشون داده میشه و لیست مخفی میشه. و ممکنه کاربر از لیست چیزی رو انتخاب نکنه و شی دیگه رو کلیک کنه که در این صورت هم باید لیست مخفی بشه.(حالتی که مشکل دارم).112349

Mahmoud.Afrad
سه شنبه 07 آبان 1392, 14:50 عصر
به این کد نگاه کن:

private void FrmMain_Load(object sender, EventArgs e)
{
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;
}

private void textBox1_MouseClick(object sender, MouseEventArgs e)
{
listBox1.Show();
listBox1.Focus();
}

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Down)
{
listBox1.Show();
listBox1.Focus();
}
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex != -1)
{
textBox1.Text = listBox1.SelectedItem.ToString();
}
}

private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
listBox1.Hide();
textBox1.Focus();
}

private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
{
listBox1.Hide();
textBox1.Focus();
}
}

private void listBox1_Leave(object sender, EventArgs e)
{
listBox1.Hide();
}

دلتنگ اسمان
سه شنبه 07 آبان 1392, 15:21 عصر
جناب Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud.Afrad) ممنون. به نتیجه نزدیک شدم. فقط یه مشکل جزئی داره. اگه جای خالی فرم کلیک کنم لیست بسته نمیشه.