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

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

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

技术要点:

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

2.熟悉ContextMenuStrip控件的使用

实现过程:

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

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

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

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

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

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

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

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

二 动态添加控件

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

1    Button btn = newButton();
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);

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

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

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

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

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

1     Button btn = newButton();
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++;

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

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

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

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

1.先定义全局变量:

num:保存控件的个数

Lbtn:用于保存button的数组

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

控件的添加代码:

1 Button btn = newButton();
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--;

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

右键快捷菜单的创建及控件的动态添加第6张右键快捷菜单的创建及控件的动态添加第7张右键快捷菜单的创建及控件的动态添加第8张

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

第二张图:点击添加按键

第三张图:点击删除按键

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

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

免责声明:文章转载自《右键快捷菜单的创建及控件的动态添加》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server跨服务器查询11.3.1 将MediaRecorder用于视频下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jdk版本比较

JDK各个版本的新特性   对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言。今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性。希望能给予帮助。 JDK1.5新特性:   1.自动装箱与拆箱: 自动装箱的过程:每当需要一种类型的对...

设计统计英文字母出现频率的程序的感想

  今天下午我们在学习Java的过程中,王老师给我们留下了一个程序设计作业,其要求是让我们设计一个程序,要实现 输出单个文件中的前 N 个最常出现的英语单词,并将结果输入到文本文件中的功能。我思考并上机了一个下午最终实现了部分功能。   首先当看到这个题目的时候,我想到了将这个实验分成三部分:   1.读取指定文本的内容;   2.统计所有单词在该文本中的...

JSON格式要求

标准JSON的合法符号:{(左大括号) }(右大括号) "(双引号) :(冒号) ,(逗号) [(左中括号) ](右中括号) 注:JSON必须使用双引号,不能使用单引号 标准JSON的合法符号:{(左大括号) }(右大括号) "(双引号) :(冒号) ,(逗号) [(左中括号) ](右中括号) JSON字符串:特殊字符可在字符前面加 或使用 u 加 4位1...

微信小程序如何动态增删class类名

由于微信小程序开发不同于以往的普通web开发, 因此无法通过js获取wxml文件的dom结构, 因此从js上直接添加一个类名应该不可能了. 可是我们可以通过微信小程序数据绑定以及view标签的”data-“自定义属性去更改标签类名.  num记得设置默认值 ,这样第一个view颜色会是红色的 data:{  num:0, } .cur写上样式 .cur...

质因子分解——Prime Factors

先上原理 对于一个非素数来说有两种情况 1,所有质因子小于等于sqrt(n) 2,只存在一个大于sqrt(n)的质因子,其他质因子都小于sqrt(n) 至于证明,可以用反证法。 若是有多余一个大于sqrt(n)的质因子,这些因子的乘积..... 下面上代码 这里借助一个结构体,当然你也可以用数组 struct factor { int x;//记录...

POJ 3320 Jessica‘s Reading Problem(哈希、尺取法)

http://poj.org/problem?id=3320 题意:给出一串数字,要求包含所有数字的最短长度。 思路: 哈希一直不是很会用,这道题也是参考了别人的代码,想了很久。 1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 #in...