.Net Compact Framework开发(1)——基本原则和常用控件

基本原则

  • Windows Mobile程序永远不由用户关闭,通过处理ActivateDeactive Event在前后台切换的时候处理使用的资源;通过处理ClosingClosed Event来处理被OS自行关闭的时候要处理的动作;通过设置MinimizeBox=true来将OK按钮替换成X按钮,点击X按钮会造成系统最小化 (Deactive)而不是关闭;
  • 通过Project Property->Common Propertiies->General->Application Icon来设置程序的关联图标;

常用控件

  • Form Control

PocketPC中的FormFormBorderStyle.None会得到一个无边框无TitleBar的窗口;FillBorderStyle.FixedSingle或其他值得到一个全屏化的窗口;
WindowsCE 中的FormFormBorderStyle.FixedDialogFormBorderStyle.None会得到一个无边框无TitleBar 的窗口;FillBorderStyle.FixedSingle或其他值得到一个按照缺省的Size属性设置大小的窗口;
Form
ControlBox属性决定了最大/最小/X按钮的可见性;对于PocketPCControlBox属性最多包含一个按钮;WindowsCE可以包含多个按钮,单独按钮的可见性可以通过MinimizeBoxMaximizeBox属性设置;
Form
WindowsState属性决定了窗口的初始视觉效果,只能设置为FormWindowState.Normal FormWindowState.Maximized;对于PocketPC来说这两个值都会造成程序充满屏幕,但是Normal会显示 StartMenuMainMenuMaximize则不显示;
对于PocketPC,只有FormBorderStyle.None的情况下FormSize属性和Location属性才生效;对于WindowsCE则总是生效;

  • Button Control(主要使用Click事件):
  • TextBox Control支持BackColorForeColorPasswordChar属性,支持KeyPressKeyUpKeyDown事件 (Directional Pad的各个对应键值是Keys.UpKeys.DownKeys.LeftKeys.RightKeys.Return;),不支持Click 事件;
  • Label Control主要使用Text属性,使用TextAlign属性控制显示的对齐方式,支持TextChanged事件;
  • RadioButton Control位于同一个Container(例如Panel)中的时候被认为是同一组,当用户点击RadioButton的时候触发Click事件,当其选中状态变化的时候触发CheckedChanged事件;
  • CheckBox Control主要使用CheckState属性(UncheckedCheckedIndeterminate);当CheckState= IndeterminateThreeState=true的时候,CheckBox变灰并选中,这时如果AutoCheck=false CheckBox不响应用户点击、AutoCheck=true则用户点击会enable这个控件;
  • ComboBox Control/ListBox Control的列表既可以在设计的时候通过Items属性修改,也可以在运行的时候通过Add/Remove/Clear方法修改—— comboBox1.Items.Add("Hi")ComboBox也可以绑定DataSource属性到一个Collection object,缺省情况下ComboxBox通过调用DataSource每个成员的ToString来生成要显示的字符串,可以通过ComboBox DisplayName属性来定制要显示的属性;ComboBox Control通过SelectedIndex/SelectedItem属性来获取选中的项目;

    class Customer {
      string m_First;
      string m_Middle;
      string m_Last;

      public Customer(string first, string middle, string last) {
        m_First = (first == null) ? string.Empty : first;
        m_Middle = (middle == null) ? string.Empty : middle;
        m_Last = (last == null) ? string.Empty : last;
      }

      public string FirstName {
        get { return m_First; }
      }

      public string MiddleName {
        get { return m_Middle; }
      }

      public string LastName {
        get { return m_Last; }
      }

      static string FullNameWithInitial = "{0} {1}. {2}";
      static string FullNameNoInitial = "{0} {1}";
      public string FullName {
        get {
          return (m_Middle.Length > 0) ?
            string.Format(FullNameWithInitial, m_First, m_Middle[0], m_Last) :
            string.Format(FullNameNoInitial, m_First, m_Last);
        }
      }
    }

    private void LoadCustomers() {
      if(customers != null)
        return;

        customers = new Customer[6];
        customers[0] = new Customer("Ronnie", "Donnell", "Yates");
        customers[1] = new Customer("Moya", "Alicia", "Hines");
        customers[2] = new Customer("Veronica", "Christine", "Yates");
        customers[3] = new Customer("Diane", "", "Taylor");
        customers[4] = new Customer("Kindell", "Elisha", "Yates");
        customers[5] = new Customer("Zion", "Donnell", "Yates");

        this.comboBox1.DataSource = customers;
        this.comboBox1.DisplayMember = "FullName";
    }
    ...
    string selItem = comboBox1.Items[comboBox1.SelectedIndex].ToString();
    string selItem = comboBox1.SelectedItem.ToString();
    ...

  • NumericUpDown Control只能接受整数,有上下限,常用属性为Minimum, Maximum, Value, Increment, ReadOnly, Text;如果用户输入的数据合法,Value==Text,否则Text=用户输入,Value=Maximum;支持ValueChanged事件 (只在通过代码或者上下箭头改变Value的时候触发,用户输入不触发这个事件)
  • DomainUpDown Control类似NumericUpDown control但是显示的是一系列string而不是整数,主要使用ItemsText属性;Items的操作方法类似ComboBox;支持 TextChangedSelectedIndexChanged事件(SelectedIndexChanged只在通过代码或者上下箭头改变的时候 触发,用户输入不触发这个事件);
  • ProgressBar Control主要使用Minimum, Maximum, Value属性;
  • StatusBar Control只能显示字符串,主要使用Text属性;
  • TrackBar Control是一个滑动条,和ProgressBar类似,主要使用Minimum, Maximum, Value属性;Orientation属性控制滑动条的方向,TickFrequency属性控制tick mark的距离,SmallChangeLargeChange分别是键盘和点击的步进量;主要使用ValueChanged事件;
  • ToolBar Control不能显示Text,使用ImageList Control来设置图标;要使用ToolBar遵循如下步骤:

    添加ImageList Control,通过Images属性添加图标,图标会自动resize16x16
   
添加ToolBar Control,设置ImageList属性;
   
通过Button属性弹出的对话框添加按钮,ButtonStyle属性可以是DropDownButtonPushButtonSeparatorToggleButton
   
添加ButtonClick事件的handler,通过ToolBarButtonClickEventArgs.Button来判定哪个按钮被点击
    private void
    toolBar1_ButtonClick(object sender,
            System.Windows.Forms.ToolBarButtonClickEventArgs e) {
      if(e.Button == this.toolBarButton1) {
        OpenFileDialog dlg = new OpenFileDialog();
        if(dlg.ShowDialog() == DialogResult.OK) {
          this.lblOpenFile.Text = dlg.FileName;
        }
      }
      else if(e.Button == this.toolBarButton2) {
        SaveFileDialog dlg = new SaveFileDialog();
        if(dlg.ShowDialog() == DialogResult.OK ) {
          this.lblSaveFile.Text = dlg.FileName;
        }
      }
    }

  • MainMenu Control可以包含MenuItem Control,主要触发Click事件;

    MenuItem fileMenu = new MenuItem();
    MenuItem newItem = new MenuItem();
    MenuItem sepItem = new MenuItem();
    MenuItem exitItem = new MenuItem();

    fileMenu.Text = "File";
    newItem.Text = "New";
    sepItem.Text = "-";
    exitItem.Text = "Exit";

    fileMenu.MenuItems.Add(newItem);
    fileMenu.MenuItems.Add(sepItem);
    fileMenu.MenuItems.Add(exitItem);
    mainMenu1.MenuItems.Add(fileMenu);

  • ContextMenu ControlMainMenu几乎一样,但是MainMenu关联于FormContextMenu关联于其他ControlContextMenu在显示前会触发Popup事件,在点击时会触发CLick事件;

    ContextMenu cMenu = new ContextMenu();
    MenuItem menuItem1 = new MenuItem();
    MenuItem menuItem2 = new MenuItem();

    menuItem1.Text = "Default Item 1";
    menuItem2.Text = "Default Item 2";

    // Add menuItem2 as a child of menuItem1
    menuItem1.MenuItems.Add(this.menuItem2);

    // Add menuItem1 to the context menu
    cMenu.MenuItems.Add(this.menuItem1);

    // Add the context menu to a label control
    label1.ContextMenu = cMenu;
    ......
    private void contextMenu1_Popup(object sender, System.EventArgs e) {
      this.contextMenu1.MenuItems.Clear();
      if(this.checkBox1.Checked)
        this.contextMenu1.MenuItems.Add(this.menuItem1);
      if(this.checkBox2.Checked)
        this.contextMenu1.MenuItems.Add(this.menuItem2);
      if(this.checkBox3.Checked)
        this.contextMenu1.MenuItems.Add(this.menuItem3);

      // Always add the default menu
      this.contextMenu1.MenuItems.Add(this.menuItem4);
    }

    private void menuItem1_Click(object sender, System.EventArgs e) {
      MessageBox.Show("You selected MenuItem 1");
    }
    ......

  • Timer Control允许你周期性触发事件,event handler在窗口代码的同一个Thread内运行;当TimerEnabled=true的时候,每经过Interval指定的毫秒数,就触发Tick事件;
  • OpenFileDialog SaveFileDialog Control,使用Filter属性设置显示的文件类型,可以通过改变FilterIndex属性(从1开始)来选择file filter;使用InitalDirectory属性来设置起始目录;通过ShowDialog方法来显示对话框;通过Filename属性返回选中的 文件名;

    OpenFileDialog ofDlg = new OpenFileDialog();
    ofDlg.Filter = "DLL|*.dll|Executable|*.exe";
    ofDlg.IntialDirectory = "//My Documents";

    if(DialogResult.OK == ofDlg.ShowDialog()) {
      MessageBox.Show("You Selected " + ofDlg.FileName);
    } else {
      MessageBox.Show("Go ahead, select a file!");
    }

  • Panel Control是其他控件的容器,主要使用Add方法;
  • HScrollBar VScrollBar Control,主要使用MinimumMaximum(实际最边上的值是Maximum-LargeChange+1)、SmallChange LargeChangeValueValue属性改变的时候会触发ValueChanged事件;
  • ImageList Control中如果你想要16x16以外的大小,使用ImageSize属性;主要使用Images属性及其Add方法(支持System.Drawing.IconSystem.Drawing.Image);
  • PictureBox Control用于显示图像,主要使用Image属性,但是只能在左上角显示且没有拉伸功能;Image可以从file system获得,也可以从resource获得,还可以从ImageList得到;

    // resize the image
    imageList1.ImageSize = new System.Drawing.Size(92, 156);
    // load the resized image
    pictureBox1.Image = imageList1.Images[0];

  • ListView Control支持4中显示模式Details, LargeIcon, List, SmallIcon,通过View属性类设置;通过操作Columns来控制Details模式下的SubItems,既可以在设计的时候通过 Columns属性来设置,也可以在运行的时候生成;

    System.Windows.Forms.ColumnHeader columnHeader1 = new ColumnHeader();
    System.Windows.Forms.ColumnHeader columnHeader2 = new ColumnHeader();
    System.Windows.Forms.ColumnHeader columnHeader3 = new ColumnHeader();

    columnHeader1.Text = "Name";
    columnHeader2.Text = "Purpose";
    columnHeader3.Text = "Availability";

    listView1.Columns.Add(columnHeader1);
    listView1.Columns.Add(columnHeader2);
    listView1.Columns.Add(columnHeader3);

ListView Control中的每一行都是一个ListViewItem,每个ListViewItem包含ListViewSubItem(通过SubItems属 性操作,数量=columns-1);ListView可以关联两个ImageListSmallImageListLargeImageList, 每个ListViewItem包含ImageIndex属性表示关联的图标;

    ListViewItem listViewItem1 = new ListViewItem();
    ListViewSubItem listViewSubItem1 = new ListViewSubItem();
    ListViewSubItem listViewSubItem2 = new ListViewSubItem();

    listViewItem1.Text  = "Red Delicious";
    listViewSubItem1.Text = "Snacking";
    listViewSubItem2.Text = "All Year";

    listViewItem1.SubItems.Add(listViewSubItem1);
    listViewItem1.SubItems.Add(listViewSubItem2);
    listView1.Items.Add(listViewItem1);

ListView ControlSelectedIndex变化的时候触发SelectedIndexChanged事件(每次改变选择实际上会触发两次事件,第一次表示前一个选择失效,第二次表示新选择);

    private void listView1_SelectedIndexChanged(object sender,
            System.EventArgs e) {
      if(this.listView1.SelectedIndices.Count <= 0)
        return;

      int selNdx = this.listView1.SelectedIndices[0];
      label3.Text = listView1.Items[selNdx].Text;
    }

ListView Control还有几个重要属性CheckBoxes(改变CheckState的时候触发ItemCheck)、FullRowSelect HeaderStyleClickable会触发ColumnClick事件,Nonclickable不触发事件,None不显示column header);

  • TabControl Control包含多个TabPage,可以通过TabPages属性操作;包含SelectIndex属性表示选择的TabPage,在改变的时候触发SelectedIndexChanged事件;
  • TreeView Control具有Nodes属性,包含一系列TreeNode,每个TreeNode也包含Nodes属性;TreeView具有ImageList ImageIndex(可以通过TreeNode.ImageIndex对父层的设置进行Override)、SelectedImageIndex(可 以通过TreeNode.SelectedImageIndex对父层的设置进行Override)、ShowPlusMinusShowLines (在TreeNode间画线)、ShowRootLines(是否在TreeNodeRoot之间画线)、CheckBoxes(对应的状态属性为 Checkedcheck node的操作会触发AfterCheck事件);TreeNode具有TextImageIndexSelectedImageIndex属性;

    TreeNode treeNode1 = new TreeNode();
    TreeNode treeNode2 = new TreeNode();

    treeNode1.Text = "Red Apples";
    treeNode2.Text = "Red Delicious";

    treeNode1.Nodes.Add(treeNode2);
    treeView1.Nodes.Add(treeNode1);

TreeView Control具有SelectedNode属性,引用当前被选中的TreeNode,选中TreeNode会触发AfterSelect事件, TreeViewEventArgs包含了NodeAction(表示触发事件的原因:ByKeyboardByMouseCollapse ExpandUnknown)属性
    private void
    treeView1_AfterSelect(object sender,
            System.Windows.Forms.TreeViewEventArgs e) {
      TreeNode selNode = e.Node;
      label2.Text = selNode.Text;
    }

NET compact FrameWork移动开发指南 * 书名:.NET compact FrameWork移动开发指南 * 作者:颜友宁 * 来源:清华大学出版社 * 出版时间:2006年11月 * ISBN:暂无 * 定价:63元 看 书 评 论 收 藏打 分 购 买 图书版权归出版社和作者所有,CSDN & DearBook独家提供试读和连载 内容介绍: 全书共6篇。第1篇主要介绍了Windows Mobile平台、.NET Compact Framework开发工具Visual Studio 2005。第2篇主要介绍了在C/S架构的移动应用程序中,如何利用.NET Compact Framework进行GUI设计和客户端应用的编程。第3篇主要介绍了.NET全新的数据访问模型ADO.NET和XML处理技术。第4篇主要介绍了移动Web应用程序的开发以及移动智能设备所支持的网络技术。第5篇主要介绍了移动应用高级功能,如P/Invoke、POOM、资源与本地化、多线程编程、性能优化和移动安全策略等的开发。第6篇从实际... 目录 * 目录 序言 * 前言 第2章 .NET Compact Framework简介 * 2.1 概述 * 2.2 公共语言运行库 * 2.3 .NET Compact Framework类库 * 2.4 .NET Compact Framework不包括的功能 * 2.5 小结 第8章 自定义控件 * 8.1 概述 * 8.2 自定义控件类型与创建方式 * 8.3 复合控件 * 8.4 扩展控件 * 8.5 自绘控件 * 8.6 自定义组件 * 8.7 小结 第11章 图形 * 11.1 概述 * 11.2 基础知识 * 11.3 绘制图形 * 11.4 绘制字符串 * 11.5 绘制图像 * 11.6 绘制图形报表 * 11.7 小结 第15章 SQL Server 服务器数据访问 * 15.1 概述 * 15.2 如何访问SQL Server数据库 * 15.3 使用SqlConnection连接数据库 * 15.4 使用SqlCommand查询数据库 * 15.5 向SQL语句传递参数 * 15.6 ExecuteReader方法 * 15.7 重载ExecuteReader方法 * 15.8 使用存储过程 * 15.9 DataSet和DataAdapter组件 * 15.10 使用事务 * 15.11 SQL错误处理 * 15.12 小结 第16章 SQL Server CE本地数据访问 * 16.1 概述 * 16.2 数据库基本操作 * 16.3 远程数据访问 * 16.4 合并复制 * 16.5 冲突 * 16.6 数据同步设计策略 * 16.7 小结 第17章 XML编程 * 17.1 概述 * 17.2 XML基础 * 17.3 DOM编程 * 17.4 通过DataSet处理XML * 17.5 XML Schema * 17.6 XML序列化 * 17.7 使用XPath表达式 * 17.8 使用XML配置文件 * 17.9 小结 第18章 注册表编程 * 18.1 概述 * 18.2 Windows Mobile注册表 * 18.3 使用注册表 * 18.4 注册表应用实例 * 18.5 注册表安全 * 18.6 小结 第19章 移动Web开发 * 19.1 概述 * 19.2 移动Web网站 * 19.3 ASP.NET移动控件 * 19.4 移动Web窗体设计 * 19.5 自定义ASP.NET移动控件 * 19.6 移动Web应用的国际化 * 19.7 移动Web网站安全性 * 19.8 小结 第23章 使用POOM * 23.1 概述 * 23.2 Pocket Outlook对象模型 * 23.3 访问POOM * 23.4 使用任务对象 * 23.5 使用联系人对象 * 23.6 使用约会对象 * 23.7 小结 第24章 多线程编程 * 24.1 概述 * 24.2 Windows CE进程和线程 * 24.3 .NET Compact Framework线程 * 24.4 多线程程序设计 * 24.5 简单的多线程示例 * 24.6 改进多线程示例 * 24.7 线程池 * 24.8 Timer类 * 24.9 线程内访问界面控件 * 24.10 死锁风险 * 24.11 线程同步 * 24.12 小结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值