PDA

View Full Version : انجام ندادن واکنش مورد انتظار



pars1376
پنج شنبه 06 شهریور 1393, 20:49 عصر
Private Sub Timer_Timer()
Dim a As Boolean


If Me.Width <= 10900 And a = False Then Me.Width = Me.Width + 50

If Me.Width > 10900 And a = False Then
a = True
Me.Width = Me.Width + 50
End If



If a = True Then Me.Width = Me.Width - 50
'If Me.Width < 7000 And a = True Then a = False


End Sub


سلام

من انتظار داشتم با این کد فرم ذره ذره بزرگ بشه بعد همونطوری کوچیک بشه اما فقط بزرگ میشه! بعد ثابت میمونه

meys34
جمعه 07 شهریور 1393, 21:06 عصر
سلام

وقتی اندازه فرم رو تغییر میدید باید DoEvent رو فراخوانی کنید تا تغییرات رو هر دفعه مشاهده کنید...

Private Sub Timer_Timer()
Dim a As Boolean


If Me.Width <= 10900 And a = False Then Me.Width = Me.Width + 50

If Me.Width > 10900 And a = False Then
a = True
Me.Width = Me.Width + 50

DoEvents

End If



If a = True Then Me.Width = Me.Width - 50
'If Me.Width < 7000 And a = True Then a = False


End Sub

pars1376
شنبه 08 شهریور 1393, 11:58 صبح
Private Sub Timer_Timer()

Dim a As Boolean


If Me.Width < 7000 Then a = False

If Me.Width > 9000 Then a = True


If a = False Then Me.Width = Me.Width + 22

If a = True Then Me.Width = Me.Width - 22

با DoEvents تغییری نکرد اما من در عجبم این کد چرا جواب نمیده؟!!
امکان داره اصلا مشکا از vb باشه؟
طول فرم 9008 میشه اما a برابر true نمیشه!


End Sub

pars1376
شنبه 08 شهریور 1393, 11:58 صبح
Private Sub Timer_Timer()

Dim a As Boolean


If Me.Width < 7000 Then a = False

If Me.Width > 9000 Then a = True


If a = False Then Me.Width = Me.Width + 22

If a = True Then Me.Width = Me.Width - 22

End Sub

با DoEvents تغییری نکرد اما من در عجبم این کد چرا جواب نمیده؟!!
امکان داره اصلا مشکل از vb باشه؟
طول فرم 9008 میشه اما a برابر true نمیشه!

meys34
شنبه 08 شهریور 1393, 16:02 عصر
ببخشید من یه اشتباهی کردم اونم این بود که شما از Timer استفاده کردید به جای حلقه و نیازی به DoEvent نبود...


جواب نمیده منظورتون کدوم قسمته؟ چه چیزی اش جواب نمیده؟

vbhamed
شنبه 08 شهریور 1393, 16:33 عصر
با DoEvents تغییری نکرد اما من در عجبم این کد چرا جواب نمیده؟!!
امکان داره اصلا مشکل از vb باشه؟
طول فرم 9008 میشه اما a برابر true نمیشه!
سلام
مشکل از کد شماست
Private Sub Timer_Timer()

Static a As Boolean

If Me.Width < 7000 Then a = False
If Me.Width > 9000 Then a = True

If a = False Then Me.Width = Me.Width
If a = True Then Me.Width = Me.Width

End Sub

pars1376
شنبه 08 شهریور 1393, 16:52 عصر
آقای vbhamed (http://barnamenevis.org/member.php?10624-vbhamed) درست میگید شما! امروز بعداظهر رفتم یکم استراحت کنم فهمیدم مشکل از کجاس
یادم نبود که با هربار اجرای تایمر a=false میشه. البته من به فکر استفاده از از متغیر سراسری افتادم که فکر میکنم این روش شما بهتر باشه

آقای meys34 (http://barnamenevis.org/member.php?72486-meys34) شما متوجه منظور من نشدی من میخواستم وقتی فرم از 7000 کوچیکتر شد 20 تا 20 تا بزرگ بشه تا به 9000 برسه و وقتی از 9000 بیشتر شد 20 تا 20تا به 7000 برسه و همین چرخه تکرار بشه اما از وقتی که برای سوالم گذاشتید واقعا ممنونم :لبخندساده: