窗体上有一个LISTVIEW 和一个COMBOBOX,其中LISTVIEW的列头为
序号    类型      
1        a
2        b
3        c
......combo 中有a,b,c,d,e五个选项。
选中一行时,例如2这一行,COMBOBOX出现在B的位置,通过选择COMBOBOX的选项 e ,就把b改写为e问题是,如果LISTVIEW 宽度过大,或者ITEMS多到出现垂直滚动条时,拖动滚动条,COMBOBOX没发随着选中的ITEM跑。
我想到两个可能的解决办法:
1. 需要知道选择的项向上或下移动了多少才能让COMBBOX移动到正确的位置;
2. 捕捉到拖动滚动条这个事件,只要拖动了滚动条,COMBOBOX就隐藏掉,这样也稍微好看点!
请大家帮忙解决!
UP 有分!
有个文章,在LISTVIEW中加入COMBOBOX和TEXTBOX,但是类似的问题他没解决。
地址:http://dev.csdn.net/article/21/21801.shtm
问题:在有水平滚动条,或者垂直滚动条的情况下就有问题了,里面添加的EditBox,ComboBox没有跟着一起跑。

解决方案 »

  1.   

    改Paint事件!因为你的Listview的item,移动了,而相应的paint没改!我猜是这样的!
      

  2.   

    回复人: xxuu503(2005年CSDN MVH(Most Valuable Hemorrhoiders)) ( ) 信誉:100 改Paint事件!
    怎么改呢?继承,改写?
      

  3.   

    在没有滚动条的情况下,定位combobox我试了没有问题
    在有滚动条不滚动的情况下,定位也没有没有
    一旦定了位,根据combo的值修改选中项的值也没有问题
    就是在滚动的时候不跟着跑,我试了,在滚动的时候,窗体没有收到任何消息
    就是说在.net自带的listview控件里实现自动跑估计不太可能或是我还没有找到好的办法现在只能是你自写控件,继承listview,在控件中捕捉vscroll消息,制作vsroll事件。 private ListViewItem olditem=null; //存放选中之前的选中项 private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    if(this.listView1.SelectedItems.Count==0)
    this.comboBox1.Visible=false;
    else
    {
    //操作老item
    if(this.olditem!=null)
    {
    olditem.SubItems[1].Text=this.comboBox1.Text;
    }
    //操作新item
    ListViewItem lvi=this.listView1.SelectedItems[0];
    //跑
    Rectangle r=lvi.GetBounds(ItemBoundsPortion.Entire);
    this.comboBox1.Location=new Point(r.Left+this.listView1.Columns[0].Width+this.listView1.Left+2,r.Top+this.listView1.Top);
    this.comboBox1.Size=new Size(this.listView1.Columns[1].Width,r.Height); this.comboBox1.Text=lvi.SubItems[1].Text;
    this.comboBox1.Visible=true;
    //写值老item
    this.olditem=lvi;
    }
    }
      

  4.   

    我试了,在滚动的时候,窗体没有收到任何消息
    ........
    你要知道这是的Message不是发给窗体的,是发给那个Listview的句柄的建议看一下:MSDN的List-View Control Reference
    里面有这个控件message及宏的定义!
      

  5.   

    把Listview做成分页的,然后动态刷新。或者用API改写
      

  6.   

    我想在滚动时就没有必要跟着跑了吧?如果滚动让combobox在listview的上方(top大于listview)时,不就要让combobox隐藏?那要花多少时间要实现啊??不如在combobox显示时,让listview不可滚动不是更好吗?
      

  7.   

    你的问题在 codeproject中有个例子
    你在控件中搜索这个:ListViewEmbeddedControls