[Gtk-sharp-list] Problems with TreeView

André Kuntze vision.mail at gmx.net
Mon Aug 15 14:35:08 EDT 2005


Hi everybody,

i am trying to do the following in mono using c# and gtk#: Having a
simple two column list with word and numbers. When you edit one field in
any column, write the new text into the edited field.

This must sound so newbish but i am struggeling with this a few hours
now and so i decided to ask some people in the know. Til now i got this:

** SNIP: CODE STARTS HERE


/*
*	Filename:	TreeViewTryOut.cs
*	Date:		15.08.2005
*
*	Description:	This program is a TryOut for the editable
*			TreeView - widget.
*			The rows in the TreeView are editable and should
*			take the new value, when entered.
*/

using System;
using Gtk;

class MainClass{
	
	// Make the variable store visible to the whole class to use it
	// in the code for the Edited event
	ListStore store;
	
	public static void Main(string [] args){
		Application.Init();

		// Definition of my window, which contains the editable
		// Two - Column - List
		Window window = new Window ("TreeView");
		window.DeleteEvent += Window_Deleted;

		VBox vertBox = new VBox();
		vertBox.BorderWidth = 6;

		window.Add(vertBox);


		// Definition of my TreeView
		TreeView treeView = new TreeView();
		treeView.HeadersVisible = true;

		vertBox.Add(treeView);


		// Definition of the colums
		TreeViewColumn column = new TreeViewColumn();
		column.Title = "Word";
		CellRendererText colText = new CellRendererText();

		// Here i add the editable flag and the Edited event
		colText.Editable = true;
		colText.Edited += Word_Edited;
		column.PackStart (colText, true);
		column.AddAttribute (colText, "text", 0);
		treeView.AppendColumn (column);

		column = new TreeViewColumn();
		column.Title = "Page";
		colText = new CellRendererText();

		// Here i add the editable flag and the Edited event
		colText.Editable = true;
		colText.Edited += Word_Edited;
		column.PackStart (colText, true);
		column.AddAttribute (colText, "text", 1);
		treeView.AppendColumn (column);


		// Definition of the field types
		ListStore store = new ListStore (typeof (string), typeof
			(string));
		treeView.Model = store;


		// Putting stuff in the list
		TreeIter iterator = new TreeIter();
		iterator = store.AppendValues("ChangeMe", "1");


		// Show the not working stuff :-/
		window.ShowAll();
		Application.Run();
	}


	// My not working code, when a field is edited
	static void Word_Edited (object o, EditedArgs e){
		// When edited get me the current field
		TreeIter iterator;
		TreePath path = new TreePath(e.Path);

		// Try to write the new entry to the field and start
		// to crash awfully when using static
		store.GetIter(out iterator, path);
		store.SetValue(iterator, 0, e.NewText);
	}


	static void Window_Deleted (object o, DeleteEventArgs e){
		Application.Quit();
	}
}

** SNIP: CODE ENDS HERE



which gives me a crying compiler like this:

** SNIP: STARTS CRYING HERE

andre at gremLin:~/programming/mono/IndexTool$ mcs -pkg:gtk-sharp
TreeViewTryOut.csTreeViewTryOut.cs(27) error CS0103: The name `v' could
not be found in `MainClass'
TreeViewTryOut.cs(67) warning CS0219: The variable 'iterator' is
assigned but its value is never used
TreeViewTryOut.cs(84) error CS0120: An object reference is required for
the non-static field `store'
TreeViewTryOut.cs(85) error CS0120: An object reference is required for
the non-static field `store'
TreeViewTryOut.cs(15) warning CS0169: The private field
'MainClass.store' is never used
Compilation failed: 3 error(s), 2 warnings

** SNIP: STOPS CRYING HERE


I think the problem so far is, that my store variable is used in Main
which is static. But when i make store static and edit some entry the
program crashes hard like:


** SNIP: BAD CRASH STARTS HERE

andre at gremLin:~/programming/mono/IndexTool$ mono TreeViewTryOut.exe

Unhandled Exception: System.Reflection.TargetInvocationException:
Exception has been thrown by the target of an invocation. --->
System.NullReferenceException: Object reference not set to an instance
of an object
in <0x0004d> MainClass:Word_Edited (System.Object o, Gtk.EditedArgs e)
in <0x00000> <unknown method>
in (wrapper managed-to-native)
System.Reflection.MonoMethod:InternalInvoke (object,object[])
in <0x0006f> System.Reflection.MonoMethod:Invoke (System.Object obj,
BindingFlags invokeAttr, System.Reflection.Binder binder,
System.Object[] parameters, System.Globalization.CultureInfo culture)---
End of inner exception stack trace ---

in <0x00104> System.Reflection.MonoMethod:Invoke (System.Object obj,
BindingFlags invokeAttr, System.Reflection.Binder binder,
System.Object[] parameters, System.Globalization.CultureInfo culture)
in <0x00017> System.Reflection.MethodBase:Invoke (System.Object obj,
System.Object[] parameters)
in <0x000b3> System.Delegate:DynamicInvokeImpl (System.Object[] args)
in <0x00028> System.MulticastDelegate:DynamicInvokeImpl (System.Object[]
args)
in <0x0000e> System.Delegate:DynamicInvoke (System.Object[] args)
in <0x00147>
GtkSharp.voidObjectstringstringSignal:voidObjectstringstringCallback
(IntPtr arg0, System.String arg1, System.String arg2, Int32 key)
in (wrapper native-to-managed)
GtkSharp.voidObjectstringstringSignal:voidObjectstringstringCallback
(intptr,intptr,intptr,int)
in <0x00000> <unknown method>
in (wrapper managed-to-native) Gtk.Application:gtk_main ()
in <0x00007> Gtk.Application:Run ()
in <0x00370> MainClass:Main (System.String[] args)

** SNIP: BAD CRASH ENDS HERE


Any ideas? I am justing starting with mono and gtk# and so far i like it
a lot but i have so much to learn before stopping to ask newbie
questions :-/

I hope this big post is somehow easy to read. I edited a bit in
evolution so it was more readable for me. Hope that didn't kill the
formating information.

Please help and Greetings
André



More information about the Gtk-sharp-list mailing list