2012-07-19 35 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作爲一個線程標籤,但我沒有代表。 欣賞某人與代表添加它到標記緩存,以便我可以更新此步行; 希望讓別人的生活,同樣的問題,律'更容易找到這個線程! :)