c# - 从数据 GridView 当前选定单元格的正下方打开一个弹出窗口

标签 c# winforms visual-studio-2010

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

enter image description here

最佳答案

这并不是 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/

相关文章:

c# - 试图获得身份中的所有角色

c# - 通过约定的多列唯一约束 FluentNHibernate 自动映射

c# - 在打开的cmd中运行命令

c# - 如何将嵌入式 list 移动到外部 .manifest 文件?

c# - 如何在至少打开一个模式窗口时最小化 winforms 应用程序

visual-studio - VS2010 : Does "Build Solution" build the solution?

.net - Visual Studio 2010 和框架版本

c# - 多页TIFF的分离性能

c# - 使用 Service Fabric 的 Owin 基于主机名的站点

visual-studio-2010 - Visual Studio Intellisense无法正常工作