.NET C# OnPaint 重绘

调用窗体的OnPaint事件

protected override void OnPaint(PaintEventArgs e)

{

    base.OnPaint(e);
    //绘图

}

 

但是如何重写控件的OnPaint事件呢?比如说绘图是在PictureBox中绘制的,那么如何重写PictureBox的OnPaint事件?

我们无法直接在窗体的代码中重写控件的OnPaint事件,只能重写窗体的OnPaint事件。

重写控件的OnPaint事件,必须创建一个新的控件。这个控件继承Windows的控件,然后在创建的控件中重写控件的OnPaint事件。

 

以PictureBox为例:

//定义一个新的控件,继承PictureBox控件

public class myPictureBox : PictureBox
{

//自定义控件的构造函数

public myPictureBox()

{    }

//重写控件的OnPaint属性

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

//绘图

}

}

使用这种方法,就可以重写任何一个控件的OnPaint事件了。 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在.net Winform中可以使用Invalidate()方法来滚动条。Invalidate()方法会强制窗体,滚动条也会随之。 例如: ``` this.Invalidate(); ``` 或者: ``` this.scrollBar1.Invalidate(); ``` 也可以在给定的矩形区域内,如: ``` this.Invalidate(new Rectangle(0,0,100,100)); ``` 这样会使得左上角(0,0) 和 右下角 (100,100) 之间的矩形。 ### 回答2: 在.NET WinForm中,如果你想要一个滚动条,你可以使用自定义的画逻辑来替换默认的滚动条样式。 首先,你需要继承自ScrollBar控件,并写它的OnPaint方法来实现自定义的画逻辑。你可以在这个方法中使用Graphics对象来制滚动条的各个部分,比如滑块、滑块轨道和箭头等。 下面是一个示例代码: ```csharp using System; using System.Drawing; using System.Windows.Forms; public class CustomScrollBar : ScrollBar { protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); // 获取Graphics对象 Graphics g = e.Graphics; // 制滚动条的背景 g.FillRectangle(Brushes.White, ClientRectangle); // 制滑块轨道 Rectangle trackRect = new Rectangle(0, 0, Width, Height); g.FillRectangle(Brushes.LightGray, trackRect); // 制滑块 float thumbHeight = (float)(Height * (double)LargeChange / (Maximum - Minimum + LargeChange)); float thumbTop = (float)((Height - thumbHeight) * (double)Value / (Maximum - Minimum)); RectangleF thumbRect = new RectangleF(0, thumbTop, Width, thumbHeight); g.FillRectangle(Brushes.Gray, thumbRect); // 制箭头 // ... } } ``` 在上面的示例中,我们首先创建了一个继承自ScrollBar的CustomScrollBar类。然后,我们写了OnPaint方法,并在这个方法中使用Graphics对象来制滚动条的各个部分。这个制逻辑可以根据你的需求来自定义,你可以添加更多的制代码来实现你想要的滚动条样式。 最后,当你需要使用这个自定义的滚动条时,只需要将CustomScrollBar控件添加到你的WinForm窗体上就可以了: ```csharp CustomScrollBar scrollBar = new CustomScrollBar(); this.Controls.Add(scrollBar); ``` 这样,你就可以使用自定义的制逻辑来滚动条了。 ### 回答3: 在.NET WinForms中,可以通过以下步骤来滚动条: 1. 创建一个继承自ScrollBar的自定义滚动条控件。 2. 在该自定义滚动条控件的构造函数中,设置控件的样式为UserPaint,以允许自定义制。 3. OnPaint方法,使用Graphics对象对滚动条进行制。 4. 使用以下方法来触发OnPaint方法的制: - 当滚动条发生变化时,例如滑块位置或大小发生变化时,调用Invalidate方法。 - 在滚动条控件的Resize事件中调用Invalidate方法,以确保在控件大小发生变化时制。 - 在滚动条控件的ValueChanged事件中调用Invalidate方法,以确保在滑块位置变化时制。 在OnPaint方法中,可以使用Graphics对象的各种图方法来制滚动条的背景、滑块、箭头等元素。可以根据需要使用不同的颜色、字体和样式进行制,以达到自定义滚动条的效果。 需要注意的是,在制滑块时,需要根据滚动条的值和范围计算出滑块的位置和大小。可以使用ScrollBar控件的Minimum、Maximum、Value和Visible属性来进行计算。 另外,还可以在滚动条的同时处理滚动条相关的鼠标事件,例如鼠标点击、拖动等,以实现滚动条的交互功能。 通过以上步骤,就可以实现在.NET WinForms中滚动条,以满足个性化的界面需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值