是否可以将参数传递给运行时生成的事件处理程序?以下是创建事件的位置:
private void DataView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ContextMenuStrip context = new ContextMenuStrip();
int currentMouseOverRow = DataView.HitTest(e.X, e.Y).RowIndex;
int row = e.RowIndex;
int column = e.ColumnIndex;
if (currentMouseOverRow >= 0)
{
int rowsa = e.RowIndex + 1;
int columnsa = e.ColumnIndex + 1;
context.Items.Add("Add comment to row: " + rowsa + ", column: " + columnsa);
}
context.Show(DataView, new Point(e.RowIndex, e.ColumnIndex));
context.ItemClicked += new ToolStripItemClickedEventHandler(context_ItemClicked);
}
}
我的目标是能够将不可见的dataGridView1中的值提取到用户点击主DataView的匹配x和y坐标
public static void context_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
Form1 frm = Application.OpenForms.OfType<Form1>().Take(1).FirstOrDefault();
ToolStripItem item = e.ClickedItem;
if (item.Text == "Add comment")
{
DataTable dt3 = frm.ds1.Tables[0];
frm.DataView.Rows[x].Cells[y].Value = frm.dataGridView1.Rows[x].Cells[y].Value.ToString();
}
}
基本上我需要更换&#39; x&#39;并且&#39; y&#39;索引
非常感谢任何帮助:)
答案 0 :(得分:1)
您可以执行以下操作:
private ToolStripItemClickedEventHandler GetHandler(int x, int y)
{
return (sender, e) => {
Form1 frm = Application.OpenForms.OfType<Form1>().Take(1).FirstOrDefault();
ToolStripItem item = e.ClickedItem;
if (item.Text == "Add comment")
{
DataTable dt3 = frm.ds1.Tables[0];
frm.DataView.Rows[x].Cells[y].Value = frm.dataGridView1.Rows[x].Cells[y].Value.ToString();
}
}
}
并使用:
context.ItemClicked += GetHandler(42, 8);
或者,你可以在发件人身上使用某种状态(通常是Tag
)来保持该状态,然后从sender
中取出,即
var yourState = (YourState)((Control)sender).Tag;
int x = yourState.X, y = yourState.Y;