创建快捷菜单现在对我来说轻车熟路,轻而易举,代码如下:
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文件中。