Staňte se programátorem: Jak na C# pod Linuxem

Microsoft .NET Framework je dnes již k dispozici i na Linuxu. Projekt se jmenuje Mono a s pomocí GTK nebo Windows Forms můžete v C# psát bezproblémové multiplatformní aplikace.
Staňte se programátorem: Jak na C# pod Linuxem

V dnešním dílu o programování v C# si napíšeme jednoduchého správce úloh pro operační systém Linux. Jazyk C# spolu s platformou .NET Framework byl sice původně vytvořen pro systém Microsoft Windows, pro Linux ale existuje jeho open source implementace s názvem Mono, která je vyvíjena především firmou Novell. Mono umožňuje spouštět .NETové aplikace nejen na Linuxu, ale také na dalších operačních systémech včetně Solaris nebo Mac OS X bez nutnosti rekompilace zdrojových kódů. Aktuální verze Mona je 2.0. Pro ty z vás, kterým by nevyhovala práce s GTK komponentami, přibyly od verze 2.0 komponenty Windows Forms, které jsou uloženy tradičně ve jmenném prostoru System.Windows.Forms tak jak to známe z Windows.

Framework platformy Mono lze stáhnout buď ze stránek projektu nebo z repozitářů vaší distribuce. Jako vývojové prostředí poslouží program MonoDevelop, které také bez problému najdete v základním repozitáři každé populární linuxové distribuce.

Dost ale teorie, pojďmě se podívat na to, co si ukážeme v dnešním dílu:

  • Použití některých ovládacích prvků knihovny GTK
  • Práce s vývojovým prostředím MonoDevelop

V MonoDevelopu si pomocí Mono knihoven a GTK vytvoříme jednoduchý program, který zobrazí dialog se základními informacemi o systému včetně systémových proměnných a jednoduchého správce spuštěných procesů, kterým budete moci změnit prioritu nebo je rovnou ukončit. Nebudete k tomu potřebovat žádné znalosti systémového programování pro Linux, vše obstará Framework a C#.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Dialog s výpisem informací o systému a související spuštěné procesy

GUI programu

GTK+ je knihovna ovládacích prvků, která byla původně navržena pro podporu programu Gimp a je základem linuxového desktopu GNOME. V současné době existuje její nadstavba nazvaná Gtk#, která je distribuovaná společně s Mono projektem jako jmenný prostor Gtk a GtkSharp. V Gtk jsou téměř všechny widgety, komponenty, atributy, události a metody (Label, Button, ComboBox, …) pojmenovány stejně jako ve ve jmenném prostoru Windows.Forms. Proto je díky Gtk zaručena přenositelnost grafických aplikací. GTK lze nainstalovat i na systém Windows. Grafické aplikace pracující s knihovnami GTK lze provozovat pod .NETem stejně jako v Mono. Před prvním použitím je potřeba .NET Framework.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Vývojové prostředí MonoDevelop se příliš neliší od standardu Visual Studia nebo SharpDevelopu

Práce s kontextovou nabídkou

Pokud píšeme program pod Windows, k použití kontextové využijeme třídu ContextMenu, která leží ve jmenném prostoru System.Windows.Forms, její použití by vypadalo následovně:

// Vytvoří kontextovou nabídku
ContextMenu nabidka = new ContextMenu();

// Položky, jež budou přidány do kontextové nabídky:
MenuItem[] polozky = new MenuItem[3];

// Přidává položky
polozky[0] = new System.Windows.Forms.MenuItem("Otevřít");
polozky[1] = new System.Windows.Forms.MenuItem("Uložit");
polozky[2] = new System.Windows.Forms.MenuItem("Zavřít");
nabidka.MenuItems = polozky; // Přiřadí položky do nabídky
nabidka.Show();// Zobrazí nabídku

Chceme-li pracovat s kontextovou nabídkou v Gtk, použijeme třídu Gtk.Menu. Použití této třídy ukazuje následující kód:

// Událost SelectionChanged nastane při výběru položky v komponentě NodeView

protected virtual void OnSelectionChanged(object o, System.EventArgs args)
{
 
NodeSelection vybrane =(NodeSelection)o;
 this.vybranaPol = (MyTreeNode)vybrane.SelectedNode; 
 menu = new Menu(); 
 // Přidá do kontextové nabídky položky
 
MenuItem m1 = new MenuItem("Zabít proces");
 // Ke každé položce přiřadí metodu, jež bude zavolána v případě, že bude
 // položka vybrána.
 m1.ButtonPressEvent += ZabitProces; 
 MenuItem m2 = new MenuItem("Aktualizovat"); 
 m2.ButtonPressEvent += this.VypisProcesy; 
 MenuItem m3 = new MenuItem("Nastavit prioritu"); 
 m3.ButtonPressEvent += ZobrazDialog; 
 // Přiřadí položky k menu
 menu.Add(m1); 
 menu.Add(m2); 
 menu.Add(m3);
 menu.ShowAll();
 // Zobrazí menu

 menu.Popup(null,null,null,0,0);
}

Práce s komponentou NodeView

NodeView je komponenta podobná datagridu – jednotlivá data jsou uchovávána v řádcích, které jsou rozdělené pojmenovanými sloupci. Jednotlivé položky jsou uloženy v instanci třídy NodeStore, nové záznamy jsou přidávány její metodou AddNode, která jako argument očekává třídu odvozenou od rozhraní ITreeNode.

Ovládacímu prvku NodeView ji přiřadíme vlastností NodeStore. Použití tohoto ovládacího prvku uvádím v následujícím kódu:

// Přidá do komponenty Gtk.NodeView sloupce
this.nodeview2.AppendColumn("Název Procesu",new Gtk.CellRendererText (),"text",0);
this.nodeview2.AppendColumn("ID",new Gtk.CellRendererText (),"text",1);
this.nodeview2.AppendColumn("Priorita",new Gtk.CellRendererText (),"text",2);

// Třída Gtk.NodeStore slouží k uchovávání jednotlivých položek
// zobrazených v komponentě NodeView
ns = new NodeStore(typeof(MyTreeNode));
this.nodeview2.NodeStore = ns;
this.nodeview2.ShowAll();// Zobrazí komponentu
this.nodeview2.NodeSelection.Changed += new EventHandler(OnSelectionChanged);

VypisProcesy(this,null);
// Přidá nový záznam
ns.AddNode(new MyTreeNode(“Proces“,“nějaké PID“,“nějaká priorita“));

Ostatní komponenty

Pro vytvoření nového okna použijeme třídu Window. Pro nastavení nadpisu okna použijeme vlastnost Title a pro jeho zobrazení metodu Show:

Window okno = new Window();
okno.Title = "Gtk# Task Manager";
okno.Show();

Pro nastavení textu nadpisu slouží vlastnost Text:

this.label5.Text = “.....“;

Pro vložení položky do komponenty Gtk.ComboBoxEntry (což je v podstatě klasický ComboBox ve Windows) použijeme metodu AppendText:

this. comboboxentry1.AppendText(“nějaká položka“);

Pro zjištění vybrané položky slouží vlastnost ActiveText:

label1.Text = “Vybraný text je: “ +comboboxentry1.ActiveText;

Na procesy se podíváme i příště

V dnešním díle jsme si ukázali práci s několika komponentami knihovny Gtk. V příštím díle si ukážeme jak na procesy nejen v Linuxu, ale i ve Windows a jak na zjištění vlastnosti systému a systémových proměnných. V případě, že byste věděli i o jiné vhodné funkci, nenechte si to pro sebe a pochlubte se v diskuzi pod článkem.

Nakonec i tentokráte samozřejmě nesmí chybět spustitelný program a projekt pro vývojové prostředí MonoDevelop. Ke spuštění programu budete potřebovat běhové prostředí Mono. Program má sice příponu *.exe, z terminálu jej ale můžete spustit třeba příkazem: mono TaskManagerProgram.exe.

Témata článku: Software, Microsoft, Programování, Linux, Položka, Framework, Priority, Kontextová nabídka

88 komentářů

Nejnovější komentáře

  • Rudidlo 28. 1. 2009 13:33:55
    Co konkrétně není problém u problém LINQ to SQL/Entities?
  • Dušan Janošík 28. 1. 2009 13:22:24
    To už ale není problém LINQ to SQL/Entities, protože tam k přenosu dat na...
  • gekoncik 26. 1. 2009 22:34:48
    Článek by se mohl věnovat trošku více první půstění mono. Jaký si mám...
Určitě si přečtěte

Jak vybrat monitor k počítači: nenechte se zlákat nepodstatnými parametry

Jak vybrat monitor k počítači: nenechte se zlákat nepodstatnými parametry

** Na jaké parametry se zaměřit a kde vás výrobci chtějí nachytat ** Monitory se stále více specifikují pro konkrétní určení ** Náročný hráč nebo profesionální grafik mají různé požadavky

20.  6.  2017 | Tomáš Holčík | 32

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

** Sledujte počasí z více zdrojů a podrobněji, přesněji tak určíte, jaké počasí vás potká na dovolené ** Na webu najdete hromadu pokročilých předpovědí počasí, ale i specializované meteorologické služby ** Vybrali jsme 14 služeb na počasí, které se vám můžou hodit

23.  6.  2017 | Jakub Čížek | 19

Jak unikají informace o nových iPhonech? Třeba podprsenkami čínských pracovnic

Jak unikají informace o nových iPhonech? Třeba podprsenkami čínských pracovnic

** Na černém trhu mohou zaměstnanci továren za kradené součástky inkasovat částku ve výši ročního platu ** Velké množství informací je vyneseno i z centrály Applu ** Díly jsou pašovány v botách, podprsenkách i odpadem

21.  6.  2017 | Stanislav Janů | 24

Herní počítač vs. Xbox One X: Kvalita obrazu není všechno

Herní počítač vs. Xbox One X: Kvalita obrazu není všechno

** Nový Xbox One X slibuje hraní ve 4K s HDR za 13 tisíc korun ** Aby stejnou kvalitu obrazu zvládl počítač, museli byste za něj dát minimálně dvakrát tolik ** Přesto herní počítače stále svůj smysl mají

24.  6.  2017 | Tomáš Holčík | 58


Aktuální číslo časopisu Computer

Bojujeme proti Fake News

Dva velké testy: fotoaparáty a NASy

Co musíte vědět o změně evropského roamingu

Radíme s výběrem základní desky