zoukankan      html  css  js  c++  java
  • 右键快捷菜单的创建及控件的动态添加

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

    菜鸟一枚,但有一颗不断进取的心; 兴趣所至,相信自己终会成功!!!!! 加油,imstrive
  • 相关阅读:
    Pandas: 如何将一列中的文本拆分为多行? | Python
    Python项目实战:福布斯系列之数据采集
    Python: Pandas运算的效率探讨以及如何选择高效的运算方式
    Pandas数据处理实战:福布斯全球上市企业排行榜数据整理
    从历史来看印度的裂痕和隐忧 | 阅览群书
    Python库:序列化和反序列化模块pickle介绍
    无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
    spring 问题笔记
    java 大量数据处理问题记录
    spring mvc 整合swagger
  • 原文地址:https://www.cnblogs.com/imstrive/p/4367170.html
Copyright © 2011-2022 走看看