C#通过重写Panel改变边框颜色与宽度的方法
作者:我心依旧 发布时间:2021-07-09 05:57:52
标签:C#,Panel,边框
本文实例讲述了C#通过重写Panel改变边框颜色与宽度的方法。分享给大家供大家参考。具体实现方法如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
namespace ImageStudio
{
public class PanelEx : System.Windows.Forms.Panel
{
[DllImport("user32.dll")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
[DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc);
private Color _borderColor = Color.Black;
private int _borderWidth = 1;
//
// 摘要:
// 获取或设置控件的边框颜色。
//
// 返回结果:
// 控件的边框颜色 System.Drawing.Color。默认为 System.Drawing.Color.Black
// 属性的值。
[Description("组件的边框颜色。"), Category("Appearance")]
public Color BorderColor
{
get
{
return _borderColor;
}
set
{
_borderColor = value;
this.Invalidate();
}
}
//
// 摘要:
// 获取或设置控件的边框宽度。
//
// 返回结果:
// 控件的边框宽度 int。默认为 1
// 属性的值。
[Description("组件的边框宽度。"), Category("Appearance")]
public int BorderWidth
{
get
{
return _borderWidth;
}
set
{
_borderWidth = value;
this.Invalidate();
}
}
public PanelEx()
{
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, false);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.Paint+=new PaintEventHandler(PanelEx_Paint);
}
private void PanelEx_Paint(object sender, PaintEventArgs e)
{
if (this.BorderStyle == BorderStyle.FixedSingle)
{
IntPtr hDC = GetWindowDC(this.Handle);
Graphics g = Graphics.FromHdc(hDC);
ControlPaint.DrawBorder(
g,
new Rectangle(0, 0, this.Width, this.Height),
_borderColor,
_borderWidth,
ButtonBorderStyle.Solid,
_borderColor,
_borderWidth,
ButtonBorderStyle.Solid,
_borderColor,
_borderWidth,
ButtonBorderStyle.Solid,
_borderColor,
_borderWidth,
ButtonBorderStyle.Solid);
g.Dispose();
ReleaseDC(Handle, hDC);
}
}
}
}
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 它可以做什么?它做的事情当然是生成新类或修改原始的类,比如你遇到这样的情况下就可以使用:反射好慢,曾见过一个大厂大量是Gson,由于Gson
- 需求:键盘录入一个月份,输出该月份对应的季节。一年有四季3,4,5 春季6,7,8 夏季9,
- 简单介绍快速排序(Quicksort) 是对 冒泡排序的一种改进。基本思想快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首
- 本文实例讲述了C#保存listbox中数据到文本文件的方法。分享给大家供大家参考。具体实现方法如下:private void SaveLst
- 一、在GitHub上创建一个OAuth二、OAuth的原理Spring官方文档三、OkHttp的使用OkHttp官方网站1.Post代码示例
- 1.aar包是android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android
- WinForm RichTextBox文本动态滚动显示文本方在RichTextBox动态显示一些文本信息时,需要一些设置,显示当前要显示的字
- 1.概述最近一直都在带实习生做项目,发现自己好久没有写博客了,这几天更新会比较频繁,今天玩QQ的时候发现QQ主页菜单滑动效果早就变了,实在忍
- 在C#winform程序开发过程中,我们可能需要定期去设定一些变化的值,但这些值在程序中又要被用来做对比或参照,比如我们设定一个固定值让程序
- 相信很多人在读取文件的时候都会碰到乱码的情况,所谓乱码就是错乱的编码的意思,造成乱码的是由于编码不一致导致的。演示程序:新建3个文本文件:编
- 本文实例讲述了C#实现字符串与图片的Base64编码转换操作。分享给大家供大家参考,具体如下:using System;using Syst
- 本文实例为大家分享了WPF实现半圆形导航菜单的具体代码,供大家参考,具体内容如下实现效果如下:思路:扇形自定义控件组合成半圆型菜单,再通过c
- 在ajaxcontroltoolkit-a2a6dc6854e0\Client\MicrosoftAjax.Extended\Extende
- System.getProperty()的作用及使用最近在看一些代码时,很多地方都用到了System.getProperty()、Syste
- 由于大多数便携式设备支持浏览图片而不支持浏览PowerPoint 文件,所以相比较而言,图像对于用户而言更加友好。除此之外,将PowerPo
- Java-Web获取客户端真实IP:发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限
- 制作开机Logo 方法一: Drivers/video/logo/logo_linux_clut224.ppm是默认的启
- 本文实例分析了Android多线程。分享给大家供大家参考,具体如下:在Android下面也有多线程的概念,在C/C++中,子线程可以是一个函
- nacos使用占位符${}进行参数配置的方法有的时候,我们的nacos会出现一个配置文件里,有多个配置项对应的值都是一样的,这个时候naco
- 在之前我们分析了Android6.0系统在启动时安装应用程序的过程,这些应用程序安装好之后,Launcher应用就负责把它们在桌面上展示出来