WinForm系统开发个点心得(一)-2009-04-14

来源:互联网 发布:怎样当好一名淘宝客服 编辑:程序博客网 时间:2024/05/04 15:32

    最近在公司开发一个winform 应用程序, MDI 模式。具体功能是实现串口通讯,用Chart演示数据。

 在开发这个项目过程中的体会:

(1)当new 一个Form窗体类或其他类时,在构造函数中最好不要做与业务逻辑或稍复杂功能的处理,最多

   做些参数初始化,事件注册,简单赋值处理。

   理由:用一缺点说明。在构造函数中做复杂处理的话,当有异常发生时,系统容易崩溃,try... 

   catch 也不能避免这种运行中发生的异常。

(2)由于MDI窗体中一般会用菜单模式,所以MainForm中的设计时,使用几十种模式中的command模

   式比较好。

   主要代码如下:

using System;

namespace CsglChart.Common.Class
{
 public delegate void MenuCommandHandler(System.Windows.Forms.MenuItem menuItem, string command);


 public class clsMenuCommandSender
 {
  public clsMenuCommandSender()
  {
   this.m_Handler = new EventHandler(this.MenuClick);
  }
  }
  public void Registe(ICommandHandler command, System.Windows.Forms.MenuItem menuItem)
  {
   BindItem item = new BindItem();

   item.Command = command;
   item.MenuItem = menuItem;
   menuItem.Click += m_Handler;

   m_Items.Add(item);
  }


  public ICommandHandler GetCommand(System.Windows.Forms.MenuItem menuItem)
  {
   foreach(BindItem item in m_Items)
   {
    if (item.MenuItem == menuItem)
    {
     return item.Command;
    }
   }
   return null;
  }


  public System.Windows.Forms.MenuItem GetMenuItem(ICommandHandler command)
  {
   foreach(BindItem item in m_Items)
   {
    if (item.Command == command)
    {
     return item.MenuItem;
    }
   }
   return null;
  }

  #region Inner code
  private System.Collections.ArrayList m_Items = new System.Collections.ArrayList();
  private class BindItem
  {
   public System.Windows.Forms.MenuItem MenuItem = null;
   public ICommandHandler Command = null;
  }
  private System.EventHandler m_Handler = null;
  private void MenuClick(object sender, System.EventArgs e)
  {
   foreach(BindItem item in m_Items)
   {
    if (item.MenuItem == sender)
    {
     item.Command.excute(sender);
     break;
    }
   }
  }
  #endregion
 }
 public interface ICommandHandler
 {
  void excute(object sender);
 }
}
由于工具条上的快捷按钮与菜单中的某些按钮功能一样,所以注册完菜单按钮之后,再把工具条的快捷按钮

与对应菜单按钮邦定即可。

this.toolBar.Buttons[15].Tag = this.mtWindow_Arrange;

   toolBar.ButtonClick += new ToolBarButtonClickEventHandler(toolBar_ButtonClick);

 

private void toolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
  {
   System.Windows.Forms.ToolBarButton toolBtn = e.Button;
   if (toolBtn.Tag != null)
   {
    MenuItem item = (MenuItem)toolBtn.Tag;
    item.PerformClick();
   }
  }

再有其他心得继续写。。。