ToolStripMenuItem_Click(对象发送方,EventArgs e)-强制转换回DataGridView



我有一个带有DataGridView控件的WINFORM应用程序,它挂接到ContextMenuStrip控制器中
ContextMenuStrip触发事件,实质上在DataGridView剪贴板之间执行复制/粘贴。

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
  CopyClipboard();
}
private void CopyClipboard()
{
  DataObject d = myGrid.GetClipboardContent();
  Clipboard.SetDataObject(d);
}
private void pasteCtrlVToolStripMenuItem_Click(object sender, EventArgs e)
{
  PasteClipboard();
}

我已经将另一个DataGridView添加到我的应用程序中,并希望在它们之间共享ContextMenuStrip,因为根据我上面的代码,它被硬编码到我的网格myGrid中。

我相信修改我的代码以从sender:投射一个新的DataGridView控件将是一个简单的练习

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
  CopyClipboard(sender);
}
private void CopyClipboard(object sender)
{
  var grid = (DataGridView)sender;
  DataObject d = grid.GetClipboardContent();
  Clipboard.SetDataObject(d);
}
private void pasteCtrlVToolStripMenuItem_Click(object sender, EventArgs e)
{
 var grid = (DataGridView)sender;
  PasteClipboard(grid);
}

但当然,我发现发送方ToolStripMenuItem

是否有方法通过发送方EventArgs e引用原始DataViewGrid

并且,感谢您阅读:)

啊,我想我明白了!

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
  CopyClipboard(sender);
}
private void CopyClipboard(object sender)
{
  var grid = (DataGridView)sender;
  DataObject d = grid.GetClipboardContent();
  Clipboard.SetDataObject(d);
}
private void pasteCtrlVToolStripMenuItem_Click(object sender, EventArgs e)
{
  var item = (ToolStripMenuItem)sender;
  ToolStripMenuItem t = (ToolStripMenuItem)sender;
  ContextMenuStrip s = (ContextMenuStrip)t.Owner;
  var grid = (DataGridView)s.SourceControl;
  // Pulling the backend datatable just to enhance the example.
  // Going Live, the consumer of the "grid" will do the extraction.
  BindingSource bs = (BindingSource)grid.DataSource;
  DataTable dt = (DataTable)bs.DataSource;

  PasteClipboard(grid, dt);
}

我在这里找到了解决方案:http://discuss.joelonsoftware.com/default.asp?dotnet.12.474610.5

最后,对于这个线程,我想添加ToolStripMenuItem作为线程标记,但我没有rep。感谢销售代表将其添加到标签缓存中,以便我可以更新此步骤;希望能让其他人的生活,同样的问题,更容易找到这个线索!:)

尝试

var grid = CType(sender, DataGridView)

var grid = CType(sender.parent, DataGridView)

最新更新