[Sample dari aplikasi ini bisa di download disini.]

Kombinasi Textbox-Button biasanya banyak digunakan untuk menampilkan sebuah form dialog isian yang kemudian hasil output dari form dialog tersebut diletakkan di bagian textbox. Salah satu contoh yang paling banyak digunakan adalah SaveFileDialog, LoadFileDialog dan lain sebagainnya. Dan biasanya kita cukup meletakkan sebuah control button di sebelah control textbox, melakukan pengaturan antara kedua control tersebut (jarak, size, style etc.) dan selesailah.

 
[Textbox-Button yang berasal dari kombinasi Textbox dan Button control]

Kombinasi tersebut kemudian dijadikan UserControl sehingga dapat digunakan di berbagai project lainnya dengan lebih mudah.

ComboBox look alike

Sayangnya saya kurang puas, terutama karena kurangnya integrasi button dengan textbox. Saya ingin lebih mirip ComboBox yang merupakan standard dari Windows.Forms.

[Textbox-Button yang berasal dari ComboBox]

[1]

Yang pertama saya lakukan adalah meng-intercept event OnDropDown untuk menghindari munculnya bagian dropdown dari combobox. Ternyata tidak mudah dan masih selalu terlihat adanya bagian dari ComboBox yang muncul. Dan sayangnya nilai ini tidak boleh diberi angka 0.

protected override void OnDropDown(EventArgs e)

{

    // Make sure that no drop down shown

    this.DropDownWidth = 1;

    this.DropDownHeight = 1;

    base.OnDropDown(e);

}

[2]

Kemudian saya membuat event untuk meng-handle pada saat bagian button dari combobox di click oleh user.

public event EventHandler ButtonClick;

protected void OnButtonClick(EventArgs e)

{

    EventHandler handler = ButtonClick;

    if (handler != null)

    {

        handler(null, e);

    }

}

[3]

Terakhir, saya meng-intercept event OnClick dari ComboBox untuk menyelipkan code untuk memanggil event OnButtonClick. Hal ini bisa dideteksi dengan melakukan pemeriksaan terhadap properties DroppedDown dari ComboBox.

protected override void OnClick(EventArgs e)

{

    // Raise the ButtonClick only if the button is clicked

    if (this.DroppedDown)

    {

        this.DroppedDown = false;

        OnButtonClick(e);

    }

    base.OnClick(e);

}

[4]

Selanjutnya cukup melakukan kompilasi library dan TextBoxButton ini akan tersedia di Toolbox. Drag-drop ke bagian design dan anda dapat langsung menggunakannya.

[Pengembangan]

Masih banyak yang bisa dikembangkan. Karena TextBoxButton ini merupakan turunan dari ComboBox maka membuatnya menjadi data-aware control, padahal kita tidak memerlukannya. Serta beberapa fitur ComboBox lain yang tidak kita perlukan.

Bagi yang ingin mencobanya bisa download kode lengkap dan contoh penggunaannya disini.

Leave a Reply

Your email address will not be published. Required fields are marked *