在GViewer中按指定坐标绘制节点失败,报NullReferenceException
解决GViewer中手动设置节点坐标时的NullReferenceException问题
问题原因
调用graph.AddNode("test")后,几何节点(GeometryNode)尚未生成——GeometryNode是在布局计算过程中创建的,此时直接调用graph.FindGeometryNode("test")会返回null,赋值Center属性自然触发空引用异常。
解决方案
直接操作添加节点时返回的Node对象的Position属性,而非提前访问未生成的GeometryNode。修改后的代码如下:
Form form = new (); GViewer viewer = new (); Graph graph = new ("graph"); // 获取添加的节点对象 Node testNode = graph.AddNode("test"); // 设置节点位置 testNode.Position = new Microsoft.Msagl.Core.Geometry.Point(100, 100); // 禁止自动计算布局,避免覆盖手动设置的位置 viewer.NeedToCalculateLayout = false; viewer.Graph = graph; form.SuspendLayout(); viewer.Dock = System.Windows.Forms.DockStyle.Fill; form.Controls.Add(viewer); form.ShowDialog();
关键说明
Node.Position是MSAGL提供的用于手动指定节点位置的属性,设置后会在布局初始化时同步到GeometryNode的Center。- 必须设置
viewer.NeedToCalculateLayout = false,否则GViewer会自动运行布局算法,覆盖你手动指定的坐标。
内容的提问来源于stack exchange,提问作者TA1989
相关产品推荐
相关产品推荐

