右键快捷菜单的创建及控件的动态添加

任务:熟悉c#的winform右键快捷菜单的使用,熟悉使用右键实现控件的动态添加

技术要点:

    1.实现控件的动态添加,设置控件的位置、大小和名称等属性

    2.熟悉ContextMenuStrip控件的使用

实现过程:

  1.创建Winform窗体,并添加ContextMenuStrip控件

  2.编辑ContextMenuStrip控件,为其添加“添加控件”和“删除控件”两个选项

  3.此时运行程序,右键并不会弹出菜单,因为快捷菜单的使用,还需要绑定到其他的控件或窗体,这里将ContextMenuStrip绑定到Form1上,在Form1的ContextMenuStrip属性中设置:

  4.此时运行窗体,单击“右键”

  这里就不上图了,因为实在不知道怎么截屏了,一截右键弹出的快捷菜单就会消失,总之右键肯定是会出现快捷菜单的了,然后我们开始设置快捷菜单的对应的响应事件

 

二 动态添加控件

  1.单击“ContextMenuStrip1”控件的"添加控件",添加对应的处理方法

1    Button btn = new Button();
2    btn.Size = new Size(100, 40);
3    btn.Location = new Point(10,10);
4    btn.Name = "btn1";
5    btn.Text = "按键测试";
6 
7    this.Controls.Add(btn);

这里需要注意的是,必须要有this.Controls.Add(btn)这句话,才能使控件最终添加到面板上;

还有这里有一个问题就是,添加的控件只能在固定的一个位置,那如果是多个呢?????

所以我们加入对添加个数的计数,用于控制添加控件的位置。

  2.添加变量“num”,对控件的个数进行计数,并利用这个变量对行列坐标进行更改,这里利用了“取余”和“取商”的两个特点(当然这里用了3,是因为我想一行显示三个,根据自己需要改吧),不知道别人是不是也是这么做的,反正这里的效果还是不错的。

 

 

1     Button btn = new Button();
2     btn.Size = new Size(100, 40);
3     btn.Location = new Point(10+100*(num%3), 10+40*(num/3));
4     btn.Name = "btn"+num.ToString();
5     btn.Text = "按键"+num.ToString();
6 
7     this.Controls.Add(btn);
8     num++;

  

3.当然,这里还有个问题就是没有对边界进行判断,这里暂且不管了,并不是我想说的重点,有个悬念吧,以后有机会再写啦

 

三.既然都可以添加了,自然也可以删除,不过问题就来了,添加new一个就好了,删除总不能直接delete啊,虽说我在创建的时候给每一个控件添加了名字,但是我还不知道怎么使用这个名字去删除控件,想来想去,不得不用绝招了:list数组

list数组可以用来存放控件,很多人应该都知道吧,不知道也没关系,接着看就是了。

 

1.先定义全局变量:

  num:保存控件的个数

  Lbtn:用于保存button的数组

 

public int num = 0;
List<Button> Lbtn=new List<Button>();

 

控件的添加代码:

1 Button btn = new Button();
2 btn.Size = new Size(100, 40);
3 btn.Location = new Point(10 + 100 * (num % 3), 10 + 40 * (num / 3));
4 btn.Name = "btn" + num.ToString();
5 btn.Text = "按键" + num.ToString();
6 this.Controls.Add(btn);
7 Lbtn.Add(btn);
8 num++;

控件的删除代码:

1 this.Controls.Remove(Lbtn[num-1]);
2 Lbtn.RemoveAt(num-1);
3 num--;

看了这么多代码,还是来看看效果图吧:

                                            

第一张图:添加4个控件,实现自动换行

第二张图:点击添加按键

第三张图:点击删除按键

效果很不错,删了加加了删,只要不是超出数组的索引范围不会出现问题

代码下载链接:http://download.csdn.net/detail/u010312811/8533765

posted @ 2015-03-25 22:16  imstrive  阅读(1753)  评论(0编辑  收藏  举报