单击调用绘画按钮(_Paint on)
本文关键字:Paint on 调用 绘画 按钮 单击 | 更新日期: 2023-09-27 17:59:21
所以我在.NET 2.0中创建了一个自定义用户控件,这个用户控件基本上是一个组合的用户控件(上面有一张带标签的图片)。它的功能基本上就像一个按钮,可以点击等等。
现在我的问题是,无论出于什么原因,边框样式都不支持3d边框。。。
因此,当按钮被取消点击时,它应该具有Border3dStyle.凸起的外观。然后当它被按下时,它应该有Border3dStyle.Sunken的外观。
我通过重写OnPaint方法获得了Border3dStyle.Wraised。就像这样…
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
ControlPaint.DrawBorder3D(e.Graphics, this.ClientRectangle, Border3DStyle.Raised);
}
当点击按钮时,我想调用其他方法——这就是我认为可能有效的方法。
private void UserInkControl_Paint(object sender, PaintEventArgs e)
{
Rectangle borderRectangle = this.ClientRectangle;
ControlPaint.DrawBorder3D(e.Graphics, borderRectangle, Border3DStyle.Sunken);
}
我在加载事件中注册了它
private void UserInkControl_Load(object sender, EventArgs e)
{
this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserInkControl_Paint);
}
在触发单击事件时,如何调用UserInkControl_Paint?
Click
事件不适用于您尝试执行的操作,因为只有在按住鼠标按钮然后释放后才会调用该特定事件。您应该使用MouseDown
事件将布尔属性(例如_isDown
)设置为true
,然后调用.Refresh()
;使用MouseUp
事件设置_isDown = false;
,然后也只调用.Refresh()
。
在Paint
事件中,检查_isDown
属性并使用适当的参数调用DrawBorder3D
方法。
public void UserInkControl_Click(object sender, EventArgs ea)
{
UserInkControl.Refresh (); // Causes repainting immediately
// or
UserInkControl.Invalidate (); // Invalidates the whole painting surface,
//so when the message loop catches up, it gets repainted.
// There is also an overload of Invalidate that
// lets you invalidate a particular part of the button,
// So only this area is redrawn. This can reduce flicker.
}
您可以调用"myControl.Refresh()"。它将重新绘制整个控件。
您正在寻找Invalidate
方法。