Erste Schritte mit Mono und C# Glade#: Wie man Fenster erscheinen?

Ich habe versucht, den Einstieg mit Mono - & GTK# (ich komme aus einem hintergrund von Qt/C++ GUI-Programmierung) und beschlossen, beginnen mit einem sehr einfachen test GUI.

Habe ich installiert, die MS-Windows-Mono/GTK# - installer und dann, nach Feststellung, dass das Start-Menü link zu der Waldwiese hat nicht funktioniert (wie es Schienen nicht im Lieferumfang enthalten), habe ich die "Glade-GTK+" Windows-binary installer von der Waldwiese website.

Dann habe ich eine sehr einfache GUI in Waldwiese (auf der Unterseite von diesem post) und schrieb meine erste bit von C# - code, um Sie anzuzeigen. Jedoch, es scheint nicht zu funktionieren.

Des "Hello, World!" auf der Konsole ausgegeben korrekt und dann das Programm hängt sich auf, ohne dass das Fenster erscheint oder Fehlermeldungen gedruckt werden. Es scheint, als ob das Fenster erstellt wurde und der event-Schleife gestartet hat, sondern, dass es nicht sichtbar gemacht. Ich habe versucht, das entfernen der ersten null von der new Glade.XML Zeile und nicht wie die glade-Datei als Ressource, aber das machte keinen Unterschied.

Habe ich auch versucht, anstelle des Glade-GUI-xml mit dem man sich auf die GtkSharpBeginnersGuide auf der mono-Webseite (und ändern wndTestWindow zu window1 im C# - code) und es scheint zu funktionieren perfekt, was impliziert, dass es ein problem mit meinem Glade-XML. Jedoch, ich finden es hart, um herauszufinden, was falsch mit der XML-erstellt von meiner Waldwiese installation. Kann mir jemand irgendwelche Vorschläge?

Glade-GUI:

<?xml version="1.0"?>
<glade-interface>
  <!-- interface-requires gtk+ 2.12 -->
  <!-- interface-naming-policy project-wide -->
  <widget class="GtkWindow" id="wndTestWindow">
    <property name="title" translatable="yes">Test Window</property>
    <property name="window_position">center</property>
    <child>
      <widget class="GtkVBox" id="vboxTopLevel">
        <property name="visible">True</property>
        <property name="orientation">vertical</property>
        <child>
          <widget class="GtkHBox" id="hboxComboList">
            <property name="visible">True</property>
            <child>
              <widget class="GtkLabel" id="lblList">
                <property name="visible">True</property>
                <property name="label" translatable="yes">Here's a list:</property>
              </widget>
              <packing>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <widget class="GtkComboBox" id="cmbList">
                <property name="visible">True</property>
              </widget>
              <packing>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="btnList">
                <property name="label" translatable="yes">Do something</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </widget>
              <packing>
                <property name="position">2</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <widget class="GtkHButtonBox" id="hbtnboxButtonRow">
            <property name="visible">True</property>
            <child>
              <widget class="GtkButton" id="btnOK">
                <property name="label">gtk-ok</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_stock">True</property>
              </widget>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <widget class="GtkButton" id="btnCancel">
                <property name="label">gtk-cancel</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="use_stock">True</property>
              </widget>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">1</property>
              </packing>
            </child>
          </widget>
          <packing>
            <property name="position">1</property>
          </packing>
        </child>
      </widget>
    </child>
  </widget>
</glade-interface>

C# Test-Code:

using Glade;
using Gtk;
using System;

class TestApplication
{
    static void Main(string[] args)
    {
        System.Console.Write("Hello, World!\n");
        new TestApplication(args);
    }

    public TestApplication(string[] args)
    {
        Gtk.Application.Init();

        Glade.XML gxml = new Glade.XML(null, "test_mono.glade", "wndTestWindow", null);
        gxml.Autoconnect(this);
        Gtk.Application.Run();
    }
}

Kompiliert und ausgeführt mit:

mcs -pkg:glade-sharp-2.0 -resource:test_mono.glade test_mono.cs
mono .\test_mono.exe

Versionen:

Windows: XP Service Pack 3
Glade: 3.6.7
Die MCS-Version 2.6.7.0
Mono & GTK# installiert mit mono-2.6.7-gtksharp-2.12.10-win32-2.exe von der Mono-website.

Zusammengestellt & getestet sowohl mit cygwin und dem "Mono-2.6.7-Eingabeaufforderung".

InformationsquelleAutor NPB | 2010-08-31
Schreibe einen Kommentar