2017-08-09 206 views
2

我想有一個圖像部分覆蓋一個winform控件(在這種情況下是一個datagridview),但它似乎不工作,因爲我會。 我跟着答案發現here當父是控制(DGV),但不是在父母的形式...
我會想有這樣的事情,它工作正常: desired如何通過窗體控件部分覆蓋一個picturebox

但是相反我得到的是這樣的:
problematic

繼答案,並設置父DGV工作正常.... enter image description here

+2

看起來背景不透明。分享一些你已經試過的代碼 – EpicKip

+0

請檢查你的代碼是否錯過了這一行:'b.BackColor = Color.Transparent;'從你發佈的鏈接的例子 –

+0

我已經更新了問題以回答EpicKip&Mong的評論朱 – John

回答

2

您可以使用兩個PictureBoxes並帶一個低於DGV巢其他。然後將覆蓋圖移到正確的位置。 兩者應該是相同的,否則,即具有相同的Image和相同的SizeMode

這裏是會做的一個功能:

void overlayCtls(Control ctlBase, Control ctlOverlay, Control ctlTgt) 
{ 
    ctlOverlay.BackColor = Color.Transparent; 
    ctlOverlay.Parent = ctlTgt; 
    ctlOverlay.Location = new Point(ctlBase.Left - ctlTgt.Left, ctlBase.Top - ctlTgt.Top); 
} 

而結果:

enter image description here

注:

  • 您explictily需要做的嵌套的DGV不是一個容器,所以它不足以在設計器中移動它。
  • 即使在設計器中設置了BackColor,也需要將BackColor設置爲透明。看起來它會從父代中取出,除非在代碼中設置。
  • 嵌套的子控件不僅覆蓋其ParentClientArea,而且覆蓋任何Border
+0

酷....這就是我想要的...... :)爲了得到它正確我將創建2個相同大小的圖片盒.. 。1是虛擬的,1是虛擬的,虛擬的將被賦予DGV,而虛擬的會賦予虛擬的圖像。然後運行該方法...你可以給更多的信息.​​. – John

+0

是的。但兩者都應該有相同的圖像,也有相同的屬性,如大小和sizemode! – TaW

+0

因此,基本上你有2個pictureboxes ...控制的一個孩子和一個剛剛在控制下的孩子...控制的孩子被剪裁到控件的邊界,第二個picturebox只是「填充」其餘的...... – John