The GTK documentation for C # is not very up to date, I tried to use a button to change a label and I failed first time. The Fedora team could improve this to develop the development side. Here's what I've managed to do so far with GTK.
I fixed the source code with this, but I would have preferred a better method:
my_Button.Clicked += delegate {
my_Label.Text = "Use delegate!";
};
Mono is a free and open source implementation of the .NET Framework.
The most popular build tool for Mono is NAnt.
NUnit is very useful for test driven development.
[root@desk mythcat]# dnf install mono-devel
Last metadata expiration check: 0:15:26 ago on Wed 30 Sep 2020 09:04:30 PM EEST.
Package mono-devel-6.6.0-8.fc32.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@desk mythcat]# dnf install nant
...
Installed:
log4net-2.0.8-10.fc32.x86_64 nant-1:0.92-25.fc32.x86_64
nunit2-2.6.4-24.fc32.x86_64
Complete!
[root@desk mythcat]# dnf install nunit nunit-gui
Last metadata expiration check: 0:02:09 ago on Wed 30 Sep 2020 09:27:18 PM EEST.
No match for argument: nunit-gui
Error: Unable to find a match: nunit-gui
Installing MonoDevelop:
[root@desk mythcat]# dnf install monodevelop
...
Installed:
ORBit2-2.14.19-23.fc32.x86_64
gamin-0.1.10-36.fc32.x86_64
gnome-desktop-sharp-2.26.0-36.fc31.x86_64
gnome-sharp-2.24.2-25.fc32.x86_64
gnome-vfs2-2.24.4-30.fc32.x86_64
gnome-vfs2-common-2.24.4-30.fc32.noarch
gtk-sharp2-2.12.45-11.fc32.x86_64
gtk-sharp2-devel-2.12.45-11.fc32.x86_64
gtksourceview2-2.11.2-31.fc32.x86_64
libIDL-0.8.14-21.fc32.x86_64
libbonobo-2.32.1-18.fc32.x86_64
libbonoboui-2.24.5-18.fc32.x86_64
libgnome-2.32.1-20.fc32.x86_64
libgnome-keyring-3.12.0-19.fc32.x86_64
libgnomecanvas-2.30.3-19.fc32.x86_64
libgnomeui-2.24.5-21.fc32.x86_64
mono-addins-1.1-13.fc32.x86_64
monodevelop-5.10.0-17.fc32.x86_64
vte-0.28.2-31.fc32.x86_64
Complete!
Install the .NET Core. This is a general-purpose, modular, cross-platform and open-source development Platform.
[root@desk mythcat]# dnf copr enable @dotnet-sig/dotnet
Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.
...
Do you really want to enable copr.fedorainfracloud.org/@dotnet-sig/dotnet? [y/N]: y
Repository successfully enabled.
[root@desk mythcat]# dnf install dotnet
Copr repo for dotnet owned by @dotnet-sig 5.4 kB/s | 3.3 kB 00:00
Package dotnet-3.1.108-1.fc32.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Let's start with a GTK project using the MonoDevelop I.D.E.
[mythcat@desk ProjectsCSharp]$ monodevelop
I use a new solution from .NET with GTK# 2.0 Project template.
The default source code is this:
using System;
using Gtk;
namespace MonoDevelopGTK_001
{
class MainClass
{
public static void Main (string[] args)
{
Application.Init ();
MainWindow win = new MainWindow ();
win.Show ();
Application.Run ();
}
}
}
The result is an simple window form.
For a complex form with entry ,label and one button, you can see the next example:
using System;
using Gtk;
namespace MonoDevelopGTK_001
{
class MainClass
{
public static void Main (string[] args)
{
// define here Entry and Button
Entry name;
Button my_Button;
Application.Init ();
MainWindow win = new MainWindow ();
// change the size of window
win.SetDefaultSize (640, 480);
// this will close application
win.DeleteEvent += new DeleteEventHandler (Window_Delete);
// use of VBox or HBox
VBox global_vbox = new VBox();
win.Add(global_vbox);
name = new Entry();
global_vbox.PackStart(name, false, false, 0);
win.Add(name);
VBox label_vbox = new VBox();
global_vbox.Add (label_vbox);
//Define here a label and put some text in it.
Label my_Label = new Label();
my_Label.Text = "Hello World!";
label_vbox.PackStart(my_Label, false, false, 0);
//Add the label to the form
win.Add(my_Label);
VBox button_vbox = new VBox();
global_vbox.Add (button_vbox);
my_Button = new Button("Ok!");
my_Button.Clicked += OnButtonClicked;
button_vbox.PackStart(my_Button, false, false, 0);
win.Add(my_Button);
// ShowAll is used to see all labels, buttons
win.ShowAll();
//win.Show ();
Application.Run ();
}
public static void OnButtonClicked (object obj, EventArgs args)
{
//Label my_Label = obj as Gtk.Label;
Console.WriteLine ("Button Clicked !");
}
static void Window_Delete (object obj, DeleteEventArgs args)
{
Application.Quit ();
args.RetVal = true;
}
}
}