【C#】菜单

菜单栏是窗体程序中,一个很重要的组件,下面就利用一个小程序,说明C#窗体程序中如何使用菜单。

如下图,实现一个很简单的,在各类文本编辑器中都很常见的替换功能。


注意到,无论是菜单栏的工具 或者是 替换功能,都是配有快捷键的。

选择 替换功能弹出一个新的模态对话框,让用户输入东西。

具体制作过程如下:

1、首先贴上本解决方案的文件组织树,其中Intent.cs是用来在窗体与窗体之间传递数值的,具体在《【C#】窗体间互相传值》(点击打开链接)讲过,这里不再赘述了。


2、之后是Form1.cs的布局,本文的主角菜单就在这里出场了,与其它控件一样简单,直接从工具栏拖出MenuStrip就可以了,同时拖出textbox1这个控件,将textbox1的Multiline改成True,anchor改成Top,right,left,bottom以适应最大化。


在为Form1菜单添加每一项的时候注意:先输入英文,之后我们再自己手动改其Text,因为你输入的东西,会自动成name与text的一部分,name是不可以用中文的。对于类此“工具(T)”含有子项的东西,与当年VC6《【mfc】利用到MFC菜单、字体对话框、OnSize函数实现简易记事本》(点击打开链接)的菜单一样,在Text中写成“工具(&T)”就能够实现Alt+T这个快捷键了。


至于类似“替换”这样的子项,需要我们自行设置其ShortcutKeys,之后双击这个“替换”为其设置点击事件。


3、双击这个“替换”为其设置点击事件之后,不用急着写代码,我们先新建一个Form2窗体,与Intent.cs,Intent.cs就是用来传值的,代码如下,在之前的文章说过,不再赘述。

using System;
using System.Collections.Generic;
using System.Text;

namespace menu
{
    class Intent
    {
        public static Dictionary<string, Object> dict = new Dictionary<string, Object>();
    }
}

Form2的布局如下:


4、之后Form1的代码如下,替换文本很简单,点击“替换”按钮,Form2作为一个模态对话框蹦出来,得到Form2传递过来的两个值,直接取走textbox1的text用replace方法一整,再放上去就完成。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace menu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;//设置form1的开始位置为屏幕的中央  
        }

        private void replaceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();//声明要使用form2窗体
            form2.Text = this.Text;
            if (form2.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = textBox1.Text.Replace(Intent.dict["form2_textbox1_text"] + "", Intent.dict["form2_textbox2_text"] + "");
            }
        }
    }
}

5、Form2的代码则如下,设置好不同按钮的返回值给Form1就可以了。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace menu
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterParent;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Intent.dict["form2_textbox1_text"] = textBox1.Text;
            Intent.dict["form2_textbox2_text"] = textBox2.Text;
            this.DialogResult = DialogResult.OK;//同时设置返回值为OK,不设置的话,默认返回Cancel  
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值