Visual Basic MSHFlexGrid Nesnesi
Makale - Visual Basic
Yazar ugokhan   
Çarşamba, 30 Nisan 2008 12:15
MS Excel'deki grid (ızgara) görünümüne benzer birimler oluÅŸturmak için kullanılabilecek bir nesne. Database üzerinden hazır veri çekebilen DataGrid nesnesine göre daha serbest bir kullanımı vardır. Bu konu anlatımında bu nesnenin önemli özelliklerini anlatacağım.

Nesneyi Projeye Ekleme 

MSHFlexGrid nesnesi Visual Basic toolbar'ına default olarak gelen nesnelerden biri deÄŸildir. Bu sebeple önce bu nesneyi projemize eklememiz gerekir. Project > Components menüsünden veya Ctrl+T kısayoluyla komponentler penceresi ekrana getirilir. Buradan "Microsoft Hierarchical FlexGrid Control 6.0 (OLEDB)" seçeneÄŸi iÅŸaretlenir ve "Uygula" butonuna basılarak nesne projeye eklenmiÅŸ olur.

Nesne Ön Bilgileri

MSHFlexGrid nesnesini form üzerine bir dikdörtgen çizer gibi ekleyin. İlk eklemede 2 satır ve 2 sütun olarak gelecektir. İleri de bunları istediÄŸimiz gibi arttırıp azaltabiliriz. Nesne üzerinde saÄŸ tıklayıp "Properties" seçeneÄŸi seçilirse karşınıza bu nesneye ait bazı ayarlamaları yapabileceÄŸiniz bir pencere gelir. Kısaca bunlardan bahsedelim:

Property Pages - General :

Rows : Nesne Üzerinde Kullanılacak Satır Sayısı
Cols : Nesne Üzerinde Kullanılacak Sütun Sayısı
Fixed Rows : Gri renkli satır hücresi kolon sayısı.
Fixed Cols : Gri renkli sütun hücresi satır sayısı.

AllowBigSelection : Bu özellik, bir satır veya sütundaki tüm hücreleri seçmek için o satır veya sütuna ait gri hücreye izin vermeye ait bir deÄŸerdir. EÄŸer iÅŸaretlerseniz veya propersites penceresinden deÄŸerini "True" yaparsanız gri hücrelere tıklayarak grup seçimi yapabilirsiniz. En sol üst köÅŸedeki gri hücreye tıklarsanız bütün hücreler seçilir. Bunu istemiyorsanız iÅŸareti kaldırabilirsiniz.

ScrollBars : Izgara etrafında kaydırma çubukları olsun mu? hangileri olsun? gibi seçenekleri barındırır.

HighLight : Seçili hücrelerin mavi renge dönüÅŸüp dönüÅŸmemesi izni.

FocusRect : Odaklanma iÅŸareti. Tıklanılan karenin seçilmesi veya seçilmeden sadece tıklanılması gibi özellikleri ayarlarsınız.

SelectionMode : Çoklu hücre seçim iÅŸlemini sadece satırlara veya sadece sütunlara ayarlayabilirsiniz. Projenizde bir sütundaki birden fazla hücrenin seçilmesi gereksiz ise buradan sadece yatay izni verebilirsiniz. Veya tamamen hepsini kapatabilirsiniz.

AllowUserResizing : Program çalışırken kullanıcıya satır ve sütun geniÅŸliklerini mouse ile deÄŸiÅŸtirebilme iznini açar. Sadece satırlara veya sadece sütunlara izin verebileceÄŸiniz gibi, tamamen kaldırabilir veya hepsine izin verebilirsiniz.

RowSizingMode : Bu deÄŸeri ancak AllowUserResizing deÄŸerini Rows veya Both olarak seçtiyseniz kullanabilirsiniz. Bir satırın yüksekliÄŸi deÄŸiÅŸtirildiÄŸinde bu yeni deÄŸeri tüm satırlara aynen uygulasın mı yoksa sadece o satırın yüksekliÄŸini mi deÄŸiÅŸtirsin ÅŸeklinde bir ayarlamadır. Sadece satırlar için geçerlidir.

Penceredeki diÄŸer sekmeler görsel ayarlarla ilgilidir. Hücre çizgilerinin tipleri, fontlar, hücre renkleri ..vb. Mesela gri hücrelerdeki satır ve sütun baÅŸlıklarını koyu (bold) yapmak için Font sekmesine girip buradaki FontFixed deÄŸeri seçilir ve yandaki kısımdan ayarları yapılır. FontFixed gri hücrelerin, Font ise beyaz hücrelerin ayarlarıdır.

Bir Hücreye Yazı Yazdırmak

MSHFlexGrid nesnesi üzerindeki bir hücreye yazı yazdırmak için öncelikle o hücrenin koordinatları belirtilmelidir. Bunu nesnenin .col ve .row özellikleri ile ayarlayıp .text özelliÄŸi ile yazımızı yazarız. Mesela 1,1 hücresine "galatasaray" yazdıralım. Bunun için,

MSHFlexGrid.Col = 1
MSHFlexGrid.Row = 1
MSHFlexGrid.Text = "galatasaray"

ÅŸekline yaparız. 3,5 hücresine "gokhanca.com" yazdırmak için ise

MSHFlexGrid.Col = 3
MSHFlexGrid.Row = 5
MSHFlexGrid.Text = "gokhanca.com"

kodunu kullanabiliriz. İlk koordinatlar 0,0 ile baÅŸlar. Sonra sırayla devam eder. Dikkat edilirse bir yazı yazdırmak için 3 defa nesneye ait deÄŸiÅŸiklik yaptık. Bu her seferinde programcıyı yoracaktır. Bu iÅŸlemi küçük bir sub ile tanımlarsak daha pratik bir iÅŸlem yapmış oluruz. Örnek bir sub ÅŸöyle olabilir.

Sub TabloYaz(satir As Integer, sutun As Integer, yaz As Variant, obje As MSHFlexGrid)
    obje.Col = sutun
    obje.Row = satir
    obje.Text = yaz
End Sub

Burada çok pratik bir uygulama daha yapmış olduk. EÄŸer ki, projede birden fazla MSHFlexGrid nesnesi varsa nesne ismini de belirtip hangisine yazdırma yapacağımızı da belirleyebiliriz. Diyelim ki, iki tane tablomuz olsun ve bunların isimleri LigSira ve TakimKadro olsun.

TabloYaz 1, 1, "Fenerbahçe",  LigSira
TabloYaz 1, 1, "Roberto Carlos",  TakimKadro 

ÅŸeklinde kullanabiliriz.  Birden fazla form üzerinde bunu kullanmak istiyorsanız projenize bir Module ekleyip Sub ifadesini Public olarak tanımlamalısınız.

Bir Hücredeki DeÄŸeri Okumak

Hücreye yazdırma iÅŸlemiyle aynıdır. Yine öncelikle satır ve sütun deÄŸerlerini tanımlarız ve text özelliÄŸinin deÄŸerine bakarız. 2,13 hücresinin deÄŸerini almak için aÅŸağıdaki kodu kullanabiliriz.

MSHFlexGrid.Col = 2
MSHFlexGrid.Row = 13
OkunanDeger = MSHFlexGrid.Text

Yine bunu da bir function ile belirtip daha pratik bir kullanım saÄŸlayabiliriz. Üstte sub yapmıştık ama burada function kullandık. Çünkü burada bir deÄŸer dönmesini istiyoruz. Yazdırma iÅŸleminde bir deÄŸer dönmesine gerek yok.

Function TabloOku(satir As Integer, sutun As Integer, obje As MSHFlexGrid) As Variant
    obje.Col = sutun
    obje.Row = satir
    TabloOku = obje.Text
End Function

Kullanımı da ÅŸöyle olabilir. Mesela  Tablo1 isimli MSHFlexGrid nesnemiz üzerinde birinci sütundaki ilk 10 satırı tarayıp içinde "gokhanca" yazan ifadeleri bulalım:

    For i = 1 To 10
        If TabloOku(i, 1, Tablo1) = "gokhanca" Then
            ' ...
        End If
    Next

Kolon GeniÅŸliklerini Ayarlamak

Programınızda kullanacağınız grid nesnesinde her sütunun geniÅŸliÄŸi aynı olmayabilir. Bunu tek seferde Form_Load ( ) olayında tanımlayabilirsiniz. Bunun için hangi sütunda deÄŸiÅŸiklik yapmak istiyorsanız o sütunun indexini belirtip ColWidth deÄŸeriyle ayarlama yaparız.

Tablo1.ColWidth(0) = 200
Tablo1.ColWidth(1) = 300
Tablo1.ColWidth(2) = 500

EÄŸer daha önceden nesnenin AllowUserResizing deÄŸerine izin verdiyseniz bunu mouse ile de yapabilir kullanıcı. Ama ilk açılışta biçimsiz bir tablo istemiyorsanız kodlarla geniÅŸlikleri belirtip ayarlama yapabilirsiniz.

Sütun DeÄŸerlerini Büyükten KüçüÄŸe Sıralama 

Bir MSHFlexGrid nesnesi kullanıyorsak ÅŸayet,  illaki bir sütunu büyükten küçüÄŸe sıralamamız gerekebilir. Nesnenin Sort özelliÄŸi ile bunu çok kolay bir ÅŸekilde yapabiliriz. Bunun için öncelikle hangi sütunda sıralama yapacaksak sütunu belirlememiz ve ondan sonra sıralama ÅŸeklini seçmemiz gerekir. Bir örnek yapalım. AÅŸağıdaki birinci resimde olduÄŸu gibi bir tablomuz olsun:

mshflexgrid

Diyelimki birinci sütunu büyükten küçüÄŸe dizmek istiyoruz. Bunun için aÅŸağıdaki kodları yazarız.

Tablo1.Col = 1
Tablo1.Sort = 2

Buradaki Col ifadesi hangi sütunda sıralama yapılacağını belirtir. Sort ise sıralama türüdür. 1  küçükten büyüÄŸe, 2 ise  büyükten küçüÄŸe sıralama yapar.

Diyelim ki 2. sütundaki deÄŸerleri küçükten büyüÄŸe sıralayalım. Üstteki resimdeki 3. tablodaki gibi. 

Tablo1.Col = 2
Tablo1.Sort = 1

2. sütundaki deÄŸerleri büyükten küçüÄŸe dizmek için ise aÅŸağıdaki ayarlamaları yaparız.

Tablo1.Col = 2
Tablo1.Sort = 2

Sıralama iÅŸlemi için bir sub yazalım. Daha kolay iÅŸlem yapmış oluruz.

Sub TabloSirala(sutun As Integer, yon As Byte, obje As MSHFlexGrid)
    If yon = 1 Or yon = 2 Then
        obje.Col = sutun
        obje.Sort = yon
      Else
        Exit Sub
    End If
End Sub

Diyelimki Tablo1 tablosundaki 5. sütunu küçükte büyüÄŸe sıralamak isteyelim:

TabloSirala 5, 1, Tablo1

iÅŸte bu kadar ;)

 

Yorumlar  

 
+1 #4 2010-11-01 22:09
haklısın Neq,

"SelectionMode" tek bir satır veya sütunu seçmek için yeterli değil. Sadece seçimi satır ve sütun olarak ayarlamaya yarıyor. Bu durumda birden fazla satır veya sütun seçilebilir. Kod örneğin için teşekkür ederim. Tek bir satır veya sütunu seçtirmek isteyenlere yardımcı olacaktır.
Alıntı
 
 
+1 #3 2010-11-01 21:02
İyi günler program hakkında değil ama "SelectionMode" hakkında birşeyi paylaşmak istiyorum.

SelectionMode bu denetimden row(satır) veya col(sütün) seçimi yapsanız bile birden fazla seçim yapmayı engellemez.

Eğer sadece tek bir satır veya sütününun seçimini yaptırmak istiyorsanız, tıklama yöntemine şunu eklemelesiniz;


Private Sub MSFlexGrid1_Click()
MSFlexGrid1.rowsel = MSFlexGrid1.row
'tek satır seçtirmek için

MSFlexGrid1.colsel = MSFlexGrid1.col
'tek sütün seçtirmek için
End Sub
Alıntı
 
 
+1 #2 2010-09-08 19:22
Quoting murat topcu:
iyi günler gökhan bey yeni futbol ligi prg güzel olmuş üzerinde biraz çalıştım fakat bazı yerlerde takıldım mesela MSHFlexGrid de oluşturduğun maç girişlerinde bir önceki haftada değişiklik yapmak istersek (düzenle) komutuyla maç girişlerinde o haftaya ait maçların görünmesi ve değişiklik yapmayı istiyorum ayrıca bir takım değilde klüp içerisinde 3,4kategori varsa her kategori için bir form mu yapmak lazım
yardım ederseniz çok sevinirim


Murat Bey, ayrı bir form üzerinde istediğiniz bir haftaya ait maçları çağırabilir ve değişiklikleri yapabilirsiniz. Sonra tekrar maçları kaydedersiniz. Kulüp içerisindeki kategori olayını anlamadım.
Alıntı
 
 
+1 #1 2010-09-05 01:35
iyi günler gökhan bey yeni futbol ligi prg güzel olmuş üzerinde biraz çalıştım fakat bazı yerlerde takıldım mesela MSHFlexGrid de oluşturduğun maç girişlerinde bir önceki haftada değişiklik yapmak istersek (düzenle) komutuyla maç girişlerinde o haftaya ait maçların görünmesi ve değişiklik yapmayı istiyorum ayrıca bir takım değilde klüp içerisinde 3,4kategori varsa her kategori için bir form mu yapmak lazım
yardım ederseniz çok sevinirim
Alıntı
 

Yorum ekle

TCK'ya aykırı, yasadışı ve genel ahlaka aykırı yazılar ile konu dışında yazılar, istekler, spam ve reklam amaçlı mesajlar yazılması YASAKTIR. Bu tür yazılar görüldüğü anda tarafımdan silinecektir. Herhangi bir uygunsuzluğun olduğunu düşündüğünüz yazılar için lütfen bana eposta yoluyla haber veriniz.


Güvenlik kodu
Yenile