reklama

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.

Témata článku: Software, Microsoft, Programování, Linux, Framework

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...
reklama
Určitě si přečtěte

Vyzkoušeli jsme FM štěnici: Když si vtipálci hrají na pirátské rozhlasové vysílání

Vyzkoušeli jsme FM štěnici: Když si vtipálci hrají na pirátské rozhlasové vysílání

** Dnes žádnou elektroniku programovat nebudeme ** Štěnice totiž funguje sama o sobě ** Stačí připojit baterii a naladit frekvenci

22.  1.  2017 | Jakub Čížek | 31

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

** Microsoft pomalu začíná kritizovat svůj nejpopulárnější OS ** Chce konečně dostat podniky na Desítky ** Bezpečnostní podpora Sedmiček vydrží ještě necelé tři roky

17.  1.  2017 | Jakub Čížek | 409

Takto si špičkoví grafici představují nový Facebook. S čistým vzhledem a bez reklam

Takto si špičkoví grafici představují nový Facebook. S čistým vzhledem a bez reklam

** Design Facebooku se delší dobu nemění a pro mnohé je nudným ** Grafici zkouší navrhovat nové koncepty toho, jak by mohla síť vypadat ** Hlasujte pro nejzdařilejší návrh

22.  1.  2017 | Stanislav Janů | 64

Umělá inteligence dokáže ze snímků srdce předpovědět, kdy zemřete

Umělá inteligence dokáže ze snímků srdce předpovědět, kdy zemřete

** Strojové učení lze skvěle použít pro vylepšení modelů pro předpověď srdečních komplikací ** Nová technologie umožňuje přesněji určit rizikové pacienty ** Dřívější diagnostika může díky včasně léčbě do budoucna zachránit životy

21.  1.  2017 | Karel Javůrek | 7

8 produktů, o kterých byste neřekli, že nesou značku Apple

8 produktů, o kterých byste neřekli, že nesou značku Apple

** Věděli jste, že Apple vyvinul celkem 45 modelů tiskáren? ** ** Monitor na výšku, plotter nebo herní konzole - to vše měl Apple ve své nabídce ** Většinu z těchto produktů pohřbil Steve Jobs

19.  1.  2017 | Stanislav Janů | 43


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama