任务:熟悉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