visual basic te for next dongusu

Başlatan XX_CİHAN_XX, 17 Şubat 2007, 20:59:58

XX_CİHAN_XX

for next dongusunun ıcındeyken sureklı artan bır sayacın degerını text box a aktarmak ıcın asagıdakı satırları kullanıyorum.
text1.text = cstr(sayac)

Fakat for next dongusunde kaldıgıım surece text box ta hıc bısey gozukmuyor bu donguden cıkınca ancak yazılan en son deger text box ta gozukuyor...
Sebebı nedır acaba?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

armys2000

dim a
sayın @ XX_CİHAN_XX

for a=1 to 100
text1.text=a
doevents
next a

bu şekilde yaz hocam yoksa text box ta anın değerini ancak döngü bittiğinde görürsün

pc de özelliklede vbasic te bir değişkeni ekranda yazdırmak işlemcide baya bir işleme sokar  işlemci döngü çalışırken diğer olayları yapmakta baya bir zorlanır hatta yapamaz bunu yaptırabilmek için DoEvents kullanılır  Diğer olaylarıda işleme al gibi birşey

doevents

XX_CİHAN_XX

armys2000 dediğin şekilde textboxa yazı yazdırabildim.Fakat bu seferde şoyle bir durum var:
For next dongusu ıle bır gecıkme yapıyorum ve bu gecıkme her bılgısayarda aynı olmuyor.Bilgisayarın hızına gore dongu daha gec yada daha yavas dongu tamamlanıyor.Bende dongu yerıne timer kullanmak ıstedım yanlız butona tıkladıgımda yada baska bı dongunun ıcıne gırdıgımde bu tımer calısmıyor DoEvents ı burdada kullanmayı denedım ama yemedi :d
Timer li yada timersiz eşit zaman gecıkmesı nasıl yapabılırım?
Yardımlarınız için teşekkürler...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

XX_CİHAN_XX

armys2000 dediğin şekilde textboxa yazı yazdırabildim.Fakat bu seferde şoyle bir durum var:
For next dongusu ıle bır gecıkme yapıyorum ve bu gecıkme her bılgısayarda aynı olmuyor.Bilgisayarın hızına gore dongu daha gec yada daha yavas dongu tamamlanıyor.Bende dongu yerıne timer kullanmak ıstedım yanlız butona tıkladıgımda yada baska bı dongunun ıcıne gırdıgımde bu tımer calısmıyor DoEvents ı burdada kullanmayı denedım ama yemedi :d
Timer li yada timersiz eşit zaman gecıkmesı nasıl yapabılırım?
Yardımlarınız için teşekkürler...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

armys2000

@XX_CİHAN_XX hocam dediğiniz doğru yazdığınız döngüler her işlemcide her pc her işletim sisteminde hatta pc nin o anki yoğunluğuna göre ya çok hızlı çalışır yada yavaşlar. Bunun yerine Timer objesini kullanbilirsiniz veya  API kullanarak bir fecikme sağlayabilirsiniz. Aşağıdaki API olabilir mesela burda biraz farklı bir uygulaması var ama bunu düzenleyebilirsiniz


Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'API bu
 

Aşağıdaki de bu api yi kullanılarak yapılmış bir fonksiyon
Private Function CevapBekle(lDelay As Long, Cevap As String) As Variant
Dim szTemp As Variant
Dim Buffer As Variant
Dim x As Long
DoEvents
If Cevap = "" Then
  For x = 1 To lDelay
    
    Sleep 1000
  Next x
Else
  For x = 1 To lDelay
    DoEvents
    If InStr(m_Buffer, Cevap ) Then
      Exit For
    Else
      DoEvents
      Sleep 500
      DoEvents
    End If
  Next x
End If

If Len(m_Buffer) > 0 Then
  DoEvents
  Debug.Print Time & " - Data Alındı: " & m_Buffer
End If

CevapBekle= m_Buffer


End Function

armys2000

sayın hocam Vb den nefret ediyorum bu yuzden o nedenle kökten değişikliğie gidiyorum c ye adım atmak gibi eğer yol yakınsa sizde dönün derim  sizin dediğiniz sorunları çok yaşadım o nedenle kına geldi artık ..

VB out  C++ IN

XX_CİHAN_XX

VB konusunda haklısın.Kolaylıgına aldandık ama bu tür sıkıntılar yuzunden basic dilini bir türlü benimseyemedim.Bende C taraftarıyım kısa sürede bitirmem gereken basit bir uygulama oldugu ıcın basic i sectım nitekim bitti sayılır for dongusundekı problemide aştıgımda sorun kalmıyacak.Sleep ifadesini bir deneyim bakalım.Tekrar teşekkürler...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

rree

Timer objesini bir sayaç eklenir. Sayac=sayac+1
Sayac değeri text  kutusuna gönderilir. Timer objesi içinde For next döngüsü kullanmak mantıklı değil. Timer interrupt çağrısı yeterli gelmiyorsa onu bilemem.

XX_CİHAN_XX

Alıntı yapılan: "rree"Timer objesini bir sayaç eklenir. Sayac=sayac+1
Sayac değeri text  kutusuna gönderilir. Timer objesi içinde For next döngüsü kullanmak mantıklı değil. Timer interrupt çağrısı yeterli gelmiyorsa onu bilemem.
timer içinde for next kullanmıyorum zaten sorun for next ın ıcındeyken timer kesmesi oluşmuyor.Sleep fonksıyonunuda ıstedıgım sekılde kullanamadım.Şuankı derdım hazırladıgım program for next dongulerını kullanarak zaman gecıkmesı yaptıgı ıcın her pc de aynı gecıkme olusmuyor.Timer kullanmaya calısıyorum ama bu timer sanırım bazı yerlerde kesmeye gıtmıyor sebebını anlamış degılım :roll:
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.