Я пытаюсь добавить ContextMenu
в конкретную ячейку DataGridView
. Как на картинке ниже:Как добавить ContextMenu в конкретный DataGridViewCell? (C# winforms)
Я нашел, что это очень трудно сделать, но я сделал это в элементе управления TextBox, используя код ниже:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control control in this.Controls)
{
// Add KeyDown event to each control in the form.
control.KeyDown += new KeyEventHandler(control_KeyDown);
}
}
private void control_KeyDown(object sender, KeyEventArgs e)
{
Control ctrl = (Control)sender;
if (e.KeyData == Keys.F1) // Check if F1 is being pressed.
{
if (ctrl.GetType() == typeOf(TextBox)) // Check if the control is a TextBox
{
ToolStripControlHost lblInfo;
label1.Text = "This context menu is for TextBoxes.";
lblInfo = new ToolStripControlHost(label1); // some Label
contextMenuStrip1.Items.Add(lblInfo);
contextMenuStrip1.Show(ctrl, 0, 25); // Popups the contextMenu just below the textBox control.
}
}
}
Я просто не знаю, как сделать это в определенной ячейке DataGridView. Я попытался экспериментировать на этот код:
if (ctrl.GetType() == typeOf(DataGridView)) // Check if the control is a DataGridView
{
DataGridViewCell testCell = dataGridView1[dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentRow.Index]; // Returns DataGridViewCell type
ToolStripControlHost lblInfo;
label1.Text = "test";
lblInfo = new ToolStripControlHost(label1); // some Label
contextMenuStrip1.Items.Add(lblInfo);
contextMenuStrip1.Show(testCell, 0, 25);
}
Но я думаю, что ContextMenu принимает только Control
типа на свой первый аргумент, и я получил это исключение:
cannot convert from 'System.Windows.Forms.DataGridViewCell' to 'System.Windows.Forms.Control'
Существуют ли какие-либо обходной путь на этом? Пожалуйста, советую мне, что делать. Спасибо заранее.
Несвязанной на ваш вопрос, но вместо 'если (ctrl.GetType() == TYPEOF (DataGridView))' Вы должны написать 'если (Ctrl есть DataGridView)' , – Timwi
Я не знал этого ... спасибо. – yonan2236