2017-06-04 67 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