相册程序(09.2.24)

     今天开始构建一个相册程序,相关功能将逐步实现,敬请留言我的博客。谢谢指教......
     目标:1、熟悉Win Form编程;
             2、菜单,上下文菜单和状态栏的使用以及涉及的类结构;

             3、方法的封装,动态显示图片框和状态栏的显示模式

  1using System;
  2using System.Collections.Generic;
  3using System.ComponentModel;
  4using System.Data;
  5using System.Drawing;
  6using System.Text;
  7using System.Windows.Forms;
  8
  9namespace MyPhotos
 10{
 11    public partial class MainForm : Form
 12    {
 13        //  MainForm构造函数
 14        public MainForm()
 15        {
 16            InitializeComponent();
 17            //  菜单和上下文菜单的连接
 18            memuView.DropDown = ctxMenuPhoto;
 19        
 20        }

 21        
 22        //  /打开图片
 23        private void menuFileLoad_Click(object sender, EventArgs e)
 24        {
 25            openFileDialog1.Title = "Load Photos";
 26            openFileDialog1.Filter = "jpg files (*.jpg)" + "|*.jpg|All files(*.*)|*.*";
 27            openFileDialog1.InitialDirectory = "C:\\Documents and Settings\\Administrator\\My Documents";  //  默认路径
 28            if (openFileDialog1.ShowDialog() == DialogResult.OK)
 29            {
 30                try
 31                {
 32                    pbxPhoto.Image = new Bitmap(openFileDialog1.OpenFile());
 33                    //  显示状态栏
 34                    SetStatusStrip(openFileDialog1.FileName);
 35                }

 36                catch (ArgumentException ex)         //ArgumentException 在向方法提供的其中一个参数无效时引发的异常。 
 37                {
 38                    MessageBox.Show("Unable to load file:" + ex.Message);
 39                }

 40                openFileDialog1.Dispose();
 41            }

 42        }

 43
 44        //  清除图片
 45        private void menuFileClear_Click(object sender, EventArgs e)
 46        {
 47            pbxPhoto.Image = null;
 48        }

 49
 50        //  退出程序
 51        private void menuFileExit_Click(object sender, EventArgs e)
 52        {
 53            Close();
 54        }

 55
 56        //  单击下拉菜单时触发
 57        private void menuImage_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
 58        {
 59            //MessageBox.Show("DropDownItemClicked");
 60            ProcessImageClick(e);
 61        }

 62
 63        //  实现ProcessImageClick方法,根据所选的菜单项更改图片框控件的SizeMode属性
 64        private void ProcessImageClick(ToolStripItemClickedEventArgs e)  // 接收ImageClick事件参数
 65        {
 66            ToolStripItem item = e.ClickedItem;     //  定义被单击的项
 67            string enumVal = item.Tag as string;    //  把Tag(Object类)转换成字符
 68            if (enumVal != null)
 69            {
 70                //  把字符转换成SizeMode值,
 71                pbxPhoto.SizeMode = (PictureBoxSizeMode)Enum.Parse(typeof(PictureBoxSizeMode), enumVal);
 72            }

 73        }

 74
 75        //  当与一个项相关联的下拉列表即将显示时就会发生的事件
 76        private void menuImage_DropDownOpening(object sender, EventArgs e)
 77        {
 78            //MessageBox.Show("DropDownOpening");
 79            ProcessImageOpening(sender as ToolStripDropDownItem);
 80        }

 81
 82        //  实现ProcessImageOpening方法,设置给定的下拉列表仲每个菜单项的Enabled和Checked属性
 83        private void ProcessImageOpening(ToolStripDropDownItem parent)
 84        {
 85            if (parent != null)
 86            {
 87                string enumVal = pbxPhoto.SizeMode.ToString();  //  获得当前枚举的字符串形式
 88                foreach (ToolStripMenuItem item in parent .DropDownItems )
 89                {
 90                    item.Enabled = (pbxPhoto.Image != null);    
 91                    item.Checked = item.Tag.Equals(enumVal);
 92                }

 93            }

 94        }

 95
 96        //  ///封装状态条变化的逻辑方法
 97        private void SetStatusStrip(string path)        //  接受文件的路径为唯一参数
 98        {
 99            if (pbxPhoto.Image != null)
100            {
101                statusInfo.Text = path;
102                //  显示图像大小
103                statusImageSize.Text = String.Format("{0:#}×{1:#}", pbxPhoto.Image.Width, pbxPhoto.Image.Height);
104            }

105            else
106                //  如果没有图像则设置为空白
107            {
108                statusInfo.Text = null;
109                statusImageSize.Text = null;
110                statusAlbumPos.Text = null;
111            }

112        }

113        
114        //  设置下拉菜单的DropDownButton项目,动态修改边框风格
115        private void statusBorder_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
116        {
117            ToolStripItem item = e.ClickedItem;     //  定义被单击的项
118            string enumVal = item.Tag as string;    //  把Tag(Object类)转换成字符
119            if (enumVal != null)
120            {
121                //  把字符转换成BorderStyle值,
122                statusImageSize.BorderStyle = (Border3DStyle)Enum.Parse(typeof(Border3DStyle), enumVal);
123            }

124        }

125
126    }

127}

 运行结果:

 

小评:学好业务的封装和结合系统的动态需求编写合适的代码

 

posted on 2009-02-24 11:59  冠华仔  阅读(524)  评论(0编辑  收藏  举报

导航