我正在尝试轻松制作自定义复选框。我想通过它的检查状态在每个复选框的顶部绘制一个图像。如何为所有复选框创建单个事件处理程序?我有很多复选框,我不想为它编写每个事件处理程序:
private void checkbox1_Paint(object sender, PaintEventArgs e)
{
Rectangle rect = new Rectangle(0, 0, 16, 16);
if (checkbox1.Checked)
{
e.Graphics.DrawImage(Properties.Resources.checkbox_checked, rect);
}
else
{
e.Graphics.DrawImage(Properties.Resources.checkbox_unchecked, rect);
}
}
private void checkbox2_Paint(object sender, PaintEventArgs e)
{
Rectangle rect = new Rectangle(0, 0, 16, 16);
if (checkbox2.Checked)
{
e.Graphics.DrawImage(Properties.Resources.checkbox_checked, rect);
}
else
{
e.Graphics.DrawImage(Properties.Resources.checkbox_unchecked, rect);
}
}
// etc...
答案 0 :(得分:4)
将此处理程序分配给所有复选框。请注意我如何将sender
转换为CheckBox
以获取触发事件的控件。
private void checkbox_Paint(object sender, PaintEventArgs e)
{
var checkbox = sender as CheckBox // Here you get the current checkbox
Rectangle rect = new Rectangle(0, 0, 16, 16);
if (checkbox.Checked)
{
e.Graphics.DrawImage(Properties.Resources.checkbox_checked, rect);
}
else
{
e.Graphics.DrawImage(Properties.Resources.checkbox_unchecked, rect);
}
}
答案 1 :(得分:1)
您可以多次使用相同的方法,只需在Paint事件中指定它(通过设计器或代码)。
要将当前复选框投射发件人设置为复选框。
private void checkbox1_Paint(object sender, PaintEventArgs e)
{
CheckBox chk = sender as CheckBox;
..
}
答案 2 :(得分:1)
我认为这是基于上下文的Windows窗体?
您选择每个checkbox
(您可以在表单设计器上进行多选),单击Properties
面板中的闪电,找到Paint事件并输入您的方法名称:{{1} }
,在那里。
答案 3 :(得分:0)
我实际上自己找到了答案。它比为每个复选框手动分配绘图事件更容易,因为它是以编程方式完成的。
public void SetAllCheckboxes(Control where)
{
foreach (Control control in where.Controls)
{
if (control.GetType().Name == "CheckBox")
control.Paint += new PaintEventHandler(this.checkbox_Paint);
else if (control.Controls.Count > 0)
SetAllCheckboxes(control);
}
}
然后只是在调用它:
SetAllCheckboxes(this);