我一直試圖開始使用Mono & GTK#(我來自Qt/C++ GUI編程的背景),並決定從一個非常簡單的測試GUI開始。Mono,C#和Glade入門#:如何讓窗口出現?
我安裝了MS Windows Mono/GTK#安裝程序,然後,當發現開始菜單鏈接到Glade沒有工作(因爲它似乎沒有包含在軟件包中),我使用了「Glade與GTK +「來自Glade網站的Windows二進制安裝程序。
然後我在Glade中創建了一個非常簡單的GUI(在這篇文章的底部),並寫了我的第一個C#代碼來顯示它。但是,它似乎沒有正常工作。
「你好,世界!」正確地打印到控制檯,然後程序掛起而不顯示窗口或打印任何錯誤消息。看起來好像這個窗口已經創建並且事件循環已經開始但是它沒有被顯示出來。我嘗試從new Glade.XML
行刪除第一個null
,並且不包括glade文件作爲資源,但這沒有什麼區別。
我也試圖與一個替代格萊德GUI XML的the GtkSharpBeginnersGuide on the mono website(和改變wndTestWindow
到window1
在C#代碼),它似乎很好地工作意味着有一個與我的格萊德XML的一個問題。但是,我發現很難弄清我的Glade安裝創建的XML有什麼問題。任何人都可以提供建議嗎?
格萊德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#測試代碼:
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();
}
}
編譯和運行:
mcs -pkg:glade-sharp-2.0 -resource:test_mono.glade test_mono.cs
mono .\test_mono.exe
版本:
Windows系統:XP Service Pack 3的 Glade:3.6.7 MCS版本2.6.7.0 單聲道& GTK#使用來自Mono網站的mono-2.6.7-gtksharp-2.12.10-win32-2.exe
安裝。
編譯&使用cygwin和「Mono-2.6.7命令提示符」進行了測試。
輝煌,就是這樣:謝謝。我沒有足夠的投票聲譽,但我已經接受了答案。 – NPB 2010-09-13 07:09:31