茶馆

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
终于发现ATI的显卡驱动可以用了,于是可以不再忍受800*600的分辨率了
做为一个.net爱好者怎么可以不尝试一下mono呢?
于是apt安装mono,顺便赞一把debian
安装好debian以后,我写了一个简单的对话框试了试

一,用monoDevelop新建工程,我的名字是gtkTest,gtk# 2.0 Project。
二,编译运行已经出现了一个gnome的窗体。不过上面什么都没有
三, Main.cs是定义程序入口的,暂时我还没有用到他。
四,打开MyWindow.cs,首先在MyWindow的构造函数中添加一个Button。
      Button mybtn = new Button("Click me");
    把按钮加入窗体
      this.Add(mybtn);
五,编译运行,可以看到在窗口中已经有了一个按钮,并且是充满怎个窗口的。这里和
    windows是不一样的,一个窗口好象只能增加一个控件,比如说要在add一个Label
    在编译时刻可以通过,但是运行时刻会有Warning。而且控件大小不可调。
六,添加单击事件处理函数
    构造函数中增加单击事件
      mybtn.Clicked+=new EventHandler (mybtn_click);
    添加事件处理的函数
      void mybtn_click(object sender,EventArgs args)
    不要在里面直接用MessageBox.Show()这个函数是没有的。
    看了一下Doc,发现有一个MessageDialog,估计应该是它了。
    查看构造函数,MessageDialog(Window, DialogFlags, MessageType,
                            ButtonsType, string, params object[])
    第一个是父窗口,第二个的意思是他的存在规则吧,我是这样理解的。
    最后一个参数不知道什么意思,看他的例子也没有最后一个,我也没有写
    根据example在事件处理的函数里面加上
        MessageDialog md = new MessageDialog((Window)this,
                        DialogFlags.DestroyWithParent,
                        MessageType.Question,
                        ButtonsType.YesNo, 
                        "Do you really want to exit?");
      ResponseType result = (ResponseType)md.Run();
      md.Destroy();
      if(result==ResponseType.Yes)
      this.Destroy();
七,编译运行,在单击按钮的时候就会出现对话框问你是否确定退出。搞定

最后粘一下MyWindow.cs的代码


using System;
using Gtk;

public class MyWindow : Window
{    
    
public MyWindow () : base ("MyWindow")
    
{
        
this.SetDefaultSize (400300);
        
this.DeleteEvent += new DeleteEventHandler (OnMyWindowDelete);
        Button mybtn 
= new Button("Click me");
        mybtn.Clicked
+=new EventHandler (mybtn_click);
        
this.Add(mybtn);
        
this.ShowAll ();
    }

    
    
void OnMyWindowDelete (object sender, DeleteEventArgs a)
    
{
        Application.Quit ();
        a.RetVal 
= true;
    }

    
    
void mybtn_click(object sender,EventArgs args)
    
{
        MessageDialog md 
= new MessageDialog((Window)this,
                        DialogFlags.DestroyWithParent,
                        MessageType.Question,
                        ButtonsType.YesNo, 
                        
"Do you really want to exit?");
        ResponseType result 
= (ResponseType)md.Run();
        md.Destroy();
        
if(result==ResponseType.Yes)
            
this.Destroy();
    }

}
 
posted on 2005-12-06 21:03  laue  阅读(767)  评论(2)    收藏  举报