试用mono(二)新建GUI项目篇

上次介绍了如何导入一个现有的VS .Net项目并运行,这次我们来看看mono如何创建一个新的项目。

首先在mono的welcome界面中点击Start a New Project,这时会出现下面的界面。其中,Console Project是新建一个C#的控制台项目;Empty Project是创建一个空的项目,没有任何文件;Library是新建一个库项目。在C#的子项ASP.NET中,还有一个Web Application,这个可以新建一个ASP.Net 的项目。以上四项与VS .Net中都是对应的。不过,在这里大家会发现会有一个Gtk# 2.0,这个是什么东东呢?到官方完站上看了一下,这个部分下次再介绍。
New Solution

选择新建一个Cosnole Project,系统自动创建一个项目。项目中除了用于设定生成的有关程序集的常规信息参数必需的AssemblyInfo.cs文件之外,还有一个文件Main.cs,这是项目的主体。mono自动生成了一个Hello World的示例:

右击Solution工具栏中的项目,出现Add菜单,里面有New Dialog,New Window,New Widget和New Action Group。这点很有意思,在VS .Net中,Console项目是不能创建GUI的,至于那些Drawing命名空间则完全屏蔽了。而在mono中可以自由地创建GUI控件。本来想再写一个GUI篇,看来没有必要了,写在一起就好了。

我们选择新建一个窗口,此时会出现一个窗口如下:

New Window

这里有一个GTK# Window,还有一个Window。其实本质上它俩都是基于GTK#的window控件。GTK# Window是基于GTK#的控件,GTK#是gtk+的.Net绑定集,可以用它来编写生成gtk的原生程序。GTK#的文档可以从官方得到,而window则是gtk+中的控件,它与Visual C# .Net的window不是一个东西了。

如果新建一个GTK# Window,那么自动生成的代码是:

using System;
using Gtk;
using GtkSharp;

namespace con1
{
public class Form2 : Window
{
public Form2 () : base (“MyWindow”)
{
}
}
}

如果新建一个window,系统生成的代码是:

using System;

namespace con1
{

public class Form1 : Gtk.Window
{

public Form1() :
base(“”)
{
Stetic.Gui.Build(this, typeof(con1.Form1));
}
}
}

其实,从语义上来说,两者都是一样的。我们注意到第二个窗口的代码中有Stetic.Gui.Build方法,那么Stetic是什么呢?Stetic 的官方解释是:Stetic is the new GUI designer for creating Gtk# applications.我们可以把它理解成一个GUI的设计器,正因为如此,我们可以发现,Form1的界面有Source code和Designer两部分

GUI Design

在GUI的设计方面,包括控件和定位,我感觉就是gtk的风格。例如控件不是绝对定位,有x、y坐标和长宽,而是类似flow一个挨一个的。因为gtk的定位一直觉得很让人郁闷,所以这部分就不做了。至于控件的类库,倒是和C#.Net的很类似,这里就不说了。

最后是编译执行,会在bin/Debug或bin/Release下面生成一个exe文件,直接运行就可以了。下图是运行结果。

MyWindow.png

Leave a Comment

Your email address will not be published. Required fields are marked *