Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有按钮和按钮事件的用户控件_C#_User Controls - Fatal编程技术网

C# 具有按钮和按钮事件的用户控件

C# 具有按钮和按钮事件的用户控件,c#,user-controls,C#,User Controls,我目前正在处理我的第一个用户控件,现在遇到一些小问题 该控件是一个自定义的图片盒,带有一个按钮,用于清除图片。我正在重写OnPaint(PaintEventArgs e)方法,并使MouseEnter和MouseLeave上的控件无效,以便根据鼠标状态为控件绘制新边框 这一切都是正常的。当我想在右上角(相对于PictureBox)添加一个按钮时,就会出现问题 1. 该按钮相对于PictureBox的位置不正确。它被放置在第0个Y坐标处,这很好,但X坐标仅在位置100处,应该是160。我在放置按钮

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

该控件是一个自定义的
图片盒
,带有一个
按钮
,用于清除图片。我正在重写
OnPaint(PaintEventArgs e)
方法,并使
MouseEnter
MouseLeave
上的控件无效,以便根据鼠标状态为控件绘制新边框

这一切都是正常的。当我想在右上角(相对于PictureBox)添加一个按钮时,就会出现问题

1. 该按钮相对于PictureBox的位置不正确。它被放置在第0个Y坐标处,这很好,但X坐标仅在位置100处,应该是160。我在放置按钮时使用了
User Controls Width属性
,但它似乎获得了
默认值
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事件

如果您想查看完整的代码,可以在此处找到:


谢谢!

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

  • 按钮的位置正在用户控件的构造函数中设置
  • 然后在表单中设置用户控件的宽度
  • 未处理用户控件的调整大小事件
  • 在用户控件中,连接调整大小事件并更新按钮的位置,即:

    private void CustomPictureBox1_Resize(object sender, EventArgs e)
    {
        btnClear.Location = new Point(this.Width - btnClear.Width, 0);
    }
    
    button click事件不起作用的原因是,它们只会冒泡到父用户控件;承载该控件的窗体将不会接收到它们。您需要在用户控件上创建一个新的自定义事件处理程序,从用户控件的button click事件中触发。然后处理该自定义事件在你的表格上没有处理程序


    HTH

    我知道Anchor属性,但不幸的是,这也不是问题所在。