C#,WINFORM中如何实现类似WORD工具栏中选择颜色按钮的效果?
在WINFORM中,我想实现点击工具栏中的按钮,弹出颜色选择。类似于WORD工具栏中“选择颜色”按钮的效果(如图所示)。曾考虑用tabControl控件,但它无法设置透明...
在WINFORM中,我想实现点击工具栏中的按钮,弹出颜色选择。类似于WORD工具栏中“选择颜色”按钮的效果(如图所示)。曾考虑用tabControl控件,但它无法设置透明。请高人指点啊,先谢谢了!!
先100分,如果同时解决下图中选不同颜色时,A下面的颜色条也能跟着变色,再追加分数,多少您来定。
谢谢大家回答,但我就想形成图示效果!因为象线型、线粗、箭头样式……都与此类似。该问题只是以“选择颜色”为例,问如何实现图示效果:点工具栏按钮、出现以图标显示的按钮选项,供选择。没弄懂题目的,可去看看WORD工具栏里象字体颜色、线条颜色、线型……等按钮。 展开
先100分,如果同时解决下图中选不同颜色时,A下面的颜色条也能跟着变色,再追加分数,多少您来定。
谢谢大家回答,但我就想形成图示效果!因为象线型、线粗、箭头样式……都与此类似。该问题只是以“选择颜色”为例,问如何实现图示效果:点工具栏按钮、出现以图标显示的按钮选项,供选择。没弄懂题目的,可去看看WORD工具栏里象字体颜色、线条颜色、线型……等按钮。 展开
3个回答
展开全部
private void Form1_Load(object sender, EventArgs e)
{
myComboBox.Items.Clear();
Array allColors = Enum.GetValues(typeof(KnownColor)); //获得系统颜色集合
foreach (KnownColor var in allColors)
{
myComboBox.Items.Add(var.ToString()); //加载该选项框的子项
}
myComboBox.SelectedIndex = 1;
}
private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
//判断是否需要重绘
if (e.Index >= 0)
{
string colorName = myComboBox.Items[e.Index].ToString(); //子项的颜色名
SolidBrush brush = new SolidBrush(Color.FromName(colorName)); //画笔
Font font = new Font("宋体", 9); //字体样式
Brush brushs = Brushes.Black;
Rectangle rect = e.Bounds; //获得需要重绘的区域
rect.Inflate(-2, -2); //缩放一定大小
Rectangle rectColor = new Rectangle(rect.Location,new Size(20,rect.Height));
e.Graphics.FillRectangle(brush, rectColor); // 填充颜色
e.Graphics.DrawRectangle(Pens.Black, rectColor); // 绘制边框
//绘制文字
e.Graphics.DrawString(colorName, font, brushs, (rect.X+22), rect.Y);
}
}
同时还需要设置该控件的DrawMode和DropDownStyle属性,类似的控件Listbox也可按同样方法实现颜色选择,DrawMode属性为NORMAL时,有选中效果,但自己绘制的选项则不会出现选中效果,若想实现,可在DrawItem中加入一个状态判定,如:
//绘制选中效果
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
SolidBrush brushItem = new SolidBrush(SystemColors.MenuHighlight); //画笔
Rectangle rectItem = e.Bounds;
e.Graphics.FillRectangle(brushItem, rectItem);
}
else
{
SolidBrush brushItem = new SolidBrush(SystemColors.Window); //画笔
Rectangle rectItem = e.Bounds;
e.Graphics.FillRectangle(brushItem, rectItem);
}
{
myComboBox.Items.Clear();
Array allColors = Enum.GetValues(typeof(KnownColor)); //获得系统颜色集合
foreach (KnownColor var in allColors)
{
myComboBox.Items.Add(var.ToString()); //加载该选项框的子项
}
myComboBox.SelectedIndex = 1;
}
private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
//判断是否需要重绘
if (e.Index >= 0)
{
string colorName = myComboBox.Items[e.Index].ToString(); //子项的颜色名
SolidBrush brush = new SolidBrush(Color.FromName(colorName)); //画笔
Font font = new Font("宋体", 9); //字体样式
Brush brushs = Brushes.Black;
Rectangle rect = e.Bounds; //获得需要重绘的区域
rect.Inflate(-2, -2); //缩放一定大小
Rectangle rectColor = new Rectangle(rect.Location,new Size(20,rect.Height));
e.Graphics.FillRectangle(brush, rectColor); // 填充颜色
e.Graphics.DrawRectangle(Pens.Black, rectColor); // 绘制边框
//绘制文字
e.Graphics.DrawString(colorName, font, brushs, (rect.X+22), rect.Y);
}
}
同时还需要设置该控件的DrawMode和DropDownStyle属性,类似的控件Listbox也可按同样方法实现颜色选择,DrawMode属性为NORMAL时,有选中效果,但自己绘制的选项则不会出现选中效果,若想实现,可在DrawItem中加入一个状态判定,如:
//绘制选中效果
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
SolidBrush brushItem = new SolidBrush(SystemColors.MenuHighlight); //画笔
Rectangle rectItem = e.Bounds;
e.Graphics.FillRectangle(brushItem, rectItem);
}
else
{
SolidBrush brushItem = new SolidBrush(SystemColors.Window); //画笔
Rectangle rectItem = e.Bounds;
e.Graphics.FillRectangle(brushItem, rectItem);
}
展开全部
在点击事件中写以下代码:
this.colorDialog1.AllowFullOpen = true;
this.colorDialog1.AnyColor = true;
this.colorDialog1.FullOpen = true;
this.colorDialog1.SolidColorOnly = false;
this.colorDialog1.ShowDialog();
this.textBox1.ForeColor = this.colorDialog1.Color;
备注:记得在写以上代码之前要加一个ColorDialog控件哦~
this.colorDialog1.AllowFullOpen = true;
this.colorDialog1.AnyColor = true;
this.colorDialog1.FullOpen = true;
this.colorDialog1.SolidColorOnly = false;
this.colorDialog1.ShowDialog();
this.textBox1.ForeColor = this.colorDialog1.Color;
备注:记得在写以上代码之前要加一个ColorDialog控件哦~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询