-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBindingDropDownButton.cs
48 lines (43 loc) · 1.38 KB
/
BindingDropDownButton.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Suconbu.Sumacon
{
class BindingDropDownButton<T> : ToolStripDropDownButton
{
public Dictionary<T, ToolStripDropDownItem> DataSource { get => this.dataSource; set => this.ChangeDataSource(value); }
public T Value { get => this.value; set => this.ChangeValue(value); }
Dictionary<T, ToolStripDropDownItem> dataSource;
T value;
protected override void OnDropDownItemClicked(ToolStripItemClickedEventArgs e)
{
this.Text = e.ClickedItem.Text;
this.value = (T)e.ClickedItem.Tag;
base.OnDropDownItemClicked(e);
}
void ChangeDataSource(Dictionary<T, ToolStripDropDownItem> dataSource)
{
this.DropDownItems.Clear();
foreach(var d in dataSource)
{
d.Value.Tag = d.Key;
this.DropDownItems.Add(d.Value);
}
this.dataSource = dataSource;
}
void ChangeValue(T value)
{
foreach(ToolStripDropDownItem item in this.DropDownItems)
{
if(((T)item.Tag).Equals(value))
{
item.PerformClick();
break;
}
}
}
}
}