COMBOBOX

Menampilkan Isi ComboBox Tanpa Mengkliknya

Menampilkan isi dari suatu combobox menggunakan coding, tanpa harus melakukan klik pada combobox yang bertalian.

langkah2:
1. Buat 1 Project baru dengan 1 Form, 1 Module, dan 1 ComboBox.
2. Ketik coding berikut ke editor form dan module yang bersangkutan.
Ketika form di-load, secara otomatis combobox akan menampilkan isinya (sama seperti jika Anda mengklik panah bawahnya). Ketik coding berikut ini pada Module.

Code:

Public Declare Function SendMessageLong Lib “user32” _ Alias
“SendMessageA” (ByVal hwnd As Long, ByVal wMsg _
As Long, ByVal wParam As Long, ByVal lParam As Long) _
As Long
Public Const CB_SHOWDROPDOWN = &H14F
Ketik coding berikut ini pada form.
Private Sub Form_Load()
r = SendMessageLong(Combo1.hwnd, CB_SHOWDROPDOWN, _
True, 0)
End Sub

Melengkapi Teks di Combobox Secara Otomatis

Ketika Anda mengetikkan teks yang datanya ada di dalamcombobox, otomatis program akan melengkapi data yang sedang Anda ketik ke data yang mendekati atau yang Anda inginkan. Tip inijuga sangat berguna bagi program Anda jika menggunakancombobox yang di dalamnya terdiri atas ratusan bahkan ribuan data.User akan kesulitan jika harus memilih satu per satu menggunakanscroll combobox ke bawah hingga data yang diinginkan ketemu.Dengan adanya tip ini, user cukup hanya mengetikkan beberapa
karakter awal, dan program akan otomatis melengkapinya, sehingga tidak perlu mengetik sampai akhir. Tip ini juga berguna sekaligus sebagai validasi data yang akan dipilih dari combobox, harus cocokdengan data yang sudah tersedia sebelumnya.

Langkah2:
1. Buat 1 Project baru dengan 1 Form.
2. Tambahkan lima combobox, masing-masing menjadi Combo1, Combo2, Combo3, Combo4, dan Combo5.
3. Ketik coding berikut ke dalam editor form yang bertalian. Ketik coding berikut ini pada Form.

Code:

Option Explicit
‘Konstanta untuk membantu pencarian string
Const CB_FINDSTRING = &H14C
Private Declare Function SendMessage Lib “user32” _
Alias “SendMessageA” (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
‘Untuk membantu menentukan apakah terjadi perubahan
‘(Ubah)hasil string di combobox atau tidak (Asli).
Public Enum EnumKarakter
Asli = 0
Ubah = 1
End Enum
Dim Karakter As EnumKarakter
‘Ini untuk mengisi setiap combobox dengan data yang ‘sama.
‘Perhatikan perbedaan hasilnya saat data diketikkan di
‘masing2 combobox ybt pada event procedure KeyPress…
Private Sub IsiSemuaCombobox()
Dim ctrl As Control
For Each ctrl In Form1.Controls
If TypeOf ctrl Is ComboBox Then
With ctrl
.AddItem “Maribeth”
.AddItem “Marlyin Monroe”
.AddItem “Matt Monroe”
.AddItem “Aa jaim”
.AddItem “Ari hanggara”
.AddItem “Dorce Simatupang”
.AddItem “Elvis Sarumpet”
.Text = .List(0)
End With
End If
Next
End Sub

‘Mula-mula, isi semua combobox dengan data yang sama

Code:

Private Sub Form_Load()
IsiSemuaCombobox
End Sub

‘Bandingkan Combo1 dan Combo4…
‘Hasilnya sama saja bukan? Karena huruf yang akan ‘digunakan tidak terpengaruh kepada parameter ketiga ‘(bUpperCase), tapi ditentukan oleh parameter keempat ‘(cCharacter), yang bernilai “Asli”, artinya ‘menggunakan karakter aslinya.

Code:

Private Sub Combo1_KeyPress(KeyAscii As Integer)
KeyAscii = AutoComplete(Combo1, KeyAscii, True, Asli)
End Sub
Private Sub Combo4_KeyPress(KeyAscii As Integer)
KeyAscii = AutoComplete(Combo4, KeyAscii, False, _
Asli)
End Sub

‘Karena parameter ketiga = False dan parameter keempat ‘diUbah, maka huruf yang ditampilkan saat diketik akan ‘menjadi huruf kecil semuanya (terjadi perubahan karena “Ubah”).

Code:

Private Sub Combo2_KeyPress(KeyAscii As Integer)
KeyAscii = AutoComplete(Combo2, KeyAscii, False, _
Ubah)
End Sub

‘Karena parameter ketiga = True, dan parameter keempat ‘diUbah, maka huruf yang ditampilkan saat diketik akan ‘menjadi huruf besar semuanya (terjadi perubahan karena ‘”Ubah”).

Code:

Private Sub Combo3_KeyPress(KeyAscii As Integer)
KeyAscii = AutoComplete(Combo3, KeyAscii, True, Ubah)
End Sub

Karena parameter ketiga dan keempat tidak ‘didefinisikan secara eksplisit dalam pemakaiannya, ‘maka akan menggunakan parameter default-nya; masing-‘masing: True dan Asli, sehingga huruf yang ditampilkan ‘menjadi apa adanya (Asli). ‘Dalam hal ini, sama dengan Combo1 dan Combo4 di atas.

Code:

Private Sub Combo5_KeyPress(KeyAscii As Integer)
KeyAscii = AutoComplete(Combo5, KeyAscii)
End Sub
Public Function AutoComplete( _
cbCombo As ComboBox, _
sKeyAscii As Integer, _
Optional bUpperCase As Boolean = True, _
Optional cCharacter As EnumKarakter = Asli) _
As Integer
Dim lngFind As Long, intPos As Integer
Dim intLength As Integer, tStr As String
With cbCombo
If sKeyAscii = 8 Then
If .SelStart = 0 Then Exit Function
.SelStart = .SelStart – 1
.SelLength = 32000
.SelText = “”
Else
‘simpan posisi kursor
intPos = .SelStart
‘simpan data string
tStr = .Text
‘If bUpperCase = Asli Then
‘ .SelText = (Chr(sKeyAscii))
If bUpperCase = True Then
‘ganti string. (hanya huruf besar)
.SelText = UCase(Chr(sKeyAscii))
Else ‘If bUpperCase = KecilSemua Then
‘ganti string. (biarkan data apa adanya)
.SelText = (Chr(sKeyAscii))
End If
End If
‘Cari string di combobox
lngFind = SendMessage(.hwnd, CB_FINDSTRING, 0, _
ByVal .Text)
If lngFind = -1 Then ‘Jika string tidak ditemukan
‘Set ke string yg lama (digunakan untuk data yang
‘membutuhkan pengawasan karakter
.Text = tStr
‘Tentukan posisi kursor
.SelStart = intPos
‘Tentukan panjang yang terpilih
.SelLength = (Len(.Text) – intPos)
‘Kembalikan nilai 0 KeyAscii (tidak melakukan
‘apapun)
AutoComplete = 0
Exit Function
Else ‘Jika string ditemukan
intPos = .SelStart ‘Simpan posisi kursor
‘Simpan panjang teks sisa yang disorot
intLength = Len(.List(lngFind)) – Len(.Text)
If cCharacter = Ubah Then
‘Ganti teks baru dalam string (ubah seluruhnya)
.SelText = .SelText & Right(.List(lngFind), _
intLength)
Else ‘Asli, huruf asli yang digunakan, tidak
‘diganti
.Text = .List(lngFind)
End If
‘Tentukan posisi kursor
.SelStart = intPos
‘Tentukan panjang yang terpilih
.SelLength = intLength
End If
End With
End Function

Menggabungkan Isi Dua Combobox yang Mirip

Menggabungkan isi 2 combobox yang di dalamnya mengandung sebagian data yang sama dan sebagian lagi data berbeda. Kedua isi combobox tersebut akan digabungkan ke dalam combobox ketiga dimana jika sudah ada data yang sama, data tersebut akan diabaikan. Sedangkan jika datanya beda, akan ditambahkan (mirip dengan logika JOIN). Tip ini bisa membantu Anda untuk mengatasi suatu kasus jika Anda ingin melakukan penggabungan data yang terdapat di dua combobox, di mana di dalamnya ada data yang sama, namun Anda tidak ingin data yang sama tersebut ditambahkan lagi ke dalam hasil penggabungan.

Langkah2::
1. Buat 1 Project baru dengan 1 Form.
2. Tambahkan 3 Combobox dan 2 Commandbutton.
3. Ketik coding berikut ke dalam editor form yang bertalian. Klik Command1 untuk melakukan penggabungan Combo1 dan Combo2. Klik Command2 untuk melihat hasilnya urut di Combo3. Ketik coding berikut ini pada Form.

Code:

Dim strData As String ‘Ini untuk menampung seluruh
‘data
Private Sub Command1_Click()
strData = “” ‘Mula-mula masih kosong, selalu!
‘Ulangi sebanyak jumlah data di Combo1
For i = 0 To Combo1.ListCount – 1
‘Tampung ke dalam variabel string, pisahkan dgn
‘koma
strData = strData & Combo1.List(i) & “,”
Next i
‘Tampilkan data yang sudah digabung dalam satu string
MsgBox strData, vbInformation, “Data di Combo1”
‘Berikut ini untuk memeriksa/membandingkan antara
‘data yang sudah ditampung di variabel string dengan
‘data yang ada di Combo2 (yang akan digabung)
For i = 0 To Combo2.ListCount – 1
‘Jika data/item di Combo2 tidak terdapat di dalam
‘variabel string tadi, tambahkan di bagian akhir
‘dari variabel string (= join)
If InStr(1, strData, Combo2.List(i)) < 1 Then
‘Tampilkan data yang tidak ada di variabel string
MsgBox Combo2.List(i), vbInformation, _
“Data di Combo2 yang tidak ada di Combo1”
‘Tambahkan di bagian akhir dari variabel string
‘dan dalam kasus ini, pisahkan dengan karakter
‘koma
strData = strData & Combo2.List(i) & “,”
End If
Next i
‘Berikut ini untuk mengambil data yang sudah digabung
‘seluruhnya (ingat, menggabungkan di sini artinya
‘sama dengan join; yaitu menambahkan data yang belum
‘ada, serta mengabaikan data yang sudah ada (sama))
‘dan membuang tanda koma di ujung paling kanan–>
‘untuk memudahkan dalam pemisahan data di Combo3)
If Right(strData, 1) = “,” Then
strData = Left(strData, Len(strData) – 1)
End If
‘Berikut ini untuk menampilkan data seluruhnya yang
‘sudah berhasil digabung ke dalam variabel string
MsgBox strData, vbInformation, _
“Data Hasil Gabung Combo1 dan Combo2”
End Sub
‘Prosedur berikut untuk memisahkan data yang ada di ‘dalam
variabel string hasil penggabungan ke dalam ‘Combo3. Agar
hasilnya urut di Combo3, jangan lupa set ‘property
‘Sort milik Combo3 menjadi True saat “design-time”
‘(Karena property Sort bersifat Read-Only, maka dia ‘hanya
dapat diset True saat “design-time”. Jika Anda ‘mengeset saat
“run-time”, maka akan terjadi error run-‘time).
‘(lihat pada Form_Load bagian bawah)
Private Sub Command2_Click()
Dim i As Integer
Dim arrData() As String
arrData = Split(strData, “,”)
‘Ulangi mulai batas bawah array sampai ke batas
‘atas array (untuk menampilkan data hasil
‘penggabungan).
For i = LBound(arrData) To UBound(arrData)
MsgBox arrData(i), vbInformation, _
“Data Hasil Penggabungan di Combo3”
Combo3.AddItem arrData(i)
Next
MsgBox “Klik Combo3 u/ melihat hasil secara urut!”, _
vbInformation, “Hasil Gabung ada di Combo3”
End Sub
Private Sub Form_Load()
‘Berikut ini data yang ada di Combo1
Combo1.Text = “”
Combo1.AddItem “1”
Combo1.AddItem “2”
Combo1.AddItem “3”
Combo1.AddItem “4”
Combo1.AddItem “7”
Combo1.AddItem “8”
Combo1.Text = Combo1.List(0) ‘Sorot data teratas
‘Berikut ini data yang ada di Combo2
Combo2.Text = “”
Combo2.AddItem “1”
Combo2.AddItem “3”
Combo2.AddItem “5”
Combo2.AddItem “6”
Combo2.AddItem “7”
Combo2.AddItem “8”
Combo2.Text = Combo2.List(0) ‘Sorot data teratas
‘Sedangkan Combo3 mula-mula masih kosong,
‘dan akan dijadikan tempat untuk menggabung data.
Combo3.Text = “” ‘Tempat hasil penggabungan (Join)
‘Perintah di bawah akan menyebabkan error-run-time
‘(Can’t assign to read-only property)
‘Combo3.Sorted = True ‘<– ditutup, hanya bisa saat
‘ design-time saja!

End Sub

Tinggalkan komentar

Belum ada komentar.

Comments RSS TrackBack Identifier URI

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s