pcworld online logo

Visual Basic ve Bug'lar

• Visual Basic 3.0 ile gelen kurulum programını kullanıyorsanız. Programınızı Windows’unuzun bulunduğu dizine kurmaya kalkarsanız, Visual Basic "Setup Files Have Been Modified or Corrupted" hata mesajını verdikten sonra program kapanır ve Windows’a geri dönülür. Fakat programı değişik bir dizine kurmak istediğinizde bir problem çıkmadığını görürsünüz.

Ne yapmalı?
Bu problemi çözmek için AUTOEXEC.BAT dosyanızda Windows’unuzun yerini belirleyen PATH tanımını sürücü ismi vermeden kullanın. "\WINDOWS", "\WIN31" gibi...

• Eğer Visual Basic 3.0 kullanıyorsanız ve üzerinde çalıştığınız projeyi File * Make EXE File komutunu seçerek EXE haline getirdiyseniz programda hiç değişiklik yapmadan bir daha derlediğinizde programın boyunda gereksiz bir uzama olduğunu görürsünüz. Program ona değişiklik yapmadığınız ve derlediğiniz her seferinde daha da uzar!
Çok ilginçtir ki bu sayede meydana gelen EXE dosyalar WINDOWS altında hiç sorun çıkarmadan çalışabiliyor...

Ne yapmalı?
Bunu önlemek için programı derlemeden önce üzerinde ufak bir değişiklik yapın. Örneğin programda kullandığınız formlardan birini bir milimetre yana kaydırın. Böylece VB 3.0 aynı proje için eski EXE’yi silip yepyeni bir EXE yaratır.

• VB 1.0, 2.0 ya da 3.0 kullanıyorsanız "Illegal function call" or "Division by zero" gibi "genel" hata mesajları ile sık sık karşılaşıyorsanız suçu pek te kendinizde aramayın. Çünkü Visual Basic’in karışık işlemlerden sık sık kafası karışır! Örneğin aşağıdaki işlem matematik işlemcisi olan bir bilgisayarda "Illegal Function Call" hatasının ekrana gelmesine neden olur

test = 1 + (1 + 1 * (1 * (1 + 1 ^ 1)))

Aşağıdaki işlem ise, yine matematik işlemcili bir bilgisayarda "Division by zero" (Bir sayının sıfıra bölünmesi) hatasını veriyor

test = 1 + (1 - 1 * (1 + 1 / 1 ^ 1))

Visual Basic 4.0 ise böyle bir program hatası barındırmıyor. Yani programlama dilinizin aklını istediğiniz kadar karıştırabilirsiniz.

Ne Yapmalı?
Bu problemi çözmek için işlemin karışık parçalarını daha basit parçalara ayırıp ayrı ayrı hesaplatılmasını sağlayabilirsiniz.


•  Eğer VB 1.0, 3.0 veya 4.0 kullanıyorsanız (Yani herhangi bir sürümünü) seçim kutusu kontrolündeki bir programlama hatasını yakalamış olabilirsiniz. Bir form üzerine iki yada daha fazla seçenek kutusu koyduğunuzda ve programı çalıştırdığınızda bu kutulardan mutlaka biri seçili durumda olmalıdır. Zaten kutucuğun mantığı da budur, kullanıcının mutlaka bir seçeneği seçmesini sağlamak... Kontrol bu şekilde kullanıldığında sorunsuz olarak çalışıyor fakat kutucukları frame’lerle (gruplama kontrolü) ayırdığınızda bir sorun çıkıyor. Ayrı gruplara ayrılmış olan seçim kutularından örneğin ikinci grupta bir seçeneğin mutlaka işaretli olması gerekirken böyle olmuyor.

Ne yapmalı?
Bu sorunu çözmek çok basit, formun yüklenmesi esnasında 4. seçenek kutusunu aktif yapmak için şöyle bir satır kullanabilirsiniz:

Sub Form[sayı].Load()
Option4.Value = True
End Sub

• Tüm Visual Basic’lerde kötü bir huy var... Bu kötü huy MDI formlarla çalışırken ortaya çıkıyor. Bir Form içine iki tane MDIChild açtınız diyelim. Windows’un kendi özelliği sayesinde bu iki form arasında CTRL+TAB tuşlarını kullanarak geçiş yapabilirsiniz. Problem iki MDIChild form da normal boyutta olduğunda ortaya çıkmıyor, fakat MDIChild’lardan birini ana formla aynı boyuta getirince yani maximize edince CTRL+TAB işe yaramıyor. İki MDIChild’da aktif olmuyor.

Ne Yapmalı? Bu programlama hatasını gidermek oldukça zor. Programınızda CTRL+TAB tuş kombinasyonunu ele geçirip Windows’un otomatik olarak yaptığını siz programınıza yaptırmalısınız. En kolay çözüm formlardan hiçbiri aktif olmadığında formun aktif olması için üzerine bir kere tıklamak...


• Eğer Visual Basic 3.0 kullanıyorsanız VB’nin yazıcı ile olan problemlerinden birini bilmenizde fayda var. Programınız çalışırken "Varsayılan Yazıcı"nızı değiştirirseniz Printer.Fonts özelliğinin güncellenmediğini görürsünüz.

Ne yapmalı?
Bu problem Visual Basic 4.0’da giderilmiş ama yine de VB 3.0 kullananlara yardımcı olalım. Programınızın içerisinde şu satırları kullanırsanız probleminizin giderildiğini görürsünüz:

‘Yazıcıdaki Dökümanı Sonlandır...
Printer.EndDoc
‘Boş bir sayfa bas.
Printer.Print ""
Bu çözümün tek dezavantajı yazıcıdan boş bir kağıt çıkarmasıdır. Ama yine de Printer.Font özelliğinin güncellenmesini ve programın yeni yazıcıyı tanımasını sağlıyor...


• Eğer Visual Basic 3.0 veya daha geri sürümlerini kullanıyorsanız ızgara (grid) kontrolünüzde ufak bir sorun var demektir, çünkü Visual Basic bazen gereksiz yere ızgara kontrolünün kaydırma çubuklarını ortaya çıkarıyor. Kontrolün "ScrollBars" özelliğini 3 (Both) yaptıysanız, son sütunla ızgara penceresi arasında sütun genişliğinin yarısı kadar veya daha az yer varsa bu hata ortaya çıkıyor.

Ne Yapmalı?
Bu problemi gidermek için ilgili formun yüklenme koduna aşağıdaki satırları ekleyin. Kaydırma çubuğu yok edilip geri getirildiğinde sorun çözülüyor...

Sub Form_Load ()
'Kaydırma Çubuğu Ayarlarını Kaydet
kaydet% = Grid1.ScrollBars   
Grid1.ScrollBars = 0       'Kaydırma çubuklarını kaldır
Grid1.ScrollBars = kaydet%      'Çubukları geri getir 
End Sub
Visual Basic 4.0’da bu programlama hatası giderilmiş.


• Visual Basic 3.0 kullanıyorsanız sürücü kontrolünde bulunan bir hatayı bilmenizde sonsuz fayda var.
Sürücü kontrolü, dosya listesi kontrolü ve ilgili diğer kontrolleri birarada kullandığınızda problem ortaya çıkıyor. Formun üzerinde bir sürücü bir de dizin kontrolü olduğunu varsayalım.
Drive1 kontrolünün refresh özelliğine dir1.path = drive1.drive kodunu eklemenize rağmen a: sürücüsüne ikinci bir kere geçtiğinizde sürücünün içeriği tazelenmeyecek ve sürücüde disket olmasa bile hata meydana gelmeyecektir.

Ne Yapmalı?
Bu problemi gidermek için drive1 kontrolünün refresh özelliğine drive1.refresh satırını eklemelisiniz. İşinizi garantiye almak istiyorsanız aynı zamanda refresh isimli bir komut butonu oluşturarak bunun içerisine aşağıdaki kodları da girebilirsiniz.
drive1.refresh
dir1.refresh
file1.refresh