2017-06-04 70 views
0

现在用的代码示例阅读本教程 http://chalaki.com/how-to-program-msagl-glee-to-create-hierarchical-graph-layouts/519/C#如何改变对象的属性动态地

enter image description here

想使属性动态(我希望能够从后一个数据库中加载的属性)

我曾尝试

string dColor = "Red"; 
string dShape = "Diamond"; 

Microsoft.Glee.Drawing.Node n2 = graph.FindNode(strNode2); 
n2.Attr.Fillcolor = Microsoft.Glee.Drawing.Color.dColor; 
n2.Attr.Shape = Microsoft.Glee.Drawing.Shape.dShape; 

,但它不工作,我如何做到这一点,甚至阅读有关动态做到这一点?

[ANSWER] 我不确定这是否是最好的方法,但它的工作原理。

──为颜色,我没有

using mColor = Microsoft.Msagl.Drawing.Color; 
using sColor = System.Drawing.Color; 

sColor c = sColor.FromName("Red"); 
graph.FindNode("test1").Attr.FillColor = new mColor(c.A,c.R,c.G,c.B); 

- 获得的形状,我没有

graph.FindNode("test1").Attr.Shape = (Shape) 
(int)Enum.Parse(typeof(Shape),"Diamond"); 

其中 “测试1”, “钻石” 和 “红色” 值来自数据库。

回答

1

A Color不是string

Microsoft.Glee.Drawing.Node n2 = graph.FindNode(strNode2); 
var someColor = System.Drawing.Color.Red; 
n2.Attr.Fillcolor = someColor; 

如果你要存储在数据库中的颜色,你可以使用对颜色的静态方法之一:

string dColor = "Red"; 
n2.Attr.Fillcolor = Color.FromName(dColor); 

如果你不坚持命名的颜色,也有Color.FromArgb(int);

编辑

看起来他们正在使用从一个在System.Drawin不同的颜色类在这里。我发现在MSDN论坛上an example

string color = "Red"; 
var cvtColor = new ColorConverter(); 
var sysColor = cvtColor.ConvertFromString(color); 
n2.Attr.Fillcolor = new Microsoft.Msagl.Drawing.Color(sysColor.R, sysColor.B, sysColor.G); 

有一些example code on GitHub

n2.Attr.Fillcolor = Microsoft.Msagl.Drawing.Color.Magenta; 
+0

我得到一个错误:CS0029 \t无法隐式转换类型 '的System.Drawing.Color' 到“Microsoft.Msagl。 Drawing.Color' – Law

+0

我希望你有一个IDE,你可以很容易地发现这个'Microsoft.Msagl.Drawing.Color'是如何工作的。如果没有,您可以使用ILSpy或dotPeek。我已经更新了我的答案。 – Laoujin