הגדרת משתנה Static

טרמפיסט

New member
הגדרת משתנה Static

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

בסג

New member
איפה הגדרת את המשתנה?

אם הגדרת אותו בשגרה שמטפלת בארוע Timer, אכן המשתנה משותף לכולם (כמו שהשגרה הזו משותפת לכולם. פתרון אחד הוא לעשות מערך (אפילו, מערך דינמי) שיהיה STATIC, במקום משתנה יחיד. מציין הINDEX של הפקדים, יכול לשמש גם כאינדקס התא הנחוץ במערך.
 

בסג

New member
"מערך דינמי שיהיה STATIC"... ../images/Emo13.gif

רק כשקראתי את זה, הבנתי שזה מצחיק; אבל זה עובד (כי, כמובן, הוא סטטי מבחינה אחת ודינמי מבחינה אחרת). הנה דוגמה שממחישה את זה: (בכל לחיצת כפתור הוא מוסיף מספר אחד לרשימת המספרים הריבועיים)
Private Sub Command1_Click() Static a As Integer, B() As Integer Dim i As Integer, st As String a = a + 1 ReDim Preserve B(a) B(a) = a * a st = "" For i = 1 To a st = st & Str(B(i)) Next MsgBox st End Sub​
זה, כמובן, עובד גם עם TIMER.
 
למעלה