C# listview添加combobox到单元格的实现代码

 更新时间:2014年06月18日 14:50:07   投稿:mdxy-dxy  
从别处转来的,自己进行了一些小的修改,还不错,你自己先拖一个ListView1和一个ComboBox1,需要的朋友可以参考下

实现代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    ListViewItem lvi;
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      comboBox1.Visible = false;
      listView1.Columns.Add("第一列");
      listView1.Columns.Add("第二列");
      listView1.Columns.Add("第三列");
      this.comboBox1.Items.Add("科比");
      this.comboBox1.Items.Add("姚明");
      this.comboBox1.Items.Add("杜兰特");
      this.comboBox1.Items.Add("邓肯");
      ListViewItem item;
      item = new ListViewItem(1.ToString());
      item.SubItems.Add("姚明");
      item.SubItems.Add("科比");
      listView1.Items.Add(item);
      item = new ListViewItem(2.ToString());
      item.SubItems.Add("邓肯");
      item.SubItems.Add("杜兰特");
      listView1.Items.Add(item);

    }

    private void listView1_MouseUp(object sender, MouseEventArgs e)
    {

      lvi = this.listView1.GetItemAt(e.X, e.Y);
      if (lvi != null)
      {
        //获取选中行的Bounds 
        Rectangle Rect = lvi.Bounds;
        int LX = listView1.Columns[0].Width;
        int RX = listView1.Columns[0].Width + listView1.Columns[1].Width;
        // if (e.X > RX || e.X < LX)
        //{
        this.comboBox1.Visible = false;
        Rect.X = listView1.Left + listView1.Columns[0].Width + 2;
        Rect.Y = this.listView1.Top + 2+Rect.Y;
        Rect.Width = listView1.Columns[1].Width + 2;
        this.comboBox1.Bounds = Rect;
        this.comboBox1.Text = lvi.SubItems[1].Text;
        this.comboBox1.Visible = true; 
        this.comboBox1.BringToFront();
        this.comboBox1.Focus();
        //}
        // int intColIndex = lvi.SubItems.IndexOf(lvi.GetSubItemAt(e.X, e.Y));
      }
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
      lvi.SubItems[1].Text = comboBox1.Text;
      // comboBox1.Visible = false;
    }

    private void comboBox1_MouseLeave(object sender, EventArgs e)
    {
      lvi.SubItems[1].Text = comboBox1.Text;
     // comboBox1.Visible = false;
    }
  }
}

相关文章

  • C#线程定义和使用方法详解

    C#线程定义和使用方法详解

    这篇文章主要介绍了C#Thread类的基本用法,如何定义一个线程类,为线程传递参数的方法,详解看下文
    2013-11-11
  • C#从数据库读取数据到DataSet并保存到xml文件的方法

    C#从数据库读取数据到DataSet并保存到xml文件的方法

    这篇文章主要介绍了C#从数据库读取数据到DataSet并保存到xml文件的方法,涉及C#操作DataSet保存到XML文件的技巧,需要的朋友可以参考下
    2015-04-04
  • asp.net中调用oracle存储过程的方法

    asp.net中调用oracle存储过程的方法

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它,下面给大家介绍下asp.net中调用oracle存储过程的方法,需要的朋友可以参考下
    2015-08-08
  • 解析C#的扩展方法

    解析C#的扩展方法

    在本文中,主要对扩展方法进行了一些规则说明、声明方式,使用方式,以及对扩展方法的意义和扩展方法的原理进行了简单的解答。并在本文的最后给了一个枚举的扩展方法代码。
    2016-12-12
  • 关于C#中排序函数的总结

    关于C#中排序函数的总结

    下面小编就为大家带来一篇关于C#中排序函数的总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • C#获取进程和对进程的操作

    C#获取进程和对进程的操作

    下面是一个例子:获取进程列表、创建“违禁”进程名单、查找并杀死进程。注意先要在项目里添加System.Management的引用。
    2013-04-04
  • Unity绘制二维动态曲线

    Unity绘制二维动态曲线

    这篇文章主要为大家详细介绍了Unity绘制二维动态曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C#简单实现SNMP的方法

    C#简单实现SNMP的方法

    这篇文章主要介绍了C#简单实现SNMP的方法,通过一个简单的自定义类分析了C#实现SNMP的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C# null 合并运算符??(双问号)使用示例

    C# null 合并运算符??(双问号)使用示例

    这篇文章主要介绍了C# null 合并运算符??(双问号)使用示例,?? 运算符称作 null 合并运算符。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数,需要的朋友可以参考下
    2014-06-06
  • xml 中的冒号 读取问题的解决

    xml 中的冒号 读取问题的解决

    c#读取xml时因为冒号问题的解决方法
    2008-03-03

最新评论