注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C# Windows编程入门(三)  

2010-12-13 20:15:55|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.3 加载文件

这一部分将使得前面创建的程序能够在用户点击Load按钮后,弹出一个对话框,选择一个图片显示在PictureBox中。

源代码如下:

using System;

using System.Drawing;

using System.Windows.Forms;

 

namespace MyNamespace

{

    public class MyForm : System.Windows.Forms.Form

    {

        Button btnLoad;

        PictureBox pboxPhoto;

        public MyForm()

        {

            this.Text = "Hello Form 1.3";

            // Create and configure the Button

            btnLoad = new Button();

            btnLoad.Text = "&Load";

            btnLoad.Left = 10;

            btnLoad.Top = 10;

            btnLoad.Click += new System.EventHandler(this.OnLoadClick);

            // Create and configure the PictureBox

            pboxPhoto = new PictureBox();

            pboxPhoto.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;

            pboxPhoto.Width = this.Width / 3;

            pboxPhoto.Height = this.Height / 3;

            pboxPhoto.Left = (this.Width - pboxPhoto.Width) / 2;

            pboxPhoto.Top = (this.Height - pboxPhoto.Height) / 2;

            pboxPhoto.SizeMode = PictureBoxSizeMode.StretchImage;

            // Add our new controls to the Form

            this.Controls.Add(btnLoad);

            this.Controls.Add(pboxPhoto);

        }

        private void OnLoadClick(object sender, System.EventArgs e)

        {

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Title = "Open Photo";

            dlg.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";

            if (dlg.ShowDialog() == DialogResult.OK)

            {

                pboxPhoto.Image = new Bitmap(dlg.OpenFile());

            }

            dlg.Dispose();

        }

        public static void Main()

        {

            Application.Run(new MyForm());

        }

    }

}

运行并加载一个图片,效果如下:

C Windows编程入门(三) - Castor - 趁年轻,多折腾~~

对上述程序的解释。

首先是命名空间的变化,增加了新的命名空间System.Drawing,该命名空间在这里用来提供Bitmap类的支持,语句pboxPhoto.Image = new Bitmap(dlg.OpenFile());即是使得图片框的Image属性为对话框打开的文件路径。然后需要说说的是OpenFileDialog类,该类和其他许多类提供了一个通用的对话框,这里是打开文件的对话框,其他还有保存、颜色、字体、打印等的通用对话框,具体使用将会在后面做详细的介绍。最后需要说明的是事件。

事件的侦听

如果仔细想一下就会发现窗口程序会花大量的时间不做任何事情。例如这个程序开始运行后,需要等待用户来点击按钮,可是用户可能会在程序执行后马上点击,也可能是在1-2个小时后,如何处理这种情况呢?有两种方式:一是应用程序每过一个给定的时间间隔就检查是否有这种行为的发生,另一种方式是当该行为发生后,操作系统将该程序唤醒。

实际上Windows操作系统采用的是第二种方式。显然这种方式将会更节省资源并能保证其他任务不受打扰。应用程序老老实实的在窗口等着,啥也不干,只有操作系统通知他们该对用户的行为作出相应的时候,才懒懒散散的活动起来了。再一次体现了操作系统是个管家婆。Windows内部通过传递消息实现这一目的,在C#中则体现为事件。Application.Run方法使应用程序以一种合适的方式等待消息。

因此,这个程序的执行是这样的:程序被加载后,什么也不做,当用户点击Load按钮后,程序被唤醒,并执行Click函数,该函数被称为事件处理函数。

程序中的代码片段:

btnLoad.Click += new System.EventHandler(this.OnLoadClick);

实现了事件的注册,注意操作符+=,它不删除原事件处理函数,但继续添加新的事件处理函数。如果一个事件有多个事件处理函数,他们将会按照被添加的顺序依次执行。语句中“System.EventHandler”是一个代理,它规定了处理事件函数的格式,在这里,.NET Framework中是这样定义的:

public delegate void EventHandler(object sender, EventArgs e);

参数sender通常表示收到事件的控件,e表示其中所包含的信息。

还要补充一点的是图形的显示问题。

       图片的大小肯定不会和图片框完全吻合,这个时候就要选择如何显示了。PictureBoxSizeMode属性完成该功能。

 
  评论这张
 
阅读(1171)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016