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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

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

网易考拉推荐

Windows应用高级编程笔记(4)  

2011-10-03 16:21:24|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近一直比较忙,学习的时间就显得比较少了,刚忙完一个小项目,又淘到一本好书,也是红皮书系列的,中文翻译是《Windows应用高级编程——C#编程篇》,翻译版由清华大学出版社出版。这本书说的比较详细,将许多书籍中细微末节的地方都说的比较清楚,采用面向对象的原则来介绍如何进行Windows编程,虽然带有“高级”字样,但是阐述详细,步骤清晰,对于一个初学者也是能够看得懂的。

Windows应用高级编程笔记(1) - Castor - 趁年轻,多折腾~~

=========================================================================================

下面说说第四章,比较多,需要分两次来写。其实看作者对菜单的介绍就知道是基于.NET Framework 1.1的,就算不是,绝对是使用了VS2003作为教材的编程工具。所以这里变化比较大,突然觉得买这本书有点亏了…… 
第4章    菜单栏和工具栏(1)

Windows应用程序有两种菜单:主菜单和弹出式(上下文)菜单。两种菜单都是从System.Windows.Forms.Menu抽象类继承而来。主菜单 是MainMenu,而上下文菜单是ContextMenu,两者都包含了MenuItem对象集。(似乎这本书说的还是.NET Framework 1.1中内容,现在都是使用MenuStrip了,菜单项也是ToolStripMenuItem)

通常主菜单是在界面中编辑的,不过也是可以用运行时来控制。

例如已经在系统中添加了一个MenuStrip控件,然后想在运行时添加和删除一个菜单项,如下:

//添加菜单项

private void button1_Click(object sender, EventArgs e)

{

    ToolStripMenuItem item = new ToolStripMenuItem("Click me");

    item.Size = new System.Drawing.Size(44, 21);

    item.Click += new EventHandler(MyItem_Click);

    this.menuStrip1.Items.Add(item);

}

//删除菜单项

private void button2_Click(object sender, EventArgs e)

{

    try

    {

        this.menuStrip1.Items.Remove(menuStrip1.Items[menuStrip1.Items.Count - 1]);

    }

    catch { }

}

//菜单项的事件绑定

private void MyItem_Click(object sender, EventArgs e)

{

    MessageBox.Show("Yes,you Click it");

}

运行效果如下:

Windows应用高级编程笔记(4) - Castor - 趁年轻,多折腾~~

点击添加两次就会有两个菜单项被添加进来,点击其中任意一个:

Windows应用高级编程笔记(4) - Castor - 趁年轻,多折腾~~

最后Remove所有菜单项: 

Windows应用高级编程笔记(4) - Castor - 趁年轻,多折腾~~

如果使用Enabled属性,还能使相关选项变灰,而不可用。而且,这个ToolStripMenuItem可以被多次添加,需要小心。
现在添加的是顶级菜单,如果需要的话,还可添加下级菜单,采用ToolStripMenuItem.DropDownItems.Add方法即可,通过采用这种方法,可以添加多层菜单。
例如:
private void button1_Click(object sender, EventArgs e)
{
    ToolStripMenuItem item = new ToolStripMenuItem("Click me");
    item.Size = new System.Drawing.Size(44, 21);
    ToolStripMenuItem SubItem = new ToolStripMenuItem("Sub Item");
    SubItem.Click += new EventHandler(MyItem_Click);
    item.DropDownItems.Add(SubItem);
    this.menuStrip1.Items.Add(item);
}

Windows应用高级编程笔记(4) - Castor - 趁年轻,多折腾~~

如果要设置快捷键的话,可以采用下面的方法:
SubItem.ShortcutKeys = (Keys)(Keys.Control|Keys.S);
通常快捷键有如下约定,最好实现相同的功能:
Ctrl+N:创建新文件或者打开新窗口
Ctrl+O:打开一个文件
Ctrl+S:保存文件
Ctrl+Z:取消
Ctrl+X:剪切
Ctrl+C:复制
Ctrl+V:粘贴
F10:菜单快捷键,相当于单独按Alt键
F2:保存当前文档
Alt+F4:关闭窗口
分隔符可以使用-号。总之,以设计方式创建菜单为主,而以运行时方式为辅。
上下文菜单
上下文菜单是ContextMenuStrip,本质上和主菜单是一样的,只是显示的方式不一样而已,把前面的代码简单修改一下:
private void button1_Click(object sender, EventArgs e)
{
    ToolStripMenuItem item = new ToolStripMenuItem("Click me");
    item.Size = new System.Drawing.Size(44, 21);
    ToolStripMenuItem SubItem = new ToolStripMenuItem("Sub Item");
    SubItem.ShortcutKeys = (Keys)(Keys.Control|Keys.S);
    SubItem.Click += new EventHandler(MyItem_Click);
    item.DropDownItems.Add(SubItem);           
    this.contextMenuStrip1.Items.Add(item);
    //绑定到窗口
    this.ContextMenuStrip = this.contextMenuStrip1;
}
点击Add按钮即可给窗体绑定一个上下文菜单,注意每个控件都可以有上下文菜单,通过设置ContextMenuStrip即可完成上下文菜单的绑定工作。

Windows应用高级编程笔记(4) - Castor - 趁年轻,多折腾~~

 突然我想到一个很有意思的应用:就是禁止文本框的右键功能,即给文本框绑定一个空的上下文菜单,当然,如果还要禁止快捷键(如Ctrl+C)的话,还得进行按键捕获。

 

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

历史上的今天

评论

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

页脚

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