我有一个带有一些数据的datagridview。我添加了一个自定义按钮,当我单击单元格时会显示该按钮。单击此按钮将打开一个弹出表单。我的要求只是设置弹出表单的位置,该位置应显示在 datagridview 的选定单元格下方。以下是屏幕截图:
最佳答案
这并不是 100% 有效,但根据我的评论,这是一个起点:
主窗体:
public Form1()
{
InitializeComponent();
}
private Point _cellClick;
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
var h = dataGridView1.Rows[0].Height;
if (MousePosition.Y % h == 0)
{
_cellClick = new Point(MousePosition.X, MousePosition.Y);
}
else
{
var y = MousePosition.Y;
do
{
y++;
} while (y % h != 0);
_cellClick = new Point(MousePosition.X, y);
}
}
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2(_cellClick);
f.ShowDialog(this);
}
子表单:
private Point loc;
public Form2(Point location)
{
InitializeComponent();
loc = location;
}
private void Form2_Load(object sender, EventArgs e)
{
this.SetDesktopLocation(loc.X, loc.Y);
}
编辑这非常接近您正在寻找的内容,唯一的问题是子表单没有显示在单元格“附近”,而是显示在鼠标所在的位置他们点击了单元格。
您可能可以执行一些基本算术来计算单元格的高度以偏移 MousePosition.Y,以便子窗体显示在其旁边。我认为您只需将坐标舍入到最接近的 N 倍数,其中 N 是 dataGridView1.Rows[0].Height,向上舍入。
编辑 2 我刚刚编辑了代码来尝试类似的操作,现在子窗体往往会显示在行下方一点点的位置。
关于c# - 从数据 GridView 当前选定单元格的正下方打开一个弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843332/