עזרה דחופה ב-VB

reutavni

New member
עזרה דחופה ב-VB

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

טרמפיסט

New member
מה הבעיה

בונים מערך בעל תשעה איברים המקביל למערך התיבות טקסט. בעזרת לולאה מאחסנים את ערכי התיבות באיברים המקבילים להן במערך.
 

reutavni

New member
בעיה גדולה

המערך בעצם הוא 9 על 9 כלומר יש לי 81 תיבות טקסט אני לא רוצה כמו תוכי לרשום את שמות כל התיבות טקסט, כלומר אני רוצה שיטה שבה בתוך לולאה בדרך כלשהי המערכת תעבור תיבה תיבה ותכניס למערך. אני חשבתי על לתת לכל תיבה שם כמו T1,T2,T3... ובדרך כלשהי לפנות כל פעם לתיבה אחרת. בכל אופן התשובה שלך היא העבודה שחורה שידעתי כבר ואני מנסה למצוא דרך פשוטה עם לולואות.
 
../images/Emo26.gif

אין בעיה. אתה צריך פשוט לבנות מערך של תיבות טקסט בצורה הבאה: שים את התיבה הראשונה ותן לה שם כלשהו (T) שנה את מאפיין ה Index שלה ל 0. שים תיבה נוספת, תן לה אותו שם (T) ואת האינדקס שלה שנה ל 1 וכך הלאה עד 80. כדי לעבור על כל התיבות :
For i = 0 to 80 msgbox T(i).text next i​
 

reutavni

New member
סליחה על הבורות

אבל איפה נמצא המאפיין index, בתיבת המאפיינים יש לי רק tabindex ולא נראה לי שהתכוונת לזה. בכל אופן הרעיון שלך מציל אותי אשמח לדעת איפה נמצא המאפיין index. תודה :)
 

ארזירון

New member
לפי השאלה

אתה לא משתמש ב-VB6 ....... אם אתה מסמן את תיבת הטקסט הראשונה ופשוט עושה copy ואז paste זה אמור לשאול אותך אם לייצר מערך, וזה כבר ידאג לנושא ה-index. אם אתה לא בגרסה הנכונה של VB זה פשוט ייצר תיבה עם שם אחר וזהו.
 

reutavni

New member
לא VB6

נכון אני לא משתמשת ב-vb6, ואני פשוט צריכה לכל תיבות הטקסט אותו שם רק עם index שונה, לא יכול להיות שרק ב-vb6 אפשר, לא?
 

ארזירון

New member
למה לא?

אם אני הייתי מעצב את השפת תכנות הבאה אחרי VB6, אולי הייתי משאיר את כל נושא האינדקס לפקדים. כיון שלא אני עיצבתי, הוחלט שאין יותר אינדקסים. אם זה גרסה יותר מתקדמת, אז אין אינדקס. מצד שני, תמיד אפשר לעבור על כל הפקדים שקיימים על המסך עם לולאת for each, לבדוק את סוג הפקד (לוודא שזה תיבת טקסט) ואז למשל עם TAG לשמור את המיקום של התיבת במערך, או לתת להם שמות כמו text1, text2 וכו ואז להוציא מהשם את המיקום במערך....
 

ארזירון

New member
דוגמא

for each c as control in me.controls if c.gettype().name = "TextBox" then 'do something end if next​
זה יעבוד עם vb.net, לדעתי עם כל גרסה. זה לא יעבוד עם vb6.....כי צריך לשנות קצת פה ושם בשביל vb6....
 

reutavni

New member
עוד בעיה

עכשיו אני לא יודעת איך להכניס כל פעם שהוא מוצא תיבת טקסט ערך למערך לדוגמה ברגע שהוא מצא את תיבת הטקסט הראשונה שיכניס את הערך שבה למערך במיקום (1,1).
 

ארזירון

New member
tag

לכל פקד יש מאפיין בשם tag שאפשר לשמור בו מידע סתמי, או במקרה שלך את האיבר במערך שצריך להשתמש בו.
 

reutavni

New member
עדיין בבעיה אבל תודה

זו הלולאה שכתבתי Dim x, y as integer y=0 x = 0 For Each c As Control In Me.Controls If c.GetType().Name = "TextBox" Then num = Val(c.Text) bigbox(x, y) = num If x = 8 Then Exit For Else If y = 8 Then x = x + 1 y = 0 Else y = y + 1 End If End If End If Next יש לי 81 תיבות טקסט גם אם אני לכל אחת אתן בתאג שלה מספר (נתתי כבר) התוכנה לא קוראת לכל תיבת טקסט בלולאה לפי הסדר של התאג, בדקתי את זה אין לי מושג לפי מה התוכנה קוראת את התיבות טקסט לפי איזה סדר? idextab או tag או משהו אחר? אני כבר מתייאשת.... תודה על הסבלנות, אני סך הכל מנסה לבנות משחק סודוקו.
 

ארזירון

New member
קודם כל

קוד מיישרים לשמאל על ידי לחיצה על [תחילת קוד] ו-[סוף קוד] למטה. שנית, מה זה משנה אם זה לפי הסדר? בגלל זה ב-tag את יכולה לרשום את המיקום האמיתי, ופשוט לפענח מה שכתוב כדי להשים את הערך במיקום הנכון במערך. למשל, משהו כמו tag=2,3 ואז בקוד לפרק את זה לפי "," כדי לקבל את שני האיברים (x,y) ולשמור את הערך במערך bigbox שלך.
 

rutigold

New member
אם את עובדת בVBA אז יש לי רעיון אחר

תתני לכולם את אותו השם כמו שהצעת t1,t1 וכו' ותרוצי עליהם במערך ותתייחסי אליהם בצורה הבאה: form(myForm).Controls("t" & i) i=1,2
 
למעלה