PDA

View Full Version : انتخاب آیتم پیدا شده در AutoComplate توسط کلیدهای جهت نما



sg.programmer
شنبه 10 تیر 1396, 18:46 عصر
چطور میشه از AutoComplate در سی شارپ استفاده کرد؟ من از این روش استفاده میکنم
http://www.c-sharpcorner.com/blogs/autocomplete-combobox-in-visual-c-sharp-2010
یکسری مشکلات دارم
1) حتما حروف اولش در سرچ باید باشه اگه حروف اولش در سرچ نباشه اون آیتم پیدا نمیشه؟ چرا؟ بصورت %Like% پیدا نمیکنه؟
2) بعد ازاینکه مقداری پیدا شد حتما باید با ماوس بر روی آن کلیک کردتا انتخاب شود با کلید های جهت نما روی مقادر پیدا شده رفته و کلید اینتر زده بشه اون تکست خالی میشه؟

3) من یکجای با ادغام (لیست باکس+تکس باکس) دیدم ایا این روش را کسی میدونه چطوری هست؟

shahryari
یک شنبه 11 تیر 1396, 09:58 صبح
با AutoComplate به نتیجه نمیرسی،
3
) من یکجای با ادغام (لیست باکس+تکس باکس) دیدم ایا این روش را کسی میدونه چطوری هست؟

این روش خوبه حتی من با تکست باکس و دیتاگرید اینکارو کردم

145665

اینم یه نمونه با لیست باکس

145666

sg.programmer
یک شنبه 11 تیر 1396, 14:49 عصر
با AutoComplate به نتیجه نمیرسی،
3

این روش خوبه حتی من با تکست باکس و دیتاگرید اینکارو کردم

145665

اینم یه نمونه با لیست باکس

145666

اگه ممکنه بگید چطور با لیست باکس اینکار را انجام باید بدم؟
تشکر

shahryari
یک شنبه 11 تیر 1396, 17:44 عصر
مانند شکل یه لیست باکس بنداز زیر تکست ، لیست باکس رو پیشفرض hide کن
دیتا تیبلت رو بایند که لیست ویو
در رویداد تکست چنج تکست باکس جستجو رو بزن، و شرط بزار اکه دیتا تیبل خالی نبود، لیست باکس show بشه
در رویداد keyDown تکست باکس وقتی اینتر خورد، و لیست باکس هم hide نبود، روی لیست باکس فکوس بشه
در رویداد keyDown لیست باکس وقتی اینتر خورد و همچنین رویداد دابل کلیک ، متن انتخاب شده لیست باکس رو بگیر (هرکاری دلت میخاد بکن) و لیست باکس رو hideکن

SqlConnection conn;
SqlDataAdapter da;
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Hide();
conn = new SqlConnection("server=.;database=test ; trusted_connection=true;");
da = new SqlDataAdapter("",conn);
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
string sql = "select * from tbl1 where col1 like '%{0}%'";
sql = string.Format(sql, textBox1.Text);

da.SelectCommand.CommandText = sql;

DataTable dt = new DataTable();
da.Fill(dt);
listBox1.DisplayMember = "col1";
listBox1.DataSource = dt;

if (dt.Rows.Count > 0)
{
listBox1.Show();
}
else
{
listBox1.Hide();
}

}

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

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

private void listBox1_DoubleClick(object sender, EventArgs e)
{
textBox1.Text = listBox1.Text;
listBox1.Hide();
}

در کدهای بالا به محض اینکه دوتا اینتر بزنی نتیجه کار رو میبینی

sg.programmer
یک شنبه 11 تیر 1396, 19:14 عصر
تشکر مهندس عالی بود
من این تیکه کد را به برنامه تون اضافه کردم که کلیدهای جهت نما هم فوکس انجام بشه
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode==Keys.Down|| e.KeyCode==Keys.Up)
{
if (listBox1.Visible)
{
listBox1.Focus();
}
}
}

shahryari
یک شنبه 11 تیر 1396, 19:51 عصر
تشکر مهندس عالی بود
من این تیکه کد را به برنامه تون اضافه کردم که کلیدهای جهت نما هم فوکس انجام بشه
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode==Keys.Down|| e.KeyCode==Keys.Up)
{
if (listBox1.Visible)
{
listBox1.Focus();
}
}
}

البته up اینجا به درد نمیخوره
میتونی یه کد جدا هم واسه Keys.Escape بنویسی، در صورت انصراف کاربر، لیست باکس hide بشه و امثالهم..
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Down )
{
if (listBox1.Visible)
{
listBox1.Focus();
}
}
if ( e.KeyCode == Keys.Escape )
{
listBox1.Hide();
}
}