如何创建一个自定义图像按钮,由三个单独的按钮和添加事件处理程序组成

本文关键字:按钮 单独 三个 添加 事件处理 程序 何创建 一个 自定义 图像 创建 | 更新日期: 2023-09-27 18:22:24

我想制作一个Custom Image Button,它应该由三个带有click event的按钮组成。
我试图制作一个Customize button,但无法连接一个单独的event handler
对于每个按钮:

 class MulitButtons : UserControl
    {
        public Color bckColor1 = Color.Blue;       
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e); 
            Graphics graphics = e.Graphics; 
            RectangleF recF1 = new RectangleF(0, 0, 100, 40);
            RectangleF recF2 = new RectangleF(100, 0, 100, 40);
            RectangleF recF3 = new RectangleF(200, 0, 100, 40);   
            RectangleF[] arrRecF = { recF1, recF2, recF3 };  
            Pen pen = new Pen(Color.Black, 2);
            int fontHeight = 10;
            Font font = new Font("Arial", fontHeight);
            SolidBrush brush = new SolidBrush(bckColor1);    
            SolidBrush textBrush = new SolidBrush(Color.Black);  
            graphics.DrawRectangles(pen, arrRecF);
            graphics.DrawString(Text, font, textBrush, 10, 10);     
        }
    }


添加事件处理程序:

 MulitButtons objMltBtn = new MulitButtons();
 EventHandler handler= new EventHandler(but1_Click);
 objMltBtn.Click += handler;

请帮帮我。谢谢

如何创建一个自定义图像按钮,由三个单独的按钮和添加事件处理程序组成

如果我理解得很好,您希望发布内部按钮的Click事件。

解决方案1

这只是发布内部单击事件。

public event EventHandler Button1Click
{
    add { button1.Click += value; }
    remove { button1.Click -= value; }
}

解决方案2

如果你想控制调用,可以这样做:

public MultiButtons()
{
    InitializeComponents();
    button1.Click += ButtonClick;
    button2.Click += ButtonClick;
    button3.Click += ButtonClick;
}
// this handles all of your clicks
private void ButtonClick(object sender, EventArgs e)
{
    if (sender == button1)
        OnButton1Click(EventArgs.Empty);
    // TODO: the other buttons...
}
public event EventHandler Button1Click;
protected virtual void OnButton1Click(EventArgs e)
{
    var handler = Button1Click;        
    if (handler != null)
        handler(this, e);
    else
        // you can call some default action if there is no event subscription
        DefaultButton1Click();
}

更新:我刚刚看到你的评论:

我需要一个带有三个部分的自定义图像按钮,在每个部分上单击我想调用一个将执行一些操作的事件。

只需创建三个相邻的独立按钮,并在Paint中绘制它们,就好像它们是一个按钮一样。然后您可以使用上面的解决方案之一。