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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

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

网易考拉推荐
GACHA精选

C# Windows编程入门(九)  

2010-12-19 11:35:07|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

3.3   弹出事件和共享处理程序

       前面的File菜单已经是一个功能完善的菜单了,再说说View菜单。和File菜单有点不同,它的子菜单Image还包括一个下级菜单,所以在单击Image的时候不是执行事件处理函数,而是弹出下级菜单,因为一旦MenuItem对象包含下级菜单的时候,单击并不会触发Click事件。实际上,像Image这样的菜单项在显示子菜单前会触发一个Popup事件,这可以使事件处理函数修改子菜单的内容或者外观等。一个简单的例子是,Word中如果没有对象被选择,编辑菜单下的复制是灰显不可用的,而当有对象被选择(例如一段文字),则复制是可用的,如下图:

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

 

       下面将逐步说明使用DropDownOpening事件(原书中是Popup事件,VS2005中没有)来控制子菜单的显示。将分两部分实现。

       一是添加子菜单的Click事件处理函数。这个和前面Load有点不同。不同于LoadExit两个事件处理函数上功能的大相径庭,Stretch to FitActual Size两者的功能很相似,实现起来也很类似,这里将使用一个共享的事件处理函数。

       首先在Form1类中添加一个私有变量和一个整型数:

        private PictureBoxSizeMode[] modeMenuArray ={PictureBoxSizeMode.StretchImage,PictureBoxSizeMode.Normal};

private int _selectedImageMode = -1;

接下来,就是定义共享的事件处理函数:

protected void menuImage_ChildClick(object sender, System.EventArgs e)

{

    ToolStripMenuItem item = (ToolStripMenuItem)sender;

    ToolStrip parent = item.GetCurrentParent();

    _selectedImageMode = parent.Items.IndexOf(item);

    pictureBox1.SizeMode = modeMenuArray[_selectedImageMode];

    pictureBox1.Invalidate();

}

       首先要说明:原书上是采用的MenuItem,但是在VS2005中默认的是ToolStripMenuItem,并且没有index属性。这里采用ToolStripMenuItem先用GetCurrentParent()获取其父,然后又反过来求自己在其中的顺序。

       参数中的sender代表哪一个控件触发了该事件,这是共享事件处理函数的一个常用策略。接下来是将该事件处理函数和事件进行绑定。选择Stretch to Fit,然后单击属性中的事件,找到Click事件,和刚刚创建的事件处理函数建立关联。如下图:

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

 

       同样的把第二个Actual Size和也和该事件处理函数关联起来。运行后就能实现效果了。一个完整的共享事件处理函数的例子到此就大功告成了。如果需要在后面添加一个Center Image选项,将会很简单,即在modeMenuArray中加入一个PictureBoxSizeMode.CenterImage,在Image下添加一个Center Image的选项,最后把它的Click事件和前面的事件处理函数绑定起来就可以了,惊奇的是,事件处理函数不需要做任何的修改,这就是共享事件处理函数的妙处。

  评论这张
 
阅读(767)| 评论(1)
推荐 转载

历史上的今天

评论

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

页脚

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