从当前所选数据网格视图单元格的下方打开一个弹出窗口

时间:2013-11-07 18:02:57

标签: c# winforms visual-studio-2010

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

enter image description here

1 个答案:

答案 0 :(得分:2)

这不是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 我刚刚编辑了代码以尝试类似这样的内容,现在子代码往往只显示在该行的下方。