PDA

View Full Version : حرفه ای: مشکل با AutoComplete



saviorperi
پنج شنبه 25 خرداد 1391, 17:48 عصر
سلام
من تو برنامم AutoCompleteCustomSource مربوط به یک textBox رو به هنگام زدن F1 و با توجه به متن داخل textBox مقدار دهی میکنم، ولی مشکل اینجاست که بعدش تا وقتی کاربر حرفی رو تایپ و یا پاک نکرده باشه لیست suggest مربوط به textBox نمایش داده نمیشه، تغییر متن textBox از درون خود برنامه نیز فایده ای نداشت، چطور میتونم کاری کنم که بعد از مقدار دهی AutoCompleteCustomSource، لیست suggest ها نیز نمایش داده بشه ؟

همین کار رو برای comboBox نیز کردم، البته تو این خاصیت items رو مقدار دهی میکنم و autoCompleteSource نیز روی ListItems میزارم، ولی باز نتونستم کاری کنم که بعد از مقدار دهی خاصیت items، اعضای comboBox به صورت خودکار نمایش داده بشن.

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

Mahmoud.Afrad
پنج شنبه 25 خرداد 1391, 20:44 عصر
شما باید (فقط) یک بار مثلا در لودفرم تمام آیتم های ممکن را به تکست باکس و یا کمبو بایند کنید و بعد فقط خاصیت suggest رو فعال کنید تا آیتمهای مشابه نشان داده بشه(توجه کنید که نباید مثلا در تکست چنچ این کار انجام بشه). فلسفه اش هم اینه که تا حرفی تایپ نشه آیتمهای مشابه نشان داده نمیشه.
مثال برای تکست باکس
cmd.CommandText = "select name from tbl";
da = new SqlDataAdapter(cmd.CommandText, con);
da.Fill(dt);
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
foreach (DataRow dtr in dt.Rows)
textBox1.AutoCompleteCustomSource.Add(Convert.ToSt ring(dtr["name"]));
dt.Dispose();برای کمبوباکس هم باید autocompletemode روی suggest و autocompletesource روی listitems تنظیم شود.

saviorperi
پنج شنبه 25 خرداد 1391, 23:45 عصر
شما باید (فقط) یک بار مثلا در لودفرم تمام آیتم های ممکن را به تکست باکس و یا کمبو بایند کنید و بعد فقط خاصیت suggest رو فعال کنید تا آیتمهای مشابه نشان داده بشه(توجه کنید که نباید مثلا در تکست چنچ این کار انجام بشه). فلسفه اش هم اینه که تا حرفی تایپ نشه آیتمهای مشابه نشان داده نمیشه.
مثال برای تکست باکس
cmd.CommandText = "select name from tbl";
da = new SqlDataAdapter(cmd.CommandText, con);
da.Fill(dt);
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
foreach (DataRow dtr in dt.Rows)
textBox1.AutoCompleteCustomSource.Add(Convert.ToSt ring(dtr["name"]));
dt.Dispose();برای کمبوباکس هم باید autocompletemode روی suggest و autocompletesource روی listitems تنظیم شود.

دوست عزیز ممنون، ولی من اینارو میدونم، مشکل اینجاست که ممکنه چندین هزار آیتم وجود داشته باشه، load کردن همشون باعش میشه سرعت باز شدن فرم پایین بیاد، من کاری کرده بودم که مثلا کاربر بعد تایپ چند حرف در صورت تمایل داشتن با زدن دکمه ای و با توجه به حروف تایپ شده AutoCompleteCustomSource مقدار دهی شده و suggest ها نمایش داده بشن (اینجوری هم سرعت load فرم پایین نمیاد و هم همۀ سطر های جدول select نمیشن و در نتیجه سرعت مقدار دهی AutoCompleteCustomSource هم بیشتر میشه) ولی مشکلم اینه که وقتی کاربر دکمۀ مورد نظر رو زد، همون موقع suggest ها نمایش داده نمیشن، باید یه حرف تایپ و یا حذف بشه تا نشون داده بشن، من میخوام بعد زدن دکمه، suggest ها به صورت خودکار نمایش داده بشن.

Mahmoud.Afrad
جمعه 26 خرداد 1391, 10:05 صبح
اگر از کمبوباکس استفاده کنید بعد از مقداردهی میتونید با دستور زیر آیتمها را نمایش دهید
comboBox1.DroppedDown = true;

saviorperi
جمعه 26 خرداد 1391, 11:20 صبح
اگر از کمبوباکس استفاده کنید بعد از مقداردهی میتونید با دستور زیر آیتمها را نمایش دهید
comboBox1.DroppedDown = true;

ممنون دوست عزیز حل شد، من همش دنبال متدی مثل showList میگشتم که اونم نبود، به این فکر نکرده بودم

Mertez
یک شنبه 25 تیر 1391, 10:38 صبح
من کد مربوطه رو تو خاصیت TextChanged نوشتم ولی بازم یه مشکل دارم اونم اینه که بعد از تایپ یه کلمه یا پاک کردنش تکست باکس به لرزه میفته !!!!!
یه بار امتحان کنین ضرر نمی کنین

saviorperi
یک شنبه 25 تیر 1391, 19:42 عصر
من کد مربوطه رو تو خاصیت TextChanged نوشتم ولی بازم یه مشکل دارم اونم اینه که بعد از تایپ یه کلمه یا پاک کردنش تکست باکس به لرزه میفته !!!!!
یه بار امتحان کنین ضرر نمی کنین

فکر کنم اینجوری برنامه تو یک حلقه میفته و پی دی پی AutoCompleteCustomSource رو پر میکنه. کلا خوب نیست که این کار رو تو خاصیت TextChanged انجام بدید، چون مثلا اگر تعداد رکوردهای پایگاه دادت زیاد باشه و عملیات فوق رو تو thread اصلی برنامت انجام بدی، اونوقت ممکنه با تایپ کردن هر حرف برنامت برای چند لحظه هنگ کنه.

Mertez
چهارشنبه 28 تیر 1391, 00:54 صبح
من الان نیاز شدید به این کار دارم یعنی یکی نیست منو راهنمایی کنه
اگه از دوستان کسی می دونه منو راهنمایی کنه ممنون