返回首页

{A}扩展颜色设置

回答

评论会员:OrcunKUTLU 时间:2011/12/18
?我喜欢这个,但它转换到VB净

进出口初学者,所以我不能转换。

谢谢大家
{S0}
评论会员:Kebrite 时间:2011/12/18
大家好,

阿里首先,我很欣赏这篇文章,因为它是非常有用的,"几乎"正是我一直在寻找。唯一的区别,我需要的是显示颜色的名称,当它被选中。所以我有以下一些变化,可以加强这方面的文章。

这段代码会做的是使较小的彩色标签,然后如果颜色是一个KnownColor它会显示在它旁边,否则将显示"自定义"的名称。


//paint the button

            private void ColorCombo_Paint(object sender, PaintEventArgs e)

            {

                Rectangle rect = new Rectangle((ClientRectangle.Right) - 18, ClientRectangle.Top, 18, ClientRectangle.Height);

                DrawArrow(e.Graphics, rect);

                Rectangle colorRect = new Rectangle(ClientRectangle.Left + 2, ClientRectangle.Top + 2, 20, ClientRectangle.Height - 7);

                //Rectangle colorRect = new Rectangle(ClientRectangle.Left + 5, ClientRectangle.Top + 5, ClientRectangle.Width - 21, ClientRectangle.Height - 11);

                DrawColor(e.Graphics, colorRect, selectedColor);

 

                String colorName = String.Empty;

                Boolean isKnownColor = GetKnownColor(selectedColor.ToArgb(), out colorName);

                if (!isKnownColor)

                    colorName = "Custom";

 

                e.Graphics.DrawString(colorName, this.Font, System.Drawing.Brushes.Black,

                    new RectangleF(colorRect.Left + colorRect.Width + 2, colorRect.Top, ClientRectangle.Width - colorRect.Width - 21, colorRect.Height));

 

            }

 

            public bool GetKnownColor(int iARGBValue, out string strKnownColor)

            {

                Color someColor;

 

                Array aListofKnownColors = Enum.GetValues(typeof(KnownColor));

                foreach (KnownColor eKnownColor in aListofKnownColors)

                {

                    someColor = Color.FromKnownColor(eKnownColor);

                    if (iARGBValue == someColor.ToArgb() && !someColor.IsSystemColor)

                    {

                        strKnownColor = someColor.Name;

                        return true;

                    }

                }

                strKnownColor = "";

                return false;

            }


感谢再次阿里和伟大的文章... ...我的投票5!!

欢呼声,
布伦丹
评论会员:yourwise 时间:2011/12/18
fdewe
评论会员:masonmccuskey 时间:2011/12/18
究竟是我所需要的,工作的开箱。张贴此感谢
评论会员:。AndrusM 时间:2011/12/18
?如何把这个控制的任何示例代码的WinForms的DataGridView列

它不从TextBox也不ComboBox的继承,所以标准的DataGridView列类型不能使用。

安德鲁斯。

安德鲁斯
评论会员:阿里Rafiee 时间:2011/12/18
我使用Joes放置在一个DataGridView的ComboBox(])的方法,与我取代他的控制,它工作得很好。 (我不得不做一些改变他的肤色细胞油漆的常规,以显示我的风格,而不是颜色的名称)。但是如果你想访问的CheckBox按钮本身,你可以经常去一个级别的ColorComboButton。将其更改为公众和使用,为您的色彩控制,ColorComboBox类只是包装直通隐藏用户控制按钮的属性,因为它需要该按钮没有文字,和AutoSize是假的,并推一样风格进行设置。

Joes方法的唯一的一点是,它有三个点击下拉ComboBox的。我一直没能算出这个为什么还。 (我仍然缓慢,当它。NET)
卢旺达解放军。的Visual C MVP
评论会员:AndrusM 时间:2011/12/18
谢谢你答复

你可以发布您的DataGrdiView ColorCombo实施吗?乔的组合使用只VB源代码控制,但我想留在纯C#。

我使用EditOnEnter编辑模式,希望这消除了需要additonal点击。

安德鲁斯
评论会员:阿里Rafiee 时间:2011/12/18
试试这个:{A3}
卢旺达解放军。的Visual C MVP
评论会员:AndrusM 时间:2011/12/18
谢谢

我的网格绑定到实体的属性

公共十进制?的BackColor {;}

存储为十进制值的颜色。我的使用方法

静态颜色GetColor(十进制?COL)
{
 0; (COL == NULL)
 0;
抛出新的ArgumentNullException("COL");   ; 返回System.Drawing.Color.FromArgb((INT)COL放大器; 0xFF的,
(INT)COL GT,GT; 8安培; 0xFF的,(INT)COL GT,GT,16);
}

将此转换为。净色,在需要的时候。
我尝试此列,但您的样本,得到了在
异常
ColorPickerColumn.cs行
DrawColor(图形,colorRect,(颜色)值);
如何使用十进制的颜色值SAMPE?

System.InvalidCastException was unhandled by user code

  Message="Specified cast is not valid."

 

  StackTrace:

       at ColorPickerCombo.ColorPickerCell.Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, Int32 rowIndex, DataGridViewElementStates elementState, Object value, Object formattedValue, String errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) in 

...


安德鲁斯
评论会员:阿里Rafiee 时间:2011/12/18
我想这种变化:

/ /调用您GetColor改变颜色值从十进制
DrawColor(图形,colorRect,GetColor(值))
卢旺达解放军。的Visual C MVP
评论会员:AndrusM 时间:2011/12/18
谢谢。
颜色组合框出现。许多可能的网格行的颜色未指定(值是null或0米)
在这种情况下,丑陋的黑色rectange所示。如何改变这种情况下,显示更多更好的东西吗?
现在我改变行看起来

& #160;DrawColor(图形,colorRect,Core.GetColor((十进制)值))
我用下面的行来存储它OnCellValuePushed()方法返回对象:

entityTmp.Backcolor =((彩色)e.Value)。ToArgb()的ToString ());{ BR}
选择一些色彩组合后,我得到了异常

System.ArgumentException是未处理的用户代码

消息="值"-256"是无效的"蓝"。,"蓝"应大于或等于0且小于或等于255。"
在我此行的方法的行
调用
返回System.Drawing.Color.FromArgb((INT)COL放大器; 0xFF的,
(INT)COL GT,GT; 8安培; 0xFF的,(INT)COL GT,GT,16);

如何解决这个问题?

安德鲁斯。

安德鲁斯
评论会员:阿里Rafiee 时间:2011/12/18
,因为0代表Color.Black,你可能有其他的东西,而不是0来初始化你的细胞

这里是如何解决你的异常: System.Drawing.Color.FromArgb((INT)0xFF的山坳,山坳GT(INT); GT; 8 0xFF的,(INT)COL GT GT; 16 0xFF的);
(看来,你的COL变量的值,是大,是一种颜色。)

你为什么不简单地举行的颜色在你的细胞,为什么所有的转换来回之间的十进制和颜色?
卢旺达解放军。的Visual C MVP修改2008年7月11日,上周五,11:36
评论会员:AndrusM 时间:2011/12/18
好了,因为0代表Color.Black,你可能有其他的东西,而不是0来初始化你的细胞

其他的应用程序使用此的数据库结构。有大量其他应用程序所使用的现有数据amout。我不能轻易改变数据库和其他应用程序的数据。

如何使用"颜色设置"0和空?也许我必须使用黑色1。 1可能是黑色也不错。

这里是如何解决你的异常:

是的,这个修复的应用。但是如果我选择了红色,组合店黑色。如果我选择了蓝色,组合店红色等如何存储正确的颜色?
(看来,你的COL变量的值,是大,是一种颜色。)

颜色返回颜色组合使用我张贴的解析例行。可能是错误的解析例行。 Net使用alpha分量的可能,但这种格式只使用RGB分量,alpha必须是0,如果从组合分析。

颜色应为NUMERIC(8)(十进制)格式存储在数据库:

0x00BBGGRR

BB - 蓝色组件0 .. 0xFF的
GG - 格力电器元件0 .. 0xFF的
RR - 红色组件0 .. 0xFF的

0X00000000必须标记没有设置颜色。

你为什么不简单地举行的颜色在你的细胞,为什么所有的转换来回之间的十进制和颜色?

这个数据库是安装在大量的网站和其他应用程序使用它。我的计划和其他非NET应用程序的,必须用相同的颜色格式。

安德鲁斯
评论会员:AndrusM 时间:2011/12/18
。如何使用键盘上的按键来选择网格颜色

目前在电网:

1。第一次按空格键打开拾色器。其他空间栏冲压件不打开在同一单元格选择器更多。

2。 F4不打开颜色选择器

3。不能使用箭头键选择颜色。

安德鲁斯
评论会员:弗朗切斯科Giossi 时间:2011/12/18
您好!
第一,优秀的样品,我真的很感谢你写这个代码!

我的问题是:如何我可以使用一个网格绑定到数据集的DataGridView例如
如果我的数据集是从数据库中读取数据填充,我怎么改造一个字符串,说"红楼梦",颜色数据类型之前提交的数据网格?
我不能得到这个工作。
你的对象应该接受一个字符串,说"红色"或十六进制值(字符串类型),颜色数据类型转换,字符串和管理,在你的对象的颜色对象,然后返回一个字符串。
所以... ...我设法向我的DataTable(数据成员)的电网。我只是评论LoadGridValues​​FromTable例行呼叫,设置DataSource,这样的DataMember

dv.DataSource = dsData
dv.DataMember ="Colori";

... ...和处理内ColorPickerColumn类
油漆rounting字符串和颜色对象
/ / DrawColor(图形,colorRect,(颜色)值);

& #160; (价值!= NULL)
 0;{
颜色lclColor = Color.FromName((字符串)值);

DrawColor(图形,colorRect,lclColor); }

现在,为了简化用户体验,让我们说我设置EditMode(电网)"EditOnEnter"
(我可以跳过设置此属性,它不是强制性的)

现在... ...
- 电网装入的数据
- 酷!它的作品!
- 电网有3行3种颜色:红,绿,蓝。这是正确的,因为我的DataTable中,正是"红","绿色","蓝"
- 点击一个colorcell,说一个在第一行有红色作为值的字符串,它显示黑色(红色覆盖)。 (形状,颜色尚未显示尚未)
- 现在我单击第二排...相同的行为,黑再次
- 点击第三行设置,黑色以及
。 - 我最后3行设置为黑色

比方说,我挑一种颜色,第一,第二,第三行... ...无论什么时候,无论何时
这个新选定的颜色转贴我点击任何行。

任何想法为什么或如何解决这个问题呢?
代码来显示,如果需要的话。 感谢
评论会员:游客 时间:2011/12/18
弗朗切斯科Giossi任何一个想法

评论会员:凯雷姆Guemruekcue 时间:2011/12/18
嗨,

你没有良好的,...{ BR} 关于

凯雷姆

-----------------------
Beste Grüsse /问候/ Votre边devoue
凯雷姆Gümrükcü
最新的开源项目:CodePlex上,在SourceForge
-----------------------
他说:"这答复是按原样提供,不附带明示或暗示的保证。"