本帖最后由 shencb 于 2010-06-08 14:30:36 编辑

解决方案 »

  1.   

    to iwxiaot:
    这个应该如何用代码实现?
    我也见到设计窗体里能看到这个选项,却找不到窗体后台的代码实现方式。
      

  2.   

    在SplitContainer 里放个FlowLayoutPanel 会自动排列。
    不过就有水平滚动条, 还是不会自动缩放
      

  3.   

    看样子, ListBox 的Parent 是DataGridView吧, 你应该把ListBox的Parent设置为Form, 然后添加DataGridView的CurrentCellChanged事件, 在该事件中对ListBox进行定位。 ListBox的TopMost属性需置为TRUE。
      

  4.   

    我觉得自己的提问艺术该提高:
    这个问题的关键难点在于,如何超越容器,显示子控件的问题。
    当然,这个是不可能做到的,子控件必须包含在容器内部。
    所以问题转化为,如何将一个不属于该容器的控件,
    让这个控件,与容器内的子控件进行(X,Y)坐标的衔接。大家可以提一些自己的想法,
    容器是SplitContainer,容器内控件是DataGridView里的DataGridViewCell,
    外部控件是ListBox,
    如何将ListBox有效地定位到DataGridViewCell的Bottom处,
    是这个问题的关键。
      

  5.   

    那用PointToClient得到要显示的位置在FORM中的位置,再显示
      

  6.   


    PointToClient是支持屏幕坐标和Form内相对坐标的转换,这方法似乎不可用。
    因为现在需要的是,将容器内相对坐标,转化成Form工作区坐标。
      

  7.   

    是这样吗,用控件调用PointToClient怎么会是屏幕坐标和Form内相对坐标的转换呢。
      

  8.   


    我试下,我忽略了控件本身带有的PointToClient事件.
      

  9.   

    to  iwxiaot:
    我试了几次,都没定位成功。
    请问下,如果已知DataGridViewCell cell
    怎么得到该cell相对于Form工作区的坐标?
      

  10.   

    可以看一下DataGridView的Location属性,也就是DataGridView的左上角的坐标,可以将ListBox的Location属性与DataGridView的Location属性相比较,如你想让这两个控件的左上角坐标相同的话,只要这两个属性值相等就行。
      

  11.   

    DataGridView的Location属性是相对于DataGridView的容器而言的吧,
    而不是相对于Form而言的,
    如果使用这种方式获取坐标的话,
    必须要以一个递归算法,获取DataGridView相对于Form的Location。
      

  12.   

    可是我的鼠标位置,是不固定的,而ListBox的显示位置是固定的。
    只能截取光标位置。
    这又回到了如何定位DataGridViewCell的问题了。
      

  13.   

    这类应用建议使用propertyGrid控件.可以避免.