`
jinvasshole
  • 浏览: 769072 次
文章分类
社区版块
存档分类
最新评论

windows mobile窗口之间传递数据的方法

 
阅读更多

在windows mobile上设计UI的时候,经常会碰到多个窗口的情况。有时候,我们需要将一个窗口中的用户输入信息反应到另一个窗口中去,这就涉及到窗口之间的数据传递问题。下面就分native和managed这两种方式来讲讲这个窗口之间数据传递的方法。

  1. Native

这个方法是当时我在看MFC时学到的,当时应用的场景是这样的。我建立了一个基于对话框的应用程序(Dialog-based),一些参数设置需要另外一个对话框来呈现给用户,在用户输入完之后,就需要将数据传递给主对话框。当时我是这么实现的:

  a) 在 stdafx.h头文件中,加入用户定义消息和传递的数据结构,如:

#define WM_LOCALADDR_SET   WM_USER+21 //本地STC地址设置消息定义

typedef struct tagADDRESS {

  int nAddr0;

     int nAddr1;

     int nAddr2;

     int nAddr3;

} ADDRESS;

  b) 在地址设置对话框的实现文件中,加入“OK”按钮的消息处理函数:

void CLocalAddrSet::OnButtonApply()

{

         // TODO: Add your control notification handler code here

         UpdateData (TRUE);

         ADDRESS rp;

         rp.nAddr0 = m_intLocalAddr0;

         rp.nAddr1 = m_intLocalAddr1;

         rp.nAddr2 = m_intLocalAddr2;

        rp.nAddr3 = m_intLocalAddr3;

         //发送消息

         AfxGetMainWnd ()->SendMessage (WM_LOCALADDR_SET, 0, (LPARAM) &rp);

       }

c) 在主对话框的头文件中,加入消息映射函数声明:

afx_msg LRESULT LocalAddrSetPrco(WPARAM wParam, LPARAM lParam); //本地设备地址设置消息映射函数声明

  d) 在主对话框文件(.cpp)中,加入消息映射和对应的实现函数:

ON_MESSAGE(WM_LOCALADDR_SET,LocalAddrSetPrco)    //本地设备地址设置处理映射

//本地地址设置

LRESULT CSlaverDectorDlg::LocalAddrSetPrco(WPARAM wParam, LPARAM lParam)

{

    ADDRESS* prp = (ADDRESS*) lParam;

         int i;

         int HEC=0;//头校验

     ……….

}

  2. Managed

Managed方式中,有三种方法,分别是:使用构造器传递数据、通过属性传递和通过事件(参数)传递。具体可以参考《windows mobile 平台应用与开发》7.2节。

a) 使用构造器传递数据

   使用构造器可以向一个新窗体传递初始值,如在主窗体Form1的基础上创建Form2,我们就可以在Form2的构造函数中,接收一个初始的值,并显示在对应的label中,代码如下:

         public Form2(string defaultUser)

         {

              InitializeComponent();

 

              m_txtUserName.Text = defaultUser;

         }

   在Form1中,我们可以使用如下的方法来创建Form2:

              Form2 f = new Form2("guest");

              DialogResult r = f.ShowDialog();

   这样就把guest信息传递到了Form2中。

  b) 通过属性传递

向Form2添加属性,通过为属性赋值和读取属性值来进行数据传递。首先为Form2添加公共属性,代码如下:

       #region 使用属性

         public string UserName

         {

              get

              {

                   return m_txtUserName.Text;

              }

              set

              {

                   if(value == null)

                       m_txtUserName.Text = String.Empty;

                   else

                       m_txtUserName.Text = value;

              }

         }

         #endregion

   然后在Form1中,显示Form2之前,为其属性赋值,并且在对话框关闭之后,读取该属性的值,从而完成数据的传递。代码如下:

             Form2 f = new Form2("guest");

 

              f.UserName = m_userName;

 

              DialogResult r = f.ShowDialog();

              if(r == DialogResult.OK)

              {

                   m_userName = f.UserName;

                   m_lblMessage.Text = String.Format("Hello, {0}!", f.UserName);

              }

              else

                   m_lblMessage.Text = "Please Login";

c) 通过事件(参数)传递

   首先,给Form2添加事件参数类型和事件处理委托的定义,代码如下:

         #region 使用事件

         public event LoginEventHandler Login;

 

         public class LoginEventArgs : EventArgs

         {

              string m_userName;

 

              public string UserName

              {

                   get

                   {

                       return m_userName;

                   }

                   set

                   {

                       if(value != null)

                            m_userName = value;

                       else

                            m_userName = String.Empty;

                   }

              }

 

              public LoginEventArgs(string userName)

              {

                   this.UserName = userName;

              }

         }

 

         public delegate void LoginEventHandler(object sender, LoginEventArgs e);

         #endregion

然后,在Form2中合适的地方,即用户希望触发数据传递时,触发这个事件,代码如下:

              if(this.Login != null)

                   this.Login(this, new LoginEventArgs(m_txtUserName.Text));

 

              this.DialogResult = DialogResult.OK;

   同样,在Form1中,除了需要创建并显示Form2之外,还要为Form2的对象添加一个事件处理方法,代码如下:

              Form2 f = new Form2("guest");

 

              f.Login += new Form2.LoginEventHandler(f_Login);

              f.ShowDialog();

上面讲述的三种方法,效果都是一样的,如下图所示:

windows mobile窗口之间传递数据的方法

分享到:
评论

相关推荐

    《Windows Mobile平台应用与开发》Wince5.0范例与资源.rar

    DataTransport——在窗体间传递数据 PlayingSound——输出声音提示 CalculateSum——阻塞用户输入 DealWithScreenOrientation——以编程方式修改屏幕方向 第8章 用户输入和屏幕绘图技术 MouseEvents——监视鼠标...

    使用 Microsoft 365 部署 Windows 10

    部署 Windows 10 移动企业版和 Windows 10 IoT Mobile 的更新 使用适用于企业的 Windows 更新部署更新 配置适用于企业的 Windows 更新 将适用于企业的 Windows 更新与管理解决方案集成 演练:使用组策略配置...

    NET compact FrameWork移动开发指南 首发绝对清晰版

    第1篇主要介绍了Windows Mobile平台、.NET Compact Framework和开发工具Visual Studio 2005。第2篇主要介绍了在C/S架构的移动应用程序中,如何利用.NET Compact Framework进行GUI设计和客户端应用的编程。第3篇主要...

    NET compact FrameWork移动开发指南 绝对清晰版

    第1篇主要介绍了Windows Mobile平台、.NET Compact Framework和开发工具Visual Studio 2005。第2篇主要介绍了在C/S架构的移动应用程序中,如何利用.NET Compact Framework进行GUI设计和客户端应用的编程。第3篇主要...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    3G手机等嵌入式技术终端实现监控,视频会议,即时通讯的平台开发

    手机操作系统目前支持Windows Mobile 5.0、Windows Mobile 6.0以及Windows Mobile 6.1系列; 支持Symbian S60、苹果iPhone OS 3.0和谷歌Android平台的手机终端软件稍后将陆续发布,目前正在研发过程中。 手机硬件...

    新版Android开发教程.rar

    Mobile Mobile Mobile Mobile Operators Operators Operators Operators 移动运营商类 China Mobile Communications Corporation 中国移动通信 KDDI CORPORATION 日本 KDDI 电信 NTT DoCoMo, Inc. 日本多科莫电信 ...

    Google Android SDK开发范例大全(完整版)

    Android 提供多种连接选项,包括 WiFi、蓝牙和通过蜂窝(cellular)连接的无线数据传输(例如 GPRS、EDGE 和 3G)。Android 应用程序中一项流行的技术是链接到 Google 地图,以便在应用程序中显示地址。Android 软件...

    C#源码大集合 01(共3卷)

    实例144 如何在Web页中获取浏览器信息 │ ├─实例145 如何在Web页中浏览图像 │ ├─实例146 如何在Web页中绘制图形 │ ├─实例147 如何在Web页间传递数据 │ ├─实例148 如何创建Web Services程序...

    C#源码大集合 03(共3卷)

    实例144 如何在Web页中获取浏览器信息 │ ├─实例145 如何在Web页中浏览图像 │ ├─实例146 如何在Web页中绘制图形 │ ├─实例147 如何在Web页间传递数据 │ ├─实例148 如何创建Web Services程序...

    C#源码大集合 02(共3卷)

    │ ├─实例147 如何在Web页间传递数据 │ ├─实例148 如何创建Web Services程序 │ ├─实例149 如何打包Web Services程序 │ └─实例150 如何访问Web Services程序 ├─C#源码第二部分 │ ├─第00部分 基础...

Global site tag (gtag.js) - Google Analytics