重新调整ContextMenuStrip到DataGridView
本文关键字:ContextMenuStrip DataGridView 调整 新调整 | 更新日期: 2023-09-27 18:12:51
我正在c# winForm项目中工作,当用户单击我的dataGridView的特定行时,它允许用户将数据输入到toolStripTextBoxItem中…我遇到的问题是,当我通过tabelayoutpanel动态添加更多控件到我的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
你需要在handler事件函数中使用sender。像这样:
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));
}