guanqq
寻找沙漠绿洲

2009年4月27日

委托其实挺简单的,好多人把它搞复杂了。

1.首先,有一堆长的相似的方法

Code

 我们看的出来,这几个方法长的极为相似:(1)他们都没有返回值。(2)他们的两个参数都是int型的。(3)内容上,他们都是对数字的处理。

可是,如果要求我们老是对两个数字进行加减乘除操作,我们就得不停地调用这四个方法,好烦。正在此时,委托出场了。委托对于方法,有一种提纲挈领的作用,因此它的出场,就是抓住了这几个方法的共同点。

2.委托的出场

//定义一个处理数字的委托
public delegate void CopeWithNumber(int num1, int num2);

delegate是一个关键字,表示定义委托,void表示没有返回值,int num1,int num2表示输入参数都是int型的。可以看得出来,这个委托和方法长的特别像。这种像只是形似,而本质不同。但是在实际应用中,我们没有必要太在乎这个,现在方法有了,委托也有了,并且长的这么像,他们之间肯定有某种联系,通过这种联系,就可以调用方法了……

3.增加联系,调用方法

Code

我们可以看到,新建一个委托对象,将方法加入到委托的对象中,然后通过一句:copeWithNumber(2,3),就可以实现对2,3的加减乘除,无论在什么地方,只要用copeWithNumber(2,3)就行了,而没有必要每次去调用那四个方法。

这就是委托的皮毛,但是理解的这个皮毛,再去看委托复杂的例子,包括泛型委托,也不是那么可怕。万事开头难,后来会越来越好的。

posted @ 2009-04-27 10:56 沙漠之驼 阅读(140) 评论(5) 编辑

2008年6月13日

首先,读取目标文件
 1        private void button1_Click(object sender, EventArgs e)
 2        {
 3
 4            //建立一个打开文件对象
 5            OpenFileDialog ofdAim = new OpenFileDialog();
 6
 7            //初始首选路径
 8            ofdAim.InitialDirectory = "c:\\";
 9
10            //扩展名
11            ofdAim.Filter = "txt files (*.txt) |*.txt|All files (*.*)|*.*";
12
13            //如果选择了是,应该执行什么操作
14            if (ofdAim.ShowDialog() == DialogResult.OK)
15            {
16                textBox1.Text = ofdAim.FileName;
17            }

18        }

19

其次,选择源文件存储的路径
 1      private void button2_Click(object sender, EventArgs e)
 2        {
 3            //选择当前的文件夹对象
 4            FolderBrowserDialog fbdDlg = new FolderBrowserDialog();
 5            fbdDlg.SelectedPath = "F:\\Xunlei";
 6            
 7            //假如选择是“是”
 8            if (fbdDlg.ShowDialog() == DialogResult.OK)
 9            {
10                textBox2.Text = fbdDlg.SelectedPath;
11            }

12        }

13
最后,点了存储按钮,保存
 1        private void button3_Click(object sender, EventArgs e)
 2        {
 3            try
 4            {
 5                //判断是否输入
 6                if (textBox1.Text == "" || textBox2.Text == "")
 7                {
 8                    MessageBox.Show("请选择文件名、上传目录");
 9                    return;
10                }

11
12                Byte[] btInfo = null;
13                // 打开文件,读文件
14                if (File.Exists(textBox1.Text))
15                {
16                    //将文件读成数据流的方式存在内存中
17                    btInfo = File.ReadAllBytes(textBox1.Text);
18                }

19
20                //取得文件名
21                int lastNum = textBox1.Text.LastIndexOf('\\');
22                string fileName = textBox1.Text.Substring(lastNum + 1);
23               
24                //写文件
25                if (!Directory.Exists(textBox2.Text))
26                {
27                    Directory.CreateDirectory(textBox2.Text);
28                }

29
30                if (File.Exists(textBox2.Text + "\\" + fileName))
31                {
32                    File.Delete(textBox2.Text + "\\" + fileName);
33                }

34
35                //向目标文件夹中写入文件
36                File.WriteAllBytes(textBox2.Text + "\\" + fileName, btInfo);
37                btInfo = null;
38
39                //弹出提示信息
40                MessageBox.Show("上传成功");
41            }

42            catch(Exception ex)
43            {
44                MessageBox.Show(ex.Message);
45            }

46
47        }
posted @ 2008-06-13 11:21 沙漠之驼 阅读(62) 评论(0) 编辑

2008年3月25日

摘要: 这里介绍BitBlt的应用。我把书上的代码重新写了一边,在该加注释的地方加了一些注释。这样大家读起来就会更加方便一些。这是第十四章的代码。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->usingSystem;usingSystem.Collectio...阅读全文
posted @ 2008-03-25 18:37 沙漠之驼 阅读(77) 评论(1) 编辑