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.

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.

Diskuze (88) Další článek: Nová kniha: Velká kniha digitální grafiky a designu

Témata článku: Software, Microsoft, Programování, Linux, Lin, Jednotlivé prvky, Položka, Linuxový terminál, Jednotlivý díl, Priority, Vybraný text, Programátor, Framework, Kontextová nabídka


Určitě si přečtěte

Říjnová aktualizace způsobuje na počítačích HP „modrou obrazovku smrti“

Říjnová aktualizace způsobuje na počítačích HP „modrou obrazovku smrti“

** Uživatelé hlásí další problémy s kumulativní aktualizací KB4464330 ** Na některých počítačích HP končí update „modrou obrazovkou smrti“ ** Na vině je patrně ovladač klávesnice

Karel Kilián | 79

Co udělat s novým počítačem s Windows, než ho začnete používat

Co udělat s novým počítačem s Windows, než ho začnete používat

** Čerstvě zakoupený počítač je vhodné trochu připravit ** Věnujte pozornost instalaci a předinstalovaným aplikacím ** Zamyslete se nad zálohou a antivirem

David Polesný | 80

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

Modelářský zázrak: Maketa raketoplánu Columbia, která létá jako skutečná raketa

** Model raketoplánu Columbia od českého konstruktéra umí i létat ** Obdivuhodný model si vzal 1600 hodin práce ** Podívejte se na fotografie ze stavby a prvního letu

Karel Jeřábek | 20

Astronomové objevili daleko za Plutem objekt s extrémní dráhou. Může ukazovat na existenci planety Devět

Astronomové objevili daleko za Plutem objekt s extrémní dráhou. Může ukazovat na existenci planety Devět

** Astronomové objevili daleko za Neptunem těleso 2015 TG387 ** Okolo Slunce se pohybuje po extrémně protáhlé dráze ** Jeho dráha může ukazovat na existenci planety Devět

Petr Kubala | 10

Pojďme programovat elektroniku: Když už vás ten chumel součástek prostě nebaví

Pojďme programovat elektroniku: Když už vás ten chumel součástek prostě nebaví

** Levné cetky z Asie stojí dolar ** Postavíte s nimi skoro vše od teploměru po spínač zavlažování ** Má to ale jeden háček. Bude to ošklivé a povětšinou nekvalitní

Jakub Čížek | 16

Moral machine: Už víme, zdali je lepší zabít psy, sebe nebo matky na přechodu

Moral machine: Už víme, zdali je lepší zabít psy, sebe nebo matky na přechodu

** Jak byste se sami vypořádali s tramavajovým dilematem? ** Vědci před lety spustili globální dotazník ** Nyní se pochlubili s výsledky

Jakub Čížek | 149


Aktuální číslo časopisu Computer

Odhalte skryté funkce Windows 10

Test levných Androidů do 4 000 Kč

Srovnání úsporných minipočítačů

Změřili jsme rychlost 10Gb/s ethernetu