0

我正在阅读本教程 http://chalaki.com/how-to-program-msagl-glee-to-create-hierarchical-graph-layouts/519/

使用代码示例。

在此处输入图像描述

我正在尝试使属性动态化(我希望以后能够从数据库中加载属性)

我努力了

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");

其中“test1”、“diamond”和“Red”值来自数据库。

4

1 回答 1

1

AColor不是string.

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

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

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

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

编辑

看起来他们使用的颜色类与 System.Drawing 中的颜色类不同。我在 MSDN 论坛上找到了一个例子:

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);

GitHub上有一些示例代码:

n2.Attr.Fillcolor = Microsoft.Msagl.Drawing.Color.Magenta;
于 2017-06-04T12:20:50.030 回答