问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#/VS控件

发布网友 发布时间:2022-05-18 21:21

我来回答

2个回答

热心网友 时间:2023-11-05 06:10

需要自定义菜单,继承MenuStrip
public partial class CustomContrls_MenuStrip : MenuStrip
{
private Color _themeColor = Color.Red;
public CustomContrls_MenuStrip()
{
//InitializeComponent();
this.Renderer = new CustomProfessionalRenderer(_themeColor);
}
public Color ThemeColor
{
get { return _themeColor; }
set
{
_themeColor = value;
this.Renderer = new CustomProfessionalRenderer(_themeColor);
}
}
}

public class CustomProfessionalRenderer : ToolStripProfessionalRenderer

//给这个类添加主题颜色的字段 重载其构造函数给字段赋值 以便创建不同色调的渲染对象
{

private Color _color = Color.Red;
public CustomProfessionalRenderer()
: base()
{
}
public CustomProfessionalRenderer(Color color)
: base()
{
_color = color;
}

//添加一个辅助函数 用来获取圆角矩形区域

//获取圆角矩形区域 radius=直径
public static GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
{
int diameter = radius;
Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter));
GraphicsPath path = new GraphicsPath();

// 左上角
path.AddArc(arcRect, 180, 90);

// 右上角
arcRect.X = rect.Right - diameter;
path.AddArc(arcRect, 270, 90);

// 右下角
arcRect.Y = rect.Bottom - diameter;
path.AddArc(arcRect, 0, 90);

// 左下角
arcRect.X = rect.Left;
path.AddArc(arcRect, 90, 90);
path.CloseFigure();
return path;
}

//然后重写基类的一些方法 更改外观 渲染背景

//渲染背景 包括menustrip背景 toolstripDropDown背景
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
{
ToolStrip toolStrip = e.ToolStrip;
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;//抗锯齿
Rectangle bounds = e.AffectedBounds;
LinearGradientBrush lgbrush = new LinearGradientBrush(new Point(0, 0), new Point(0, toolStrip.Height), Color.FromArgb(255, Color.White), Color.FromArgb(150, _color));
if (toolStrip is MenuStrip)
{
//由menuStrip的Paint方法定义 这里不做操作
}
else if (toolStrip is ToolStripDropDown)
{
int diameter = 10;//直径
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(Point.Empty, toolStrip.Size);
Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter));

path.AddLine(0, 0, 10, 0);
// 右上角
arcRect.X = rect.Right - diameter;
path.AddArc(arcRect, 270, 90);

// 右下角
arcRect.Y = rect.Bottom - diameter;
path.AddArc(arcRect, 0, 90);

// 左下角
arcRect.X = rect.Left;
path.AddArc(arcRect, 90, 90);
path.CloseFigure();
toolStrip.Region = new Region(path);
g.FillPath(lgbrush, path);
}
else
{
base.OnRenderToolStripBackground(e);
}
}

//渲染边框 不绘制边框
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
//不调用基类的方法 屏蔽掉该方法 去掉边框
}

//渲染箭头 更改箭头颜色
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
{
e.ArrowColor = _color;
base.OnRenderArrow(e);
}

//渲染项 不调用基类同名方法
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
Graphics g = e.Graphics;
ToolStripItem item = e.Item;
ToolStrip toolstrip = e.ToolStrip;

//渲染顶级项
if (toolstrip is MenuStrip)
{
LinearGradientBrush lgbrush = new LinearGradientBrush(new Point(0, 0), new Point(0, item.Height), Color.FromArgb(100, Color.White), Color.FromArgb(0, Color.White));
SolidBrush brush = new SolidBrush(Color.FromArgb(255, Color.White));
if (e.Item.Selected)
{
GraphicsPath gp = GetRoundedRectPath(new Rectangle(new Point(0, 0), item.Size), 5);
g.FillPath(lgbrush, gp);
}
if (item.Pressed)
{
////创建上面左右2圆角的矩形路径
//GraphicsPath path = new GraphicsPath();
//int diameter = 8;
//Rectangle rect = new Rectangle(Point.Empty, item.Size);
//Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter));
//// 左上角
//path.AddArc(arcRect, 180, 90);
//// 右上角
//arcRect.X = rect.Right - diameter;
//path.AddArc(arcRect, 270, 90);
//path.AddLine(new Point(rect.Width, rect.Height), new Point(0, rect.Height));
//path.CloseFigure();
////填充路径
//g.FillPath(brush, path);
g.FillRectangle(Brushes.White, new Rectangle(Point.Empty, item.Size));
}
}
//渲染下拉项
else if (toolstrip is ToolStripDropDown)
{
g.SmoothingMode = SmoothingMode.HighQuality;
LinearGradientBrush lgbrush = new LinearGradientBrush(new Point(0, 0), new Point(item.Width, 0), Color.FromArgb(200, _color), Color.FromArgb(0, Color.White));
if (item.Selected)
{
GraphicsPath gp = GetRoundedRectPath(new Rectangle(0, 0, item.Width, item.Height), 10);
g.FillPath(lgbrush, gp);
}
}
else
{
base.OnRenderMenuItemBackground(e);
}
}

//渲染分界线

protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
{
Graphics g = e.Graphics;

LinearGradientBrush lgbrush = new LinearGradientBrush(new Point(0, 0), new Point(e.Item.Width, 0), _color, Color.FromArgb(0, _color));
g.FillRectangle(lgbrush, new Rectangle(3, e.Item.Height / 2, e.Item.Width, 1));
//base.OnRenderSeparator(e);
}

//渲染图片区域 下拉菜单左边的图片区域
protected override void OnRenderImageMargin(ToolStripRenderEventArgs e)
{
//base.OnRenderImageMargin(e);
//屏蔽掉左边图片竖条
}
}

热心网友 时间:2023-11-05 06:10

对于位置的设置你放在哪里他就显示在哪里,背景颜色的话,你可以调用picturebox的背景颜色赋值给Menustrip的背景颜色,不就可以了啊追问为什么我把picturebox弄到最大后再拖Menustrip到界面上,Menustrip显示在picturebox后面啊

追答因为picturebox把前面的部分给填满了,所以就显示在后面了,你可以现放Menustrip
在放picturebox

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
正确的调搓丝板方法 正确的调搓丝板方法介绍 搓丝板失效的多种原因及如何预防? 副职领导签批公文技巧 上级审批意见怎么写 怎么卸摘网吧电脑上的“世界之窗”浏览器 怎么才能卸载世界之窗浏览器? 麻烦帮我翻译两个句子,谢谢,谢谢。 ...结构层次和结构关系 原理讲下 谢谢谢谢 老师讲过了我么听懂啊_百度... 这两个句子的主干是什么,谢谢谢谢 为什么会有人选择一辈子不结婚呢? 中国哪些大学开了建筑可视化专业研究生? 哈飞路宝小轿车 vs2010中数据控件有哪些?为什么在工具栏里找不到connection对象?麻烦高手详述一下各数据控件的基本用法 急!有没有描写水的词语 在郑州益贝水趣被骗了,老板跑了怎么维权?我看到南阳那边的益贝水趣的消费者也很多被骗了,都同一个老板 C# VS控件 哈飞路宝汽车怎么样? vs2008工具箱中的控件没有书上介绍的属性 谐趣园八趣 长得像哈飞路宝但是标志是三菱的两厢车是什么车? 什么叫淑女 哈飞路宝质量好吗 家庭礼仪的重要作用 vs2005工具箱各控件功能 哈飞路宝车门玻璃升降器钢丝绳可以更换吗 哈飞路宝几个油 淑女的概念是什么 哈飞路宝多少钱? 医生属于文科生还是理科生 大家帮我分析一下,哈飞路宝这个车好不好啊? 描写水的好词有什么 VS软件里面的选项卡控件有什么属性? 关于水的用语 vs控件变量是什么 建筑设计及其理论专业的哪些学校考研比较好考? vs 自定义控件如何编写事件 关于水的词语. 急求:描写水的词语 有没有VS2010控件使用的详细介绍啊?速求!(所有控件都有) 关于赞美水的词语 关于水的好词 VS中控件的使用 vs2013工具箱控件是什么意思 vs2008控件说明 描写水的词语哪有哪些 vs2010中控件有多少个? 谁有VS2005里所有控件的详细介绍 二战英军的17磅炮为什么是二战最好的反坦克炮 今天突然发现自己不会做仰卧起坐。帮帮我。 求教二战各国炮兵的摩托化水平