Sziasztok!
A következő kis "HelloWorld" típusú programot írtam a MonoDevelop-ban.
using System;
using Gtk;
public class GtkHelloWorld {
public static void Main() {
Application.Init();
//Create the Window
Window myWin = new Window("My first GTK# Application!");
myWin.Resize(350,200);
//Create a label and put some text in it.
Label myLabel = new Label();
myLabel.Text = "Hello World!";
//Add the label to the form
myWin.Add(myLabel);
//Show Everything
myWin.ShowAll();
Application.Run();
} // end of Main()
} // end of Class GtkHelloWorld
Olyan példa, amit könyvből néztem ki. Szóval működik is, csak egy gond van. Ha a terminálból indítom az exe állományt, akkor a program nem adja vissza a vezérlést a terminálnak a program befejezésekor. Az ablak bezáródik, de olyan mintha még mindig futna a progi, mert a terminálban nem jön vissza a prompt. Muszáj nyomnom egy (Ctrl-C)-t is, hogy visszakerüljön a vezérlés a terminálra.
Van valakinek elképzelése, hogy mi lehet a gond? Egy ilyen egyszerű programnál nem kéne még ilyen problémának jelentkeznie.
Van rá valami megoldás? Vagy ez egy bug?
OS
Elfelejtettem megírni: UBUNTU 8.04 operációs rendszerem van.
(És biztos nem amiatt van baj, mert pl. C++ GUI programok rendesen működnek.)
Megoldás a problémára
A problémát az okozza, hogy nincs lekezelve az ablakhoz tartozó DeleteEvent, ami akkor történik, amikor a felhasználó bezárja az ablakot (megnyomja a Bezárás gombot a jobb felső sarokban).
A megoldás:
1, Kiegészíteni a kódot egy esemény-eseménykezelő összerendeléssel:
myWin.DeleteEvent += new DeleteEventHandler(OnDeleteEvent);
2, Írni egy eseménykezelőt az alábbi módon:
protected static void OnDeleteEvent (object sender, DeleteEventArgs a) {
Application.Quit ();
a.RetVal = true;
}
Ezáltal az ablak bezárásakor a program kilép a GTK főciklusából, és visszajön a prompt is.
Egyébként a korrekt megoldás az, ha minden ablaknak létrehozunk a kódban egy külön osztályt:
public partial class MyWindow : Gtk.Window
párbeszédablaknál:
public partial class MyWindow : Gtk.Dialog
Itt jegyezném meg, hogy grafikus felület készítéséhez nyugodtan lehet haszálni a MonoDevelop beépített tervezőjét (Stetic). Nagyon könnyű használni, és sokkal gyorsabban lehet vele GUI-t készíteni, mint ha kézzel írná meg az ember a kódot!
Működik
Szia kissg!
Kösz a segítséget! Így már minden rendben van. Tehát nincs semmiféle bug a rendszerben e tekintetben.