C# ToolStripMenuItem\u单击(对象发送者,事件参数)-强制转换回DataGridView
我有一个WINFORM应用程序,带有DataGridView控件,连接到ContextMenuStrip控件中。C# ToolStripMenuItem\u单击(对象发送者,事件参数)-强制转换回DataGridView,c#,datagridview,casting,contextmenustrip,sender,C#,Datagridview,Casting,Contextmenustrip,Sender,我有一个WINFORM应用程序,带有DataGridView控件,连接到ContextMenuStrip控件中。 ContextMenuStrip触发事件,基本上在DataGridView和剪贴板之间执行复制/粘贴 private void copyToolStripMenuItem_Click(object sender, EventArgs e) { CopyClipboard(); } private void CopyClipboard() { DataObject d = m
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
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控件将是一个简单的练习:
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
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();
}
是否有办法通过发送方或事件参数引用原始的数据视图网格
还有,谢谢你的阅读:)试试看
var grid = CType(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 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);
}
我在这里找到了解决方案:
最后,根据这个线程,我想添加ToolStripMenuItem作为线程标记,但我没有代表。
感谢销售代表将其添加到标记缓存中,以便我可以更新此踏板;
希望用同样的问题让别人的生活更容易找到这条线索 PaShKa,感谢您的回复,但CType(sender,DataGridView)是c#(DataGridView)sender的vb版本,sender没有名为parent的属性:(您能将发件人转换为ToolStripMenuItem吗?我想它有。父级可用。您不能将ToolStripMenuItem转换为DataGridView。在这种情况下,发件人是ToolStripMenuItem。这可能是解决方案…试图将其作为答案发布,但由于太多的noob无法完成。无论如何,不确定这是否完全是我想要的,但它是一个明星。)t: