דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. קריאת שורת הטקסט ב-ComboBox במהלך הקלדה - כשהרשימה פתוחה

קריאת שורת הטקסט ב-ComboBox במהלך הקלדה - כשהרשימה פתוחה

מתוזמן נעוץ נעול הועבר ארכיון code613m
7 פוסטים 2 כותבים 645 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • איש אחדא מנותק
    איש אחדא מנותק
    איש אחד
    כתב ב נערך לאחרונה על ידי
    #1

    בס"ד

    שאלה טיפשית וקטנה (קטנה במהות, לא בניסוח :mrgreen: )

    יש לי קומבובוקס ב- VB.NET WinForm. נקרא לו cb.
    אני מעוניין "לצוד" את ההקשות בתיבה, בכדי לבצע סדרת פעולות לאחר הקשה על אנטר (הסברים יבואו).
    עיקר הפעולות הן על הטקסט שנרשם בשורת הטקסט של הקומבובוקס (שבסיום הקלדתו הוקש האנטר).
    בעיקרון אני יכול לקבל את הטקסט באמצעות הפרופרטי: cb.text , ובדומה ל- TextBox.

    העניין הוא, שאם אני רוצה לקרוא את הטקסט כשחלונית ההצעות פתוחה - הטקסט לא שמור בשום מקום. אבל אני צריך אותו! :roll:
    אז כמובן שאני יכול ליצור משתנה סטרינג משלי, וללכוד כל הקשה ולהוסיף לסטרינג את האות שהוקשה או למחוק לפי העניין.
    אבל זה נראה לי דרך של "אויבער חוכם", שאולי נכונה מעשית אבל וודאי לא תקנית. (ומסתמא יצוצו גם הפתעות, כגון בשינוי באמצע המחרוזת ועוד).

    ובכן, חברי הפורום הנכבדים, תואילו להורות לי את דרך המלך?
    תודה רבה רבה!

    (הסבר למעוניינים:
    בתוכנה המהוללת מאתמול, של תקשור עם מסדי MySQL,
    הוספתי אופצייה של כתיבת והרצת שאילתות SQL ידניות,
    כשאת השאילתא אני כותב בשורת הטקסט של הקומבובוקס,
    ובלחיצה על אנטר לאחר כתיבת השאילתא, מעבר להרצת השאילתא כמובן,
    הוא גם מוסיף את השאילתא לרשימת הצעות הקומבובוקס, בשביל לחסוך לכתוב ידנית את אותה השאילתא שוב ושוב.
    העניין הוא, שברגע שרשימת ההצעות נפתחה, למשל כי כתבתי בעבר שאילתא שמתחילה דומה,
    הוא פשוט מתעלם באלגנטיות מהטקסט שכתוב בשורת הקומבובוקס,
    וכשאני לוחץ אנטר בסיום כתיבת השאילתא, הוא פשוט מריץ את השאילתא: "", וגם מוסיף אותה לרשימת הפריטים בקומבובוקס... :lol: )

    תוכנה להתממשקות עם MySQL.jpg

    פורסם במקור בפורום CODE613 ב28/11/2017 15:41 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      א. כל הכבוד, נראה שאתה שוחה בחומר כמו דג במים
      ב. התופעה לא מובנת ומטסט קצר שערכתי לא גם לא מתרחשת אצלי.
      גם בעת שהתיבה פתוחה כל הקשה משנה את הערך Text של הקומבובוקס.
      נסה נא טסט בפרוייקט קטן כדי לבודד את הבעיה.
      כמו"כ יש לי חשד קל בקשר לרגע לחיצת האנטר, אם איזה אירוע לכדת את זמן זה? זה מה שמריץ את השאילתה?

      פורסם במקור בפורום CODE613 ב28/11/2017 16:20 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • איש אחדא מנותק
        איש אחדא מנותק
        איש אחד
        כתב ב נערך לאחרונה על ידי
        #3

        בס"ד

        **א.**במים רדודים :lol:

        **ב.**מוזר x2.
        כי לדעתי כן התחלתי לעלות על הבעייה (אחרי פרסום השאלה, ולפני ריצה למנחה 😉 )
        גיליתי שאם אני כותב טקסט עם "מגירה פתוחה", ברגע שהקומבובוקס מאבד פוקוס - המגירה נסגרת והטקסט נמחק!

        ובשבילך :smile: פתחתי פרויקט חדש ריק, הוספתי קומבובוקס, פתחתי מגירה והקלדתי, לחצתי Alt-Tab לקפיצה לחלון אחר, חזרתי, ואין טקסט...
        המשכתי בסקרנות ל Word, פתחתי את רשימת הגופנים, הקלדתי ידנית שם גופן שלא קיים, Alt-Tab הלוך וחזור, ו...
        המגירה סגורה ואזהרה מ Word שהגופן "שבחרתי" לא קיים.
        דהיינו גם ב Word המגירה נסגרה אוטומטית, אלא שב-Word יש התערבות בשלב סגירת המגירה ש"מאשרת" בשבילי את הטקסט שהקלדתי.

        ניסיתי לבדוק באירוע של DropDownClosed מה מצב ה-cb.text - אבל כבר שם הוא ריק.
        המחשבה הראשונה היא לחפש אירוע בשם DropDownClosing כמקום המתאים לטפל בכאלו דברים, אבל העניין הוא שלא קיים כזה אירוע...

        ג. את האנטר אני לוכד עם אירוע KeyDown, שמוביל לשגרה שהשורה הראשונה שלה היא:
        If e.KeyCode <> Keys.Enter Then Exit Sub
        ובהמשך השגרה (אחרי שהיא מוסיפה את השאילתא החדשה לפריטי הקומבובוקס) היא פשוט "לוחצת" על הלחצן של "בצע שאילתא":
        btnManual_Click(sender, Nothing)

        תודה רבה!

        פורסם במקור בפורום CODE613 ב28/11/2017 17:40 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • איש אחדא מנותק
          איש אחדא מנותק
          איש אחד
          כתב ב נערך לאחרונה על ידי
          #4

          נ.ב. כהשלמה להודעה הקודמת,

          מצאתי את זה,
          אבל ה"דרך" "לפתור" את הבעייה - משום מה לא כל כך נראית לי הגיונית.

          יש בזה משהו, או להתייאש ולעבוד בשיטות הנלוזות דשם?

          פורסם במקור בפורום CODE613 ב28/11/2017 17:58 (+02:00)

          תגובה 1 תגובה אחרונה
          0
          • איש אחדא מנותק
            איש אחדא מנותק
            איש אחד
            כתב ב נערך לאחרונה על ידי
            #5

            בס"ד

            שני עדכונים מוזרים נוספים:

            1. כאשר הפרופרטי AutoCompleteMode על מצב none, בהקלדה עם "מגירה פתוחה" - הטקסט נמחק, אבל הפרופרטי Text נשמר... :?
              הבעייה המלאה קיימת "רק" במצבי ההשלמה האוטומטית למיניהם. כמובן שבלי השלמה אוטומטית הקומבובוקס יכול לחזור למאורה.

            2. כאשר משתמשים באירוע KeyDown ולוחצים אנטר עם מגירה פתוחה, האירוע חוזר פעמיים. (רק אנטר מחזיר פעמיים) :?:

            מה הולך פה היום?

            פורסם במקור בפורום CODE613 ב28/11/2017 19:15 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #6

              היה עליך לומר בדיוק איזה מאפיינים הגדרת, זה קריטי להבנת הבעיה.
              אכן זו בדיוק ההתנהגות של ההשלמה אוטומטית, כאשר הרשימה פתוחה אז הוא במצב למצוא התאמה, ולחיצה על אנטר קובעת את המתאים כטקטס הנבחר. במקרה שאין מתאים אז זה כלום.
              בקשר לKeyDown פעמיים אינני יודע בדיוק למה זה אבל זה לא אמור להפריע לך.
              שים לב לעקוב אחרי ההתנהגות שלך\של המשתמש. למה הוא מגיע למצב של הקלדה שונה תוך כדי שתיבת ההצעות פתוחה? הוא עורך אפשרות קיימת? עליך לעקוב אחרי כוונת המשתמש ולתת לו את הפקד ואת הפריסה האופטימליים לצרכיו. בדרך כלל התנהגות לא רצוייה של פקדים מעידה שהם פשוט בחירה לא נכונה.

              פורסם במקור בפורום CODE613 ב28/11/2017 19:36 (+02:00)

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              1
              • איש אחדא מנותק
                איש אחדא מנותק
                איש אחד
                כתב ב נערך לאחרונה על ידי
                #7

                בס"ד

                טוב. נראה לי שהגעתי אל המנוחה ואל הנחלה.

                העניין הוא שהתערבבו לי 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)

                תגובה 1 תגובה אחרונה
                5

                בא תתחבר לדף היומי!
                • התחברות

                • אין לך חשבון עדיין? הרשמה

                • התחברו או הירשמו כדי לחפש.
                • פוסט ראשון
                  פוסט אחרון
                0
                • דף הבית
                • קטגוריות
                • פוסטים אחרונים
                • משתמשים
                • חיפוש
                • חוקי הפורום