一起谈.NET技术,使用MonoDevelop开发GTK#图形界面

简介:   Mono一直到现在的2.8已经完全可以胜任一些比较小的项目了,但相关的开发文档与教程一直比较匮乏,中文材料更是屈指可数。虽然Mono与.net很多类库都是通用的,但Mono仍然有为数不少的扩充类库,其中最重要的就是对于GTK二次封装的GTK#图形界面类库了,目前想要开发原生的Mono图形界面程序此类库必不可少。

  Mono一直到现在的2.8已经完全可以胜任一些比较小的项目了,但相关的开发文档与教程一直比较匮乏,中文材料更是屈指可数。虽然Mono与.net很多类库都是通用的,但Mono仍然有为数不少的扩充类库,其中最重要的就是对于GTK二次封装的GTK#图形界面类库了,目前想要开发原生的Mono图形界面程序此类库必不可少。在MonoDevelop里已经支持对于GTK#界面设计的直接拖放,有相关经验的开发人员可以很快上手。

  Mono官方网站上也有一篇GTK#开发的入门文档:Stetic GUI Designer,现在结合此教程简要概述一下如何在MonoDevelop下使用GTK#。

  首先,我们需要做的就是创建一个工程……(这是一句废话)。在MonoDevelop主界面选择文件->New->Solution(话说目前MonoDevelop汉化工作还未彻底完成,菜单中中文夹英文……),在弹出来的对话框选择C#->GTK#2.0工程。

=Stetic_Tutorial_01[1]

  输入想建立的工程名,我们这里用“SteticTutorial”,然后点新建。再下面的一个对话框中根据自己的需求选择,然后就可以点击OK了。

  稍等一会之后,可以看到MonoDevelop已经帮我们做好了一个GTK#工程所需要做的最基本的工作了,点击运行菜单里的运行按钮或者工具栏上的齿轮按钮就可以编译执行当前工程了,因为我们现在什么也没做,只是单纯弹出了一个空白的窗体。

=Stetic_Tutorial_04[1]

  嗯嗯,很漂亮的界面……咳咳……

  现在我们要往这个界面中添加一些控件,双击工程目录中的MainWindow.cs,这里可以看到窗体事件的代码。注意看MonoDevelop的下方有两个选项,目前选中的是“源代码”,现在让我们点击“设计器”。

=Stetic_Tutorial_06[1]

  界面右侧有隐藏的工具栏,其中有常用的控件,现在我们可以使用常用的拖放操作来画窗体了,万岁~

  好了,现在我们先不急,首先选中主窗体(MainWindow),然后再右侧的属性栏可以查看当前选中控件的属性。

=Stetic_Tutorial_07[1]

  我们先把Window Tile一项改成需要的名字,这一项决定了窗体运行时标题栏上的文字。

  好了,剩下的就是往窗体中拖放控件。这里GTK#与WinForms有一些不同,WinForms下直接往窗体上拖放需要使用的控件就好,而基于GTK的GTK#,大部分控件都需要放在“容器”中。容器就是专门用来盛放控件的控件,在工具栏的第一部分全是这些容器。GTK#就是依赖这些容器来进行控件的定位的,学习过Swing或者QT的同学应该很容易理解。

  根据我们的需要,我们往主窗体拖放一个VBox。VBox是一个纵向排列的容器,将窗体分割为了一个个纵向的单元,可以往这些单元中添加控件或者其他容器来满足需求。

=Stetic_Tutorial_10[1]

  默认的VBox有三栏,我们需要两栏就足够了。右击第三个,选择“Delete”。大部分窗体应用中菜单栏是不可或缺的一部分,所以我们首先要往窗体中VBox顶栏中添加一个MenuBar。VBox的一个很有意思的特性就是可以根据它其中的控件而改变容器的大小,所以当我们把MenuBar拖进第一栏的时候可以看到MenuBar并没有变得像整个窗体一半大小那样难看,而是自动将VBox缩成单行的宽度了。

=Stetic_Tutorial_11[1]

  接下来添加菜单选项就很简单了,直接点击“Click to create menu”就可以添加按钮,还可以选择按钮的图标。选中菜单,在属性栏还可以设置Accelerator项来设定此菜单的快捷键。

=Stetic_Tutorial_12[1]

  建立完菜单后,MainWindow.cs的窗体下多了一个选项“行为”(英文叫Action),点开,看到我们之前在菜单栏中所有的定义。选中“Exit”,然后查看属性栏,注意看属性栏上方有一个“信号”(Signal)的选项看,选择它。

=Stetic_Tutorial_14[1]

  在“Activated”项后面的Hander一栏点击“Click here to add a new hander”,需要注意的是很多时候因为工具栏默认宽度有些窄而导致Handler项显示不出来,我们可以拉长一下工具栏的长度。点击后添加一个“OnExit”的事件,双击它进入源代码编辑窗口。

=Stetic_Tutorial_16[1]

  这里添加一句代码:

  
  
protected virtual void OnExit( object sender, System.EventArgs e)
{
Application.Quit();
}

  尝试编译运行一下,在程序菜单栏的File菜单栏中选择Exit,看看程序是否如期关闭。如果你的代码没有问题的话,让我们继续往下走。现在VBox的下栏还空着,我们往里添加一个TextView控件,命名为logTextView。原教程中提到先要添加一个ScrolledWindow容器,再往其中填充TextView控件才能实现滚动条,但实际发现ScrolledWindow容器并非必需的,大概是GTK#版本不同的缘故吧。

  好了,现在我们的程序界面已经完成,已经可以在窗体写入文字。不过你会发现有一个小问题,TextView并不能自动换行,每当一行文字的长度超过窗体的长度时程序只是添加了一个水平的滚动条。解决这个问题的方法很简单,只要将textview控件的Wrap Mode改为Word or Charactor就可以了。实际编程中最好将此属性最为可选项提供为用户。

  剩下的就是在每个菜单添加相应时间代码:

  
  
For the OnOpen method:

protected virtual void OnOpen( object sender, System.EventArgs e) {
// Reset the logTreeView and change the window back to original size
int width, height;
this .GetDefaultSize( out width, out height );
this .Resize( width, height );
logTextView.Buffer.Text
= "" ;
// Create and display a fileChooserDialog
FileChooserDialog chooser = new FileChooserDialog(
" Please select a logfile to view ... " , this , FileChooserAction.Open,
" Cancel " , ResponseType.Cancel,
" Open " , ResponseType.Accept );
if ( chooser.Run() == ( int )ResponseType.Accept )
{
// Open the file for reading.
System.IO.StreamReader file =
System.IO.File.OpenText( chooser.Filename );
// Copy the contents into the logTextView logTextView.Buffer.Text = file.ReadToEnd();
// Set the MainWindow Title to the filename.
this .Title = " Nate's Log Viewer -- " + chooser.Filename.ToString();
// Make the MainWindow bigger to accomodate the text in the logTextView this.Resize( 640, 480 );
// Close the file so as to not leave a mess.
file.Close();
}
// end if
chooser.Destroy();
}
// end method OnOpen

For the OnClose method:

protected virtual void OnClose( object sender, System.EventArgs e) {
// Reset the logTreeView and change the window back to original size
int width, height;
this .GetDefaultSize( out width, out height );
this .Resize( width, height );
logTextView.Buffer.Text
= "" ;
// Change the MainWindow Title back to the default.
this .Title = " Nate's Log Viewer " ;
}
// end method OnClose

For the OnAbout method:

protected virtual void OnAbout( object sender, System.EventArgs e) {
// Create a new About dialog
AboutDialog about = new AboutDialog();
// Change the Dialog's properties to the appropriate values. about.Name = "Nate's Log Viewer";
about.Version = " 1.0.0 " ;
// Show the Dialog and pass it control
about.Run();
// Destroy the dialog
about.Destroy(); } //
end method OnAbout

 

其实可以更加完善,比如再新建文档或者关闭文档的时候检测textview内容是否改变,提示用户保存等等功能。
编译运行界面:
=Stetic_Tutorial_22[1]
目录
相关文章
|
1月前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
54 7
|
1月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
27 5
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
1月前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
32 4
|
1月前
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
61 5
|
1月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
39 3
|
1月前
|
敏捷开发 缓存 中间件
.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素
本文深入探讨了.NET技术的高效开发模式,涵盖面向对象编程、良好架构设计及高效代码编写与管理三大关键要素,并通过企业级应用和Web应用开发的实践案例,展示了如何在实际项目中应用这些模式,旨在为开发者提供有益的参考和指导。
25 3
|
1月前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
36 3
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
51 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
82 0