WinForms C#中如何从*.msagl文件加载Graph并在GViewer显示?
解决MSAGL加载*.msagl文件到WinForms GViewer的问题
先修正代码中的语法错误
你的代码存在变量名错误:fileText应为file(前面读取文件内容的变量是file),这会直接导致编译失败,先修正这个问题。
解决GraphReader的构造函数与Read()方法错误(CS1729、CS1061)
出现这两个错误的核心原因是你引用的MSAGL版本与GitHub仓库文档的版本不匹配,或误用了命名空间。当前主流的MSAGL NuGet包(Microsoft.Msagl.GraphViewerGdi)已简化了图形加载逻辑,无需手动实例化GraphReader,直接使用Graph类的静态方法即可:
修正后的加载代码
private void loadGraphToolStripMenuItem_Click(object sender, EventArgs e) { if (openFileDialog.ShowDialog() == DialogResult.Cancel) { return; } string fileName = openFileDialog.FileName; // 直接通过Graph静态方法加载文件,自动处理格式解析 graph = Microsoft.Msagl.Drawing.Graph.Load(fileName); AppValues.DrawGraph(gGraphviewer, graph, pnlGraphDisplay); UpdateProperties(); graphIsInitialized(); }
如果需要从流中加载(比如内存流、资源流),可以使用:
using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { graph = Microsoft.Msagl.Drawing.Graph.Load(stream); }
调用GViewer工具栏的内置加载功能
如果你想直接复用GViewer自带的加载逻辑,无需自己实现文件选择和读取,直接调用其内置方法即可:
// 弹出内置的文件选择对话框并自动加载图形 gGraphviewer.LoadGraph();
优化DrawGraph函数避免重复添加控件
你的DrawGraph函数逻辑可行,但重复调用会导致GViewer控件被多次添加到面板中,建议增加判断:
public static void DrawGraph(GViewer gViewer, Graph graph, Panel panel) { gViewer.Graph = graph; gViewer.Dock = DockStyle.Fill; // 避免重复添加控件 if (!panel.Controls.Contains(gViewer)) { panel.Controls.Add(gViewer); } gViewer.OutsideAreaBrush = System.Drawing.Brushes.White; gViewer.ToolBarIsVisible = false; }
内容的提问来源于stack exchange,提问作者TA1989
相关产品推荐
相关产品推荐

