2012-07-19 48 views
1

我有一个WINFORM应用与的DataGridView控制,钩入一的ContextMenuStrip控制。
的ContextMenuStrip火灾事件基本上执行的DataGridView剪贴板之间的复制/粘贴。ToolStripMenuItem_Click(对象发件人,EventArgs E) - 铸造回一个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

我认为它仅仅是一个简单的行使修改我的代码从发件人蒙上了新的的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

是否有通过发件人引用原始DataViewGrid的方式,或EventArgs的

而且,感谢您的阅读:)

回答

0

尝试

var grid = CType(sender, DataGridView) 

var grid = CType(sender.parent, DataGridView) 
+0

PaShKa,感谢您的回复,但CType(发件人,DataGridView)是c#(DataGridView)发件人和发件人的vb版本没有一个属性称为父亲:( – flaZer 2012-07-19 18:28:10

+0

您可以将发件人转换为ToolStripMenuItem?我认为它有.parent可用 – PaShKa 2012-07-19 18:31:02

+0

您不能将ToolStripMenuItem转换为DataGridView。在这种情况下,发件人是ToolStripMenuItem。 – LarsTech 2012-07-19 18:39:54

2

啊,想我了吧!

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作为一个线程标签,但我没有代表。 欣赏某人与代表添加它到标记缓存,以便我可以更新此步行; 希望让别人的生活,同样的问题,律'更容易找到这个线程! :)