2

我有一个带有一些数据的datagridview。我添加了一个自定义按钮,当我单击单元格时将显示该按钮。通过单击此按钮,将打开一个弹出表单。我的要求只是设置弹出表单的位置,该位置应显示在 datagridview 的选定单元格下方。下面是屏幕截图:

在此处输入图像描述

4

1 回答 1

3

这不是 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我刚刚编辑了代码来尝试这样的事情,现在子表单往往显示在行的下方一点点。

于 2013-11-07T19:07:54.583 回答