GTK # Mono 튜토리얼 페이지의 코드 다음에 Nodeview + NodeStore를 만들었습니다! 내 변경 사항은 NodeView에 새 항목을 추가하고 상호 작용 가능하게하려고하는 단추를 추가하는 것이 었습니다. 내 문제는 NodeView 선택 변경 이벤트가 응용 프로그램을 충돌시키는 것입니다.GTK # Nodeview Nodestore는 항상 Null 참조를받습니다.
using System;
using Gtk;
public partial class MainWindow : Window
{
Button button;
NodeView nodeview;
NodeStore nodestore;
[TreeNode(ListOnly = true)]
public class MyTreeNode : TreeNode
{
public MyTreeNode(string artist)
{
Artist = artist;
}
[TreeNodeValue(Column = 0)]
public string Artist;
}
public MainWindow() : base(WindowType.Toplevel)
{
Build();
var vbox = new VBox();
nodeview = new NodeView();
// Create a column with title Artist and bind its renderer to model column 0
nodeview.AppendColumn("Artist", new CellRendererText(), "text", 0);
nodestore = new NodeStore(typeof(MyTreeNode));
nodestore.AddNode(new MyTreeNode("temp"));
nodeview.NodeStore = nodestore;
nodeview.Selection.Changed += Selection_Changed;
button = new Button("Add New!!");
button.Clicked += Button_Clicked;
vbox.PackStart(nodeview, true, true, 0);
vbox.PackStart(button, false, true, 0);
Add(vbox);
ShowAll();
}
void Button_Clicked(object sender, EventArgs e)
{
nodestore.AddNode(new MyTreeNode("temp"));
}
void Selection_Changed(object sender, EventArgs e)
{
NodeSelection selection = (NodeSelection)sender;
if (selection != null)
{
MyTreeNode node = (MyTreeNode)selection.SelectedNode;
var a = node.Artist;
}
}
protected void OnDeleteEvent(object sender, DeleteEventArgs a)
{
Application.Quit();
a.RetVal = true;
}
}
NodeView에서 노드를 선택하면 응용 프로그램이 예고없이 충돌합니다. 그런 다음 일부 디버깅을 통해 NodeSelection_Changed를 입력 할 때 NodeView의 NodeStore 변수가 항상 null이라는 사실을 알게되었습니다. 노드를 추가하는 중이지만 (노드 뷰에 렌더링됩니다).
완벽하게 작동하는 예제를 제공 할 수 있습니까? nodeStore가 NodeView와 연관되는 곳/시점은 분명하지 않습니다. Mono GTK # 샘플에서 생성되어 NodeView의 생성자로 전달됩니다. –
지금 전체 예제를 업로드했습니다! 같은 문제가 있습니다! 내가 할 수만 있다면 – xDGameStudios