2013-05-09 3 views
0

Я работаю над проектом C# winForm, который отображает ContextMenuStrip, когда пользователь нажимает на определенную строку моего dataGridView, он позволяет пользователю вводить данные в инструмент toolStripTextBoxItem ... проблема I ' m есть, когда я добавляю больше элементов управления к моему winForm динамически через TableLayoutPanel ... это заставляет мой 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 Безразлично 't переместить/выровнять себя к новому местоположению моей сетки и оставить висящим в его исходном положении.

Как исправить это?

Спасибо заранее,

-DA

+0

У вас неправильный тег, mate; вы помечены для C, но это вопрос C#. Я сам не знаю ни одного C#. –

ответ

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

, но это не имеет никакого отношения к щелчку. я могу выровнять, если пользователь нажимает ... Я говорю о том, когда виджеты динамически добавляются, а сетка переопределяется, если контекстMnuStrip открыт, он также не может быть повторно позиционирован. –

+0

Хотите изменить положение контекстного меню? пока он открыт? – Uzzy

+0

да ... тот что я пытаясь сделать. если сетка будет изменена или изменена, а cxtMnuStrip будет открыт, cxtMnuStrip не будет сместиться. он остается висящим в предыдущей ячейке сетки –

Смежные вопросы