בס"ד
טוב. נראה לי שהגעתי אל המנוחה ואל הנחלה.
העניין הוא שהתערבבו לי 2 בעיות שונות שגרמו לתוצאה דומה - בלי קשר בין אחת לשניה, ובשילוב עם הסיבוב הכפול של האירוע KeyDown.
אם באמת מקלידים משהו כשהרשימה פתוחה ועוזבים פוקוס עם רשימה פתוחה - זה מוחק את הטקסט. (@דוד ל.ט., לא משנה באיזה מצב השלמה, גם ב-none הוא מוחק לך את מה שכתבת, למרות שלא ביקשת ממנו "טובות" שישלים לך).
אבל, הטעות שלי שבלבלה אותי היתה,
אני רציתי תמיד לדחוף את השאילתא החדשה לראש רשימת השאילתות בקומבובוקס (insert לאינדקס 0, במקום add לסוף הרשימה).
בנוסף, הגדרתי שאם השאילתא נשאלה בעבר והיא קיימת ברשימה, שקודם היא תמחק מהמיקום הישן, ומשם ימשיך כרגיל עם ה insert לאינדקס 0.
מה שפיספסתי בשלב המחיקה, שמכיון שהשאילתא ברשימה והטסקט בתיבה זהים, ברגע שמחקתי מהרשימה זה איפס לי גם את הטקסט בתיבה,
ואז השורה הבאה שעושה insert הכניסה מחרוזת ריקה.
וכדי להוסיף שמן למדורה,
מכיון שהאירוע KeyDown שמבצע את הפעולות האלו - עושה משום מה שני סיבובים, וכנ"ל,
כל שאילתא שהקלדתי, הסיבוב הראשון היה מכניס אותה לרשימה,
והסיבוב השני היה מוצא אותה ברשימה ו"מוחק" אותה מהרשימה ומהתיבה, ונשארתי עם מחרוזת ריקה...
עכשיו הכל בא על מקומו בשלום:
Dim current As String = cb.Text
If cb.Items.Contains(current) Then cb.Items.Remove(current)
cb.Items.Insert(0, current)
cb.SelectedIndex = 0
ושוב תודה רבה ל-@דוד ל.ט הצדיק!
פורסם במקור בפורום CODE613 ב28/11/2017 23:13 (+02:00)