2

いくつかのデータを含むデータグリッドビューがあります。セルをクリックすると表示されるカスタムボタンを追加しました。このボタンをクリックすると、ポップアップ フォームが開きます。私の要件は、datagridview の選択されたセルのすぐ下に表示されるポップアップ フォームの場所のみを設定することです。以下はスクリーンショットです:

enter image description here

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 に答える