0

ユーザーが dataGridView の特定の行をクリックすると ContextMenuStrip を表示する C# winForm プロジェクトに取り組んでいます。これにより、ユーザーは toolStripTextBoxItem にデータを入力できるようになります。 TableLayoutPanel を介して動的に winForm に...これにより、dataGridView が再配置されますが、ContextMenuStrip は以前の場所に「スタック」しています。ContextMenuStrip を dataGridView にアタッチして、dataGridView の新しい位置に再配置するにはどうすればよいですか?

これが私が持っているものの例です。

ContextMenuStrip ctxtMnuStrp = ContextMenuStrip();
ctxtMnuStrp.Closing += ctxtMnuStrp_Closing;

ToolStripTextBox txtBox = new ToolStripTextBox();

ctxtMnuStrp.Items.Add(txtBox);

DataGridView grid = new DataGridView();
grid.MouseClick += grid_CellClick;

private void grid_CellClick(object sender, DataGridViewCellEventArgs e)
{
    Rectangle rect = grid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
    ctxtMnuStrp.Show(grid.PointToScreen(new Point(rect.Left, rect.Bottom));
 }

 private void ctxtMnuStrp_Closing(object sender, ToolStripDropDownClosingEventArgs e)
 {
     if (e.CloseReason == ToolStripDropDownCloseReason.ItemClicked ||
         e.CloseReason == ToolStripDropDownCloseReason.AppFocusChange)
         e.Cancel = true;
 }

これは、最初に ContextMenuStrip を配置し、ユーザーが ContextMenuStrip を操作している間は開いたままにしておく限り、正常に機能します...しかし、別の dataGridView が私の winForm に追加されると、グリッドが再配置され、ContextMenuStrip は再配置/整列されませんグリッドの新しい場所と、最初の位置にぶら下がったままにしました。

これを修正するにはどうすればよいですか?

前もって感謝します、

-DA

4

1 に答える 1

0

ハンドラー イベント関数で送信者を使用する必要があります。このようなもの:

private void grid_CellClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridView source = (DataGridView) sender;
    Rectangle rect = source.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false);
    ctxtMnuStrp.Show(source.PointToScreen(new Point(rect.Left, rect.Bottom));
}
于 2013-05-09T02:16:27.457 に答える