如何在上下左右移动时,仍能对DataGrid上的控件进行准确定位?

sonny72 2005-02-02 02:02:28
我的目的是把DataGrid改成只读的,用户要更改数据,点中单元格时,在单元格上覆盖一个下拉菜单.
如果DataGrid没有滚动条移动,那没问题。可是如果有滚动条移动,怎么才能对其进行定位呢?
请高人指点!在线等!
...全文
471 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonny72 2005-02-03
  • 打赏
  • 举报
回复
这个问题还没完,顶一下.
曲滨_銘龘鶽 2005-02-03
  • 打赏
  • 举报
回复
private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
DataGrid dg = sender as DataGrid;

DataGrid.HitTestInfo hti;
//通过坐标取得 HitTestInfo 对象
hti = dg.HitTest(e.X, e.Y);

//如果鼠标是在 单元格上的话(其他还有列头等不应该处理)
if (hti.Type == System.Windows.Forms.DataGrid.HitTestType.Cell)
{
//取得 现在位置的控件 如果是 Grid 多半都是
Control ctl= dg.GetChildAtPoint(new Point(e.X,e.Y));
if (ctl !=null)
{
//取得控件在屏幕上的位置
Rectangle CtlWinRect = ctl.RectangleToScreen(
new Rectangle(0,0,ctl.Width,ctl.Height)
);
//这样可以show 出菜单
contextMenu1.Show(ctl,new Point(0,ctl.Height));
//行索引
int rowIndex = hti.Row;
//列索引
int columnIndex = hti.Column;

//改有的数据都有了。
//想干什么都行

}
}
}
lengyuewuhen 2005-02-03
  • 打赏
  • 举报
回复
顶了
噯卟釋手 2005-02-03
  • 打赏
  • 举报
回复
up
sonny72 2005-02-03
  • 打赏
  • 举报
回复
可不可以获取DATAGRID滚动条的参数?
sonny72 2005-02-02
  • 打赏
  • 举报
回复
for:zzcboy(北斗)
我有鼠标定位没有意义,我要的是单元格定位,要用下拉菜单覆盖单元格,光有鼠标定位是无法准确覆盖单元格的,只能在单元格附近,对不?
zzcboy 2005-02-02
  • 打赏
  • 举报
回复
楼主看这样何如
//定义鼠标点击事件
this.YourDataGrid.MouseDown += new System.Windows.Forms.MouseEventHandler(this.YourDataGrid_MouseDown);

private void YourDataGrid_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)
{
// e.X 和 e.Y 为鼠标点击的坐标, 这样就确定了下拉框应该出现的位置了
//ShowYourList(e.x, e.y)//你自己的显示下拉框的函数
}
北京的雾霾天 2005-02-02
  • 打赏
  • 举报
回复
学习中.......
sonny72 2005-02-02
  • 打赏
  • 举报
回复
for:zhzuo(秋枫)
能给我贴过来吗?我这边一下子上不了国际的了.
sonny72 2005-02-02
  • 打赏
  • 举报
回复
要确定哪一行哪一列是很简单的,this.dataGrid_marc_show.CurrentCell就都有了,问题是滚动条移动后,有一部分的dataGrid已经隐藏,由dataGrid推算出来的值和实际的值已经不一样了啊!我要的值是去掉dataGrid已经隐藏的那部分值
marvelstack 2005-02-02
  • 打赏
  • 举报
回复
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp
北京的雾霾天 2005-02-02
  • 打赏
  • 举报
回复
我代码中的this指的是DataGrid的一个实例,是这样的:

if (dataGrid.HitTest(m_CurPoint).Type != System.Windows.Forms.DataGrid.HitTestType.Cell)
{
Console.WriteLine(dataGrid.HitTest(m_CurPoint).Row);//所在的行号
Console.WriteLine(dataGrid.HitTest(m_CurPoint).Column);//所在的列号
}
北京的雾霾天 2005-02-02
  • 打赏
  • 举报
回复
可以跟据鼠标的当前位置来确定鼠标下的DataGrid是哪一行哪一列,然后由行和列来确定当前行和列的坐标来确定出你的菜单显示的位置,参考如下代码:

Point m_CurPoint = 当前鼠标位置;

if (this.HitTest(m_CurPoint).Type != System.Windows.Forms.DataGrid.HitTestType.Cell)
{
Console.WriteLine(this.HitTest(m_CurPoint).Row);//所在的行号
Console.WriteLine(this.HitTest(m_CurPoint).Column);//所在的列号
}

sonny72 2005-02-02
  • 打赏
  • 举报
回复
就象你说的,可以在滚动条移动时,隐藏掉下拉菜单啊!重新点击时,再显示.可是怎么获取呢?
北京的雾霾天 2005-02-02
  • 打赏
  • 举报
回复
就是能获取滚动条的移动参数,也不能准确的保证它们的同步,比如一个先一个后,因为它们位置的移动不是同一个时间,当处理很多事件这种现象会明显出来.不过希望你能找到一个合适的方法...
sonny72 2005-02-02
  • 打赏
  • 举报
回复
for:hbxtlhx(踏雪寻岩)
问题是怎么定位,如何获取DataGrid单元格的定位?由于滚动条移动后不能通过对DataGrid的推算来获取定位了.
sonny72 2005-02-02
  • 打赏
  • 举报
回复
肯定有办法?
比如说能不能获取滚动条的移动参数?
我不知道怎么获取!
或者还有其它好办法!
北京的雾霾天 2005-02-02
  • 打赏
  • 举报
回复
你这样不行吗?在滚动条移动时把你的菜单隐藏掉,当用鼠标点击时再显示出来不也可以吗?
harisonh2l 2005-02-02
  • 打赏
  • 举报
回复
up
北京的雾霾天 2005-02-02
  • 打赏
  • 举报
回复
原来是这个意思啊,那就不知道了.
加载更多回复(5)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧