用户控制按钮和按钮事件

时间:2012-11-29 20:11:20

标签: c# user-controls

我目前正在制作我的第一个用户控件,现在遇到一些小问题。

该控件是一个自定义PictureBox,其中Button可以清除图片。我正在重写OnPaint(PaintEventArgs e)方法并使MouseEnterMouseLeave上的控件无效,以根据鼠标状态为控件绘制新边框。

这一切都应该工作。当我想在右上角添加一个按钮(相对于PictureBox)时会出现问题。

1 该按钮将没有相对于PictureBox的正确位置。它被放置在第0个Y坐标,这是正常的,但X坐标只在位置100,它应该是160.我在放置按钮时使用User Controls Width property,但它似乎是得到default value为100,而不是在表单上创建PictureBox的160。

CustomPictureBox cpic = new CustomPictureBox();
cpic.Location = new Point(20, 20);
cpic.Height = 80;
cpic.Width = 160;
this.Controls.Add(cpic);

按钮添加如下:

btnClear = new Button();
btnClear.Width = 20;
btnClear.Height = 20;
btnClear.Location = new Point(this.Width - btnClear.Width, 0);
btnClear.Text = "X";
this.Controls.Add(btnClear);

此DefaultValue来自何处以及它如何阻止控件使用它,而是遵循初始化控件的新实例时指定的宽度?

2 另一件事是我不能让按钮的事件工作。我一直在谷歌搜索并尝试了我能想到的一切,但事件仍然没有激发:(

必须可以直接从用户控件挂接MouseClick,MouseEnter和MouseLeave事件按钮吗?

如果您想查看完整代码,可以在此处找到: http://pastebin.com/vL14Q5CX

谢谢!

1 个答案:

答案 0 :(得分:0)

按钮未按预期对齐,因为:

  1. 按钮的位置正在用户控件的构造函数中设置
  2. 然后以
  3. 格式设置用户控件的宽度
  4. 未处理用户控件的Resize事件
  5. 在您的用户控件中连接Resize事件并更新按钮的位置,即:

    private void CustomPictureBox1_Resize(object sender, EventArgs e)
    {
        btnClear.Location = new Point(this.Width - btnClear.Width, 0);
    }
    

    按钮点击事件不起作用的原因是因为它们只冒泡到父用户控件;托管控件的表单不会收到它们。您需要在用户控件上创建一个新的自定义事件处理程序,您可以在用户控件的按钮单击事件中触发该处理程序。然后,您可以在表单上处理该自定义事件处理程序。

    HTH

相关问题