2013-05-09 68 views
0

我正在處理一個C#winForm項目,當用戶單擊我的dataGridView的特定行時顯示一個ContextMenuStrip,它允許用戶將數據輸入到toolStripTextBoxItem中...問題我'當時我通過TableLayoutPanel動態添加更多控件到我的winForm中......這導致我的dataGridView重新定位,但是我的ContextMenuStrip被「卡住」在它之前的位置。我如何將我的ContextMenuStrip附加到我的dataGridView中,使它重新定位到我的dataGridView的新位置?調整ContextMenuStrip到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

+0

你有錯誤的標籤,隊友;你標記爲C,但這是一個C#問題。我自己不知道任何C#。 – 2013-05-09 01:21:55

回答

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)); 
} 
+0

但這與點擊無關。如果用戶點擊,我可以對齊...我在說什麼時候動態添加小部件,並且如果contextMnuStrip打開,網格被重新定位,它也不會被重新定位 – 2013-05-10 11:04:28

+0

您想要更改上下文菜單的位置嗎而它被打開? – Uzzy 2013-05-10 13:50:30

+0

是的...那就是我想要做的。如果網格在cxtMnuStrip打開時重新定位或調整大小,則不會重新定位cxtMnuStrip。它留在前面的網格位置 – 2013-05-11 14:33:27