2013-06-21 54 views
1

我在運行時畫出一行,當用戶單擊2個按鈕時,基本上將它們鏈接起來。如何選擇Windows窗體應用程序中的其他控件疊加層

我的代碼是這樣的:

Line l = new Line(); 
l.Size = new Size(#distance from button1 to button2 as width#) 
l.Location = button1.Location 

的問題是線之間的按鈕和其他控制覆蓋線,所以當沒有任何其他控件其間它是唯一可見的。

如何在其他控件的頂部創建該行?

+0

[可能的重複](http://stackoverflow.com/questions/3213270/how-to-set-z-order-of-a-control-using-winforms) –

回答

1

您可以使用BringToFront()Line(或任何Control)按z順序前移。

l.BringToFront(); 
+0

它的工作,但當我把鼠標懸停在控件這是介於兩者之間,它不在眼前了,是否有一個像失敗的事件我應該看看? – method

0

使用

l.BringToFront(); 

像這樣的行創建一個事件處理程序:

public void Line_LostFocus(object sender, EventArgs e) 
{ 
    Line L = (Line) sender; 
    L.focus(); 
} 

而且使用它附加:

l.LostFocus += Line_LostFocus; 

雖然,我不得不說這似乎是一種奇怪的做事方式秒。重新考慮是否應該創建自定義控件而不是繪製現有控件。這似乎有點愚蠢。

編輯 由於線形控件不支持的重點,而是執行此操作:

public void Line_ToFront(object sender, EventArgs e) 
{ 
    Line L = (Line) sender; 
    L.BringToFront(); 
} 

,並附上像這樣:

Form1.Paint += Line_ToFront; 

如果不工作,然後遍歷表單上的每個控件,並將Line_ToFront添加到繪圖處理程序。儘管如此,我仍然建議您尋找其他方法。這似乎太sl。。

+0

它不起作用,但是當您將鼠標懸停在其他控件上時該控件應該失去焦點?因爲正如我在前面的評論中所說的那樣,當我將鼠標懸停在疊加的控件上時,該行會恢復。 – method

+0

是的。焦點控制是當時響應用戶輸入的控件。例如,當您將鼠標懸停在按鈕上時,您希望該按鈕在您點擊時進行響應。你能解釋一下你想做什麼嗎?如果你願意改變應用程序的結構,可能會有更好的解決方案。我的解決方案不起作用的原因是LineShape對象(我假設你正在使用?)無法獲得焦點。您可以檢查只讀控件屬性Line.CanFocus,並且您會發現它返回false。 – RutledgePaulV

相關問題