WinForms helper library untuk mengelola ToolStripDropDownButton sebagai Single Selection dan Multiple Selection dengan state yang konsisten.
Library ini hanya bertanggung jawab pada:
- pembuatan menu dropdown
- manajemen state selection
- pengiriman hasil selection melalui event
Library ini TIDAK menangani:
- database
- business logic
- filtering data
- side effects aplikasi
- Single selection dropdown
- Multiple selection dropdown
- Opsi "All" (opsional)
- Event-driven
- Reusable
- Tidak bergantung pada struktur database
Tambahkan project atau DLL Magic.SelectionButtonNET ke solusi WinForms Anda.
using Magic.SelectionButtonNET;Single| Property | Description |
|---|---|
| ToolStripDropDownButton | Target dropdown UI |
| ItemData | Data pilihan (ID → Text) |
| SelectedItemId | ID terpilih (input & output) |
event Action<SelectedMenuItemEventArgs> SelectedMenuItemEventEvent SelectedMenuItemEvent mengirimkan object SelectedMenuItemEventArgs dengan properti berikut:
| Property | Type | Description |
|---|---|---|
| FirstTime | bool | true jika event berasal dari proses inisialisasi, false jika berasal dari interaksi user |
| SelectedItemId | int | ID item terpilih (Single Selection) |
| SelectedText | string | Text item terpilih |
Event dipanggil sekali ketika inisialisasi dan setiap kali selection berubah. Pembedanya adalah property FirstTime dari SelectedMenuItemEventArgs.
var single = new Single
{
ToolStripDropDownButton = campaignsButton,
ItemData = new Dictionary<int, string>
{
{1, "Campaign A"},
{2, "Campaign B"},
{3, "Campaign C"}
},
SelectedItemId = 2
};
single.SelectedMenuItemEvent += e =>
{
// Abaikan event inisialisasi
if (e.FirstTime) return;
Console.WriteLine($"User selected ID: {e.SelectedItemId}");
};
single.InitializeToolStripMenu();Multiple| Property | Description |
|---|---|
| ToolStripDropDownButton | Target dropdown UI |
| ItemData | Data pilihan (ID → Text) |
| SelectedItemIds | ID terpilih (input & output) |
| UseAll | Aktifkan menu "All" |
Jika UseAll = true dan All dipilih:
SelectedItemIds = new List<int> { -1 };Jika semua item dipilih manual:
SelectedItemIds = new List<int> { -1 };Jika sebagian item dipilih:
SelectedItemIds = new List<int> { 1, 3, 5 };event Action<SelectedMenuItemEventArgs> SelectedMenuItemEventEvent SelectedMenuItemEvent mengirimkan object SelectedMenuItemEventArgs dengan properti berikut:
| Property | Type | Description |
|---|---|---|
| SelectedItemIds | List | Daftar ID terpilih (Multiple Selection) |
Event dipanggil setiap kali selection berubah.
var multiple = new Multiple
{
ToolStripDropDownButton = groupButton,
ItemData = new Dictionary<int, string>
{
{1, "Group A"},
{2, "Group B"},
{3, "Group C"}
},
SelectedItemIds = new List<int> { 1, 3 },
UseAll = true
};
multiple.SelectedMenuItemEvent += e =>
{
if (e.SelectedItemIds.Contains(-1))
Console.WriteLine("All selected");
else
Console.WriteLine(string.Join(", ", e.SelectedItemIds));
};
multiple.InitializeToolStripMenu();-
Event
SelectedMenuItemEventselalu dipanggil satu kali saat proses inisialisasi pada classSingledenganFirstTime = true -
Event berikutnya selalu berasal dari interaksi user dengan
FirstTime = false -
Library hanya mengatur UI dan state selection
-
Tidak menyimpan data eksternal
-
Semua hasil selection dikirim lewat event
-
Aman digunakan ulang oleh developer lain
-
Event
SelectedMenuItemEventselalu dipanggil satu kali saat inisialisasi pada classSingle -
Developer wajib memeriksa
FirstTimejika hanya ingin merespon interaksi user
- Semua input property harus diset sebelum memanggil
InitializeToolStripMenu() - Jangan menaruh logic database di dalam class library ini
Internal / Private Library