关于Excel操作编写的一个软件设计构思案例[连载] --如何创建快捷菜单执行人机交互操作、软件初始化设置

来源:互联网 发布:如何利用蜂窝网络定位 编辑:程序博客网 时间:2024/04/26 01:21

创建快捷菜单现在对我来说轻车熟路,轻而易举,代码如下:

        private void Form1_Load(object sender, EventArgs e)        {            加载空结果(); 加载树图标集();            System.Action<string[]> 带参无回传方法2 = (列名) => { 创建数据显示(列名, 条件设定); }; 带参无回传方法2.Invoke(创建2);            条件设定.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;            处理提示.Text = "友情提示:操作顺序:1、提取(所有地址),2、替换(错字和不全文字),3、补缺(地址和户名);规则:字数多优先提取;原则:各列自上而下。";            string[] 主体快捷参数 = new string[]            {                "[金刚般若]|0", "-|",                "浏览Excel文件|8","保存Excel文件|8",                 "-|",                 "数据导入|1", "提取数据|1", "数据导出|1",                "-|",                "导入设定|2", "重载设定|2", "保存设定|2", "导出设定|2",                 "-|",                "全列替换|4", "定列替换|4", "定位替换|4",                "-|",                "补缺地址|7", "补缺户名|7", "标准地址|7",                "-|",                "查找字符|5", "地址树形加载|6", "地址树形展开|6", "地址树形折叠|6",                "-|", "退出(&X)|3"            };/**/            EventHandler[] 主体快捷事件 = new EventHandler[]             { null, null,                (悟, 空) => 浏览Excel文件(),                (悟, 空) => 保存Excel文件(),                null,                (悟, 空) => 数据导入(),                (悟, 空) => 提取数据自动处理(读取表格数据.Tables[0].Rows.Count),                (悟, 空) => 数据导出Excel文件(处理结果, 创建1),                null,                (悟, 空) => 导入设定(),                (悟, 空) => 读取设定("条件设定.xls", true),                (悟, 空) => 条件设定生成表("条件设定.xls", true),                (悟, 空) => 数据导出Excel文件(条件设定, 创建2),                null,                (悟, 空) => 替换字符("全列"),                (悟, 空) => 替换字符("定列"),                (悟, 空) => 替换字符("定位"),                null,                (悟, 空) => 补缺地址(""),                (悟, 空) => 补缺户名(),                (悟, 空) => 读文本("标准地址", ""),                null,                (悟, 空) => 查找字符(),                (悟, 空) => 地址树(),                (悟, 空) => {地址分类树.ExpandAll();if (树定位.Text != "")地址分类树.SelectedNode = 树定位;},                (悟, 空) => 地址分类树.CollapseAll(),                null, (悟, 空) => this.Close()            };            this.BeginInvoke(new System.Action<ContextMenuStrip, string[], EventHandler[], string[]>((菜单名, 参数, 事件, 背景图) => 快捷菜单(菜单名, 参数, 事件, 背景图)), 主体快捷菜单, 主体快捷参数, 主体快捷事件, null);            this.BeginInvoke(new System.Action(delegate()            {                 this.ContextMenuStrip = 主体快捷菜单;                 菜单设置(new int[] { 3, 6, 7, 14, 15, 16, 18, 19, 20, 21, 22, 23 }, false);            }));            主体快捷菜单.BackgroundImage = System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\2012年08月19日 星期日 27217.BMP");            读取设定("条件设定副本.xls", false); 读取设定("条件设定.xls", true);        }

本来刚写这个软件时,每个方法都是空参数的,随着功能增加,为了重用代码,有些方法逐步加了参数,参数个数也随之增加,写代码已形成习惯,就是喜欢写独立的方法,这样可以在其他软件中直接复制过去,直接使用或是稍加修改使用,充分提高代码利用率,这个是这次软件能快速开发投入使用得益之处。如下代码之前发布过:

        private void 快捷菜单(ContextMenuStrip 菜单名, string[] 参数, EventHandler[] 事件, string[] 背景图)        {            计数 = 0; string[] 列表 = null;            foreach (string 元素 in 参数)            {                if (元素 != null) 列表 = 元素.Split('|');                if (列表[0].Length > 0) 菜单名.Items.Add(列表[0]);                if (列表[1].Length > 0) 菜单名.Items[计数].Image = 图标集.Images[int.Parse(列表[1])];/*XP系统无法加载需注释掉这句单独生成*/                if (事件 != null && 事件[计数] != null) 菜单名.Items[计数].Click += new EventHandler(事件[计数]);                计数++;            }            //菜单名.Items[0].BackColor = System.Drawing.Color.Beige; 菜单名.Items[13].BackColor = System.Drawing.Color.Gold;            if (背景图 != null)                foreach (string 元素 in 背景图)                {                    if (元素 != null || 元素 != "") 列表 = 元素.Split('|');                    菜单名.Items[int.Parse(列表[0])].BackgroundImage = System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + 列表[1]);                }        }

菜单可否操作属性设置代码:

        private void 菜单设置(int[] 序, bool 选项)        { foreach (int 元素 in 序) 主体快捷菜单.Items[元素].Enabled = 选项; }

打开一个软件如果什么都没让人看到,那使用的人就会提问了,呵呵,所以,要给软件执行一些初始化操作,一打开软件,目光所见一目了然,所见即所得。
设置3个控件初始化,对左边树控件随意赋值,让人看到这是一棵树就行,所以,加载开篇中写的多维数组神树;上下2个数据显示控件分别显示标题,代码如下:

        private void 创建数据显示(string[] 表名, DataGridView 控件名)        {            控件名.Columns.Clear();            foreach (string 元素 in 表名)            {                DataGridViewTextBoxColumn 列 = new DataGridViewTextBoxColumn();                列.HeaderText = 元素; 列.DataPropertyName = 元素;                列.MaxInputLength = 3988; 控件名.Columns.Add(列);            }        }        private void 加载空结果()        {            System.Action<string[]> 带参无回传方法 = (列名) => { 创建数据显示(列名, 处理结果); };            带参无回传方法.Invoke(创建1); 处理结果.AllowUserToAddRows = false;        }        private void 加载树图标集()        {            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\icolicious.ico"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\Illustrator 10.ico"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\狮子.ico"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\阴阳图.jpg"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\五星红旗.png"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\查找.ico"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\Directory Tree.ico"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\torrentprogram.ico"));            图标集.Images.Add(System.Drawing.Image.FromFile(@System.Environment.CurrentDirectory + "\\图标集\\excel.ico"));            主体快捷菜单.ImageList = 图标集;        }

这样,软件就可以操作执行处理了,处理后的结果怎么弄出来呢,下次发布:如何把处理好后的数据导出Excel文件中。

原创粉丝点击