`
mmdev
  • 浏览: 13242773 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

开源System.Windows.Forms库,让.Net Micro Framework界面开发和上位机一样简单

 
阅读更多

.Net Micro Framework本身支持WPF界面开发,但是对国内用户来说,WPF开发相对比较陌生,并且.Net Micro Framework对此功能的支持并不完善,ButtonTextBoxListBoxPictureBox等等基本控件并不支持,所以要想在.Net Micro Framework上开发出一套相对复杂的窗体界面还是比较困难的。

System.Windows.Form库就是在这种背景下开发出来的,它提供的接口和控件,和.Net Framework.Net Compact Framework保持兼容,也可以说是.Net Compact Framework的一个窗体子集(不仅仅是子集,有写功能略有扩展,如Graphics类支持图片透明、渐变、圆角矩形绘制等等方法)。

由于.Net Micro FrameworkIDE开发环境并不支持所见即所得的窗体设计功能(以后有时间可以为MF开发这一功能),所以我们可以取巧,用.Net Framework.Net Compact Framework开发环境设计窗体,然后把相关窗体文件(如Form1.csForm1.designer.cs文件)直接导入到.Net Micro Framework工程中,稍加删减即可为.Net Micro Framework所用。

System.Windows.Form目前包括ButtonTextBoxListBoxComboBoxCheckBoxGroupBoxRadioButtonPictureBoxProgressBarVScrollBarHScrollBar11种常用控件,此外还提供了MessageBox方法。

包含两类窗体、普通窗体及模式窗体,含义和windows平台相同。

此外System.Windows.Form提供两种界面风格,上面的计算器显示的是SideShow风格的窗体,缺省风格和.Net Compact Framework一致(如下图):

值得一提的是,System.Windows.Form完美支持中文,提供了Arial两种类型的字体(规则、粗体),含有3000多个常用汉字及字符。其使用方法和.Net Framework一致,如果您一致使用缺省字体,您会忽略还有字体设置这一说法的存在。不过考虑到.Net Micro Framework用到资源有限的设备上,所以还是把字体库进行了剥离,可以根据需要自行增删字体(默认字库的大小为546k)。

下面的图例就是基于System.Windows.Form库开发的应用程序。

System.Windows.Form库支持多窗体,并且支持软键盘,所以考虑到窗体关闭、切换等操作,故引入了任务栏(和Windows Mobile的任务栏有些类似),相关功能如下图所示。

为了便于说明System.Windows.Form库的方便性,我们试着比较一下.Net Micro Framework默认窗体开发和用System.Windows.Form库开发的代码区别。

.Net Micro Framework默认窗体程序包含两个文件,一个是按钮配置程序GPIOButtonInputProvider.cs,相关代码如下:

using Microsoft.SPOT;

using Microsoft.SPOT.Input;

using Microsoft.SPOT.Hardware;

using Microsoft.SPOT.Presentation;

namespace MFWindowApplication1

{

public sealed class GPIOButtonInputProvider

{

public readonly Dispatcher Dispatcher;

private ButtonPad[] buttons;

private DispatcherOperationCallback callback;

private InputProviderSite site;

private PresentationSource source;

/////////////////////省略多个按钮操作相关函数/////////////////////

}

}

第二个是主体文件Program.cs,代码如下:

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Input;

using Microsoft.SPOT.Presentation;

using Microsoft.SPOT.Presentation.Controls;

namespace MFWindowApplication1

{

public class Program : Microsoft.SPOT.Application

{

public static void Main()

{

Program myApplication = new Program();

Window mainWindow = myApplication.CreateWindow();

GPIOButtonInputProvider inputProvider = new GPIOButtonInputProvider(null);

myApplication.Run(mainWindow);

}

private Window mainWindow;

public Window CreateWindow()

{

mainWindow = new Window();

mainWindow.Height = SystemMetrics.ScreenHeight;

mainWindow.Width = SystemMetrics.ScreenWidth;

Text text = new Text();

text.Font = Resources.GetFont(Resources.FontResources.small);

text.TextContent = Resources.GetString(Resources.StringResources.String1);

text.HorizontalAlignment = Microsoft.SPOT.Presentation.HorizontalAlignment.Center;

text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center;

mainWindow.Child = text;

mainWindow.AddHandler(Buttons.ButtonUpEvent, new ButtonEventHandler(OnButtonUp), false);

mainWindow.Visibility = Visibility.Visible;

Buttons.Focus(mainWindow);

return mainWindow;

}

private void OnButtonUp(object sender, ButtonEventArgs e)

{

Debug.Print(e.Button.ToString());

}

}

}

而用System.Windows.Form库开发的窗体程序则和.Net Framework.Net Compact Framework相同,包括三个文件,第一个文件是窗体设计文件Form1.Designer.cs,代码如下:

namespace Test

{

partial class Form1

{

#region Windows Form Designer generated code

private void InitializeComponent()

{

this.label1 = new System.Windows.Forms.Label();

this.SuspendLayout();

//

// label1

//

this.label1.Location = new System.Drawing.Point(105, 69);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(125, 12);

this.label1.Text = ".Net Micro Framework";

//

// Form1

//

this.Controls.Add(this.label1);

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.Label label1;

}

}

第二个是窗体文件Form1.cs,代码如下:

using System;

using System.Drawing;

using System.Windows.Forms;

namespace Test

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

this.KeyDown += new KeyEventHandler(Form1_KeyDown);

}

void Form1_KeyDown(object sender, KeyEventArgs e)

{

Debug.Print(e.KeyCode.ToString());

}

}

}

第三个是启动文件Program.cs,代码如下:

using System;

namespace Test

{

static class Program

{

static void Main()

{

Application.Run(new Form1());

}

}

}

从以上比较可以看出,采用System.Windows.Form库开发的窗体简单,并且和.Net Framework.Net Compact Framework没有任何区别,所以很方便的把相应平台上的代码移植到.Net Micro Framework上来。

System.Windows.Form库除了字体操作和位图取之.Net Micro Framework原图形库,其它所有函数和类库,均自行编写,和.Net Micro Framework自带的WPF库没有任何关系。目前System.Windows.Form库开发的难点主要在控件焦点切换和刷新方面,现在的版本是测试版,后面将继续优化,如有可能核心源码考虑用C++本地代码进行实现,这样性能就会得到大幅度提升。

后续版本的开发计划暂考虑如下:

1、 TextBox控件继续完善,支持光标操作;

2、 支持中文输入法;

3、 开发ListViewTreeView控件;

4、 部分核心代码用C++本地代码实现。

【源码下载】

http://www.sky-walker.com.cn/yefan/SourceCode/YFWindows.rar

【技术交流】http://space.cnblogs.com/group/MFSoft/

分享到:
评论

相关推荐

    GMap.NET.Core.dll以及GMap.NET.WindowsForms.dll

    GMap.NET是一个强大的开源库,专门用于在Windows Forms和WPF等.NET平台上集成谷歌地图、OpenStreetMap以及其他在线地图服务。这个库的核心组件是两个DLL文件:GMap.NET.Core.dll和GMap.NET.WindowsForms.dll。 GMap...

    System.Data.SQLite.dll多版本支持.net4.0

    System.Data.SQLite.dll是一个开源的.NET Framework数据提供程序,它为SQLite数据库引擎提供了全面的ADO.NET支持。这个库允许开发者在.NET应用程序中轻松地存取SQLite数据库,提供了与SQL Server或其他数据库类似的...

    C# .NET工控上位机开发

    .NET Framework是微软的开发框架,包含了大量的库和服务,如Windows Forms、WPF、ASP.NET等,为C#应用程序提供运行环境。而.NET Core是跨平台的开源版本,同样支持C#开发,且具有更小的体积和更高的性能。在工控...

    System.Windows.Forms.Ribbon:.NET WinForm的功能区控件(http的fork

    System.Windows.Forms.Ribbon是.NET Framework中一个用于创建Windows Forms应用程序时实现功能区界面的控件库。功能区界面,类似于Microsoft Office中的布局,提供了一种高效且用户友好的方式来组织和展示应用程序的...

    system.net.http.dll

    同时,它也是许多开源库和框架,如OAuth、JWT认证等的基础。 总之,`System.Net.Http.dll`是.NET框架中处理HTTP通信的核心组件,通过其丰富的类库和接口,开发者能够高效、灵活地构建网络应用。理解和掌握这个库的...

    GMap.NET的两个核心库免费分享

    GMap.NET是一个强大的开源库,专门用于在Windows Forms和WPF应用程序中集成Google Maps、Bing Maps以及其他在线地图服务。这个库提供了丰富的功能,让开发者能够轻松地在应用程序中实现地图显示、定位、路线规划等...

    BSE.Windows.Forms源代码和使用示例

    在C#开发领域,BSE.Windows.Forms库无疑为开发者提供了一种创新的方式,去构建具有Office风格皮肤且可自定义展开关闭的用户界面,类似于Outlook的布局。本文将详细探讨这一库的核心概念、源代码结构以及实际使用示例...

    mysql.data.dll-6.9.8 包含.net 2.0 4.0 4.5

    MySQL.Data.dll 是 MySQL 数据库与 .NET 应用程序交互的核心组件,主要负责提供 ADO.NET 接口,使得 .NET 开发者可以方便地在 C#、VB.NET 等语言中操作 MySQL 数据库。版本 6.9.8 意味着这是一个更新的版本,可能...

    System.Data.SQLite.DLL x86 and x64

    System.Data.SQLite.DLL是SQLite数据库引擎的.NET Framework数据提供程序,它允许.NET应用程序与SQLite数据库进行交互。这个压缩包包含了两个版本的DLL文件,分别针对32位(x86)和64位(x64)操作系统。下面将详细...

    Winform开发全套UI组件开源共享](TTX.Framework.WindowUI)--经典.net自定义控件源码

    《Winform开发全套UI组件开源共享--TTX.Framework.WindowUI》是.NET平台上一款经典自定义控件库,专为Windows Forms应用设计。该资源包含了丰富的控件源码,旨在帮助开发者构建美观、功能强大的用户界面。本文将深入...

    System.Data.SQLite.DLL 和 SQLite.net.DLL chm帮助文件

    在.NET开发环境中,有两个主要的.NET库用于与SQLite交互:System.Data.SQLite.DLL和SQLite.net.DLL。 System.Data.SQLite.DLL是官方的.NET Framework数据提供程序,它实现了ADO.NET接口,使得.NET开发者可以使用...

    System.Data.SQLite 1.0.112.rar

    System.Data.SQLite 1.0.112 是一个.NET框架下的SQLite数据库驱动程序,它为C#和其他.NET语言提供了与SQLite数据库交互的能力。这个版本(v1.0.112)是通用版,意味着它可以同时支持32位和64位的操作系统,大大增强...

    Aspose.Words for .NET 18.7(.net+.net core) 去水印,学习使用

    .NET Framework是微软开发的面向Windows平台的应用程序开发框架,而.NET Core则是一个跨平台的开源框架,可用于Windows、Linux和macOS。这意味着无论你是在桌面应用还是在云端服务中,都可以利用Aspose.Words进行...

    Kafka .Net Framework4.0 版本

    首先,Kafka .Net是.NET社区开发的一个C#和F#接口,它为.NET开发者提供了与Kafka集群通信的便利。这个库允许开发者发送和接收消息,管理主题和分区,以及执行其他Kafka相关的操作。在.NET Framework 4.0版本中,这个...

    System.Data.SQLite-1.0.112.zip

    System.Data.SQLite是一个开源的.NET Framework数据提供程序,它实现了SQLite数据库引擎与.NET Framework的完全集成。这个特定的压缩包文件“System.Data.SQLite-1.0.112.zip”包含了1.0.112版本的SQLite .NET数据...

    Vecc.Netduino.Drivers.Tmp102Sensor:.NET Micro Framework 的 Tmp102 传感器驱动程序

    Vecc.Netduino.Drivers.Tmp102Sensor是针对Netduino开发板的一套驱动库,Netduino是一款基于.NET Micro Framework的开源硬件平台,其强大的编程能力使得开发者可以使用C#等高级语言进行开发。该驱动程序实现了对Tmp...

    AssetStudio.net472.v0.16.47

    2. OpenTK.dll:Open Toolkit库,这是一个开源的C#库,用于实现跨平台的低级图形、音频和输入功能。AssetStudio使用它来处理与图形用户界面和硬件交互的任务。 3. SixLabors.ImageSharp.dll:ImageSharp是一个高...

    MySql.Data.dll 6.4.4 For .NET 2.0

    MySQL 数据库是一个流行的开源关系型数据库管理系统,广泛用于 web 应用程序开发。在 .NET 平台上,与 MySQL 交互通常需要一个专门的数据库连接组件,这就是 `MySql.Data.dll` 的作用。该文件是 MySQL 官方提供的 ...

    mysql.data.dll(.net 4.0或以前版本)

    MySQL.data.dll是MySQL数据库连接器的一个重要组件,主要用于.NET Framework 2.0、3.0、3.5和4.0版本。这个DLL文件是MySql Connector/NET的一部分,允许开发人员在使用.NET Framework开发的应用程序中与MySQL数据库...

Global site tag (gtag.js) - Google Analytics