zoukankan      html  css  js  c++  java
  • ListView单击单元格 产生其他控件

      以combobox为例。

      假如一行里面只有一个combobox。

        //在类中声明一个控件数组
        private ComboBox[] cmds = null;
    
        //initview中调用dao组件获得显示的对象列表
        List<Indicator> plist = idao.queryIndicators();
    
        //根据对象列表个数new一组cmds
        cmds=new ComboBox[plist.Count];
    
        //在view的SelectedIndexChanged事件中
        if (this.listView1.SelectedItems.Count > 0)
        {
            //获得选中的行
            ListViewItem item = this.listView1.SelectedItems[0];
            //获得行号
            int index=this.listView1.SelectedIndices[0];
            cmds[index] = new ComboBox();
            for (int i = 1; i <= 50; i++){
                cmds[index].Items.Add(i + "");
                cmds[index].SelectedItem = "20";
                cmds[index].Bounds = item.SubItems[3].Bounds;
                listView1.Controls.Add(cmds[index]);
                cmds[index].Show();
            }        
    }

       如果一行有多个combobox呢? 这和一行一个的区别在于,一行两个不仅需要确定选中的是哪行,还要确定哪列。

      虽然只差这一点,但是实现确完全不同。

    
    

      private void indicatorView_MouseMove(object sender, MouseEventArgs e)//获取鼠标位置
      {
        mousePos.X = e.X;
        mousePos.Y = e.Y;
      }


    private
    void indicatorView_Click(object sender, EventArgs e) {   ListViewItem item = indicatorView.GetItemAt(mousePos.X, mousePos.Y);//根据鼠标当前位置得到item   Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire);   int StartX = rect.Left;   int ColumnIndex = 0;   int pos = GetScrollPos(this.indicatorView.Handle.ToInt32(), 0);   foreach (ColumnHeader Column in indicatorView.Columns)//选中的哪一列   {     if (mousePos.X + pos >= StartX + Column.Width)     {       StartX += Column.Width;       ColumnIndex += 1;     }   }   if (ColumnIndex == this.indicatorView.Columns.Count - 1)//如果选中最后一列   {     int index = this.indicatorView.SelectedIndices[0];     indicatorViewComboBox[index] = new ComboBox();     for (int i = 0; i <= 50; i+=10)       indicatorViewComboBox[index].Items.Add(i + "");     indicatorViewComboBox[index].SelectedItem = "20";     indicatorViewComboBox[index].Bounds = item.SubItems[ColumnIndex].Bounds;     indicatorView.Controls.Add(indicatorViewComboBox[index]);     indicatorViewComboBox[index].Show();   }   else if (ColumnIndex == this.indicatorView.Columns.Count - 2) { //其他列      } }
  • 相关阅读:
    【原】ios打包ipa的四种实用方法(.app转.ipa)
    【原】Mac下统计任意文件夹中代码行数的工具——cloc
    【原+转】用CMake代替makefile进行跨平台交叉编译
    【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
    【原】Github系列之一:一起做仿天气类应用中的实时模糊效果LiveBlur
    【原】iOS:一种直接修改frame的某个属性的方法
    【原】iOS优秀开源项目总结
    【原】你真的懂iOS的autorelease吗?
    【原】iOS容易造成循环引用的三种场景,就在你我身边!
    Failure [DELETE_FAILED_INTERNAL_ERROR]之后rm apk卸载
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/3245586.html
Copyright © 2011-2022 走看看