下面是一些代碼段爲我控制家釀:
public partial class DaysOfWeekPicker : UserControl
{
public event EventHandler ValueChanged;
private DaysOfWeek myValue;
[DefaultValue (0)]
public DaysOfWeek Value
{
get { return myValue; }
set { myValue = value; RefreshData(); }
}
public DaysOfWeekPicker()
{
InitializeComponent();
}
private void DayOfWeekClick (object sender, EventArgs e)
{
if (Object.ReferenceEquals (sender, g_l_Sunday))
{
this.Value = this.Value^DaysOfWeek.Sunday;
}
else if (Object.ReferenceEquals (sender, g_l_Monday))
{
this.Value = this.Value^DaysOfWeek.Monday;
}
else if (Object.ReferenceEquals (sender, g_l_Tuesday))
{
this.Value = this.Value^DaysOfWeek.Tuesday;
}
else if (Object.ReferenceEquals (sender, g_l_Wednesday))
{
this.Value = this.Value^DaysOfWeek.Wednesday;
}
else if (Object.ReferenceEquals (sender, g_l_Thursday))
{
this.Value = this.Value^DaysOfWeek.Thursday;
}
else if (Object.ReferenceEquals (sender, g_l_Friday))
{
this.Value = this.Value^DaysOfWeek.Friday;
}
else if (Object.ReferenceEquals (sender, g_l_Saturday))
{
this.Value = this.Value^DaysOfWeek.Saturday;
}
}
private void RefreshData()
{
SetLabelDisplay (g_l_Sunday, (this.Value & DaysOfWeek.Sunday) == DaysOfWeek.Sunday);
SetLabelDisplay (g_l_Monday, (this.Value & DaysOfWeek.Monday) == DaysOfWeek.Monday);
SetLabelDisplay (g_l_Tuesday, (this.Value & DaysOfWeek.Tuesday) == DaysOfWeek.Tuesday);
SetLabelDisplay (g_l_Wednesday, (this.Value & DaysOfWeek.Wednesday) == DaysOfWeek.Wednesday);
SetLabelDisplay (g_l_Thursday, (this.Value & DaysOfWeek.Thursday) == DaysOfWeek.Thursday);
SetLabelDisplay (g_l_Friday, (this.Value & DaysOfWeek.Friday) == DaysOfWeek.Friday);
SetLabelDisplay (g_l_Saturday, (this.Value & DaysOfWeek.Saturday) == DaysOfWeek.Saturday);
if (this.ValueChanged != null) this.ValueChanged (this, EventArgs.Empty);
}
private void SetLabelDisplay (LinkLabel label, bool enabled)
{
if (enabled)
{
label.BackColor = Color.Black;
label.ForeColor = Color.White;
}
else
{
label.BackColor = Color.White;
label.ForeColor = Color.Black;
}
}
}
有可能是一個更好的辦法做到價值比較,但是這正是我很快想出了。
只要設計師的一部分,我不會把它放在這裏,因爲它的冗長,但它很簡單。每天都有一個LinkLabel,點擊事件設置爲DayOfWeekClick。每個LinkLabel都在(1,1)處,並且在兩個維度上都小於父面板的2個像素。每個父面板都有一個黑色的ForeColor,給出邊框效果。每個面板都設置爲DockStyle.Left,整體控制尺寸等同於panel.Width * 7,panel.Height。