我在運行時畫出一行,當用戶單擊2個按鈕時,基本上將它們鏈接起來。如何選擇Windows窗體應用程序中的其他控件疊加層
我的代碼是這樣的:
Line l = new Line();
l.Size = new Size(#distance from button1 to button2 as width#)
l.Location = button1.Location
的問題是線之間的按鈕和其他控制覆蓋線,所以當沒有任何其他控件其間它是唯一可見的。
如何在其他控件的頂部創建該行?
我在運行時畫出一行,當用戶單擊2個按鈕時,基本上將它們鏈接起來。如何選擇Windows窗體應用程序中的其他控件疊加層
我的代碼是這樣的:
Line l = new Line();
l.Size = new Size(#distance from button1 to button2 as width#)
l.Location = button1.Location
的問題是線之間的按鈕和其他控制覆蓋線,所以當沒有任何其他控件其間它是唯一可見的。
如何在其他控件的頂部創建該行?
您可以使用BringToFront()將Line
(或任何Control
)按z順序前移。
l.BringToFront();
它的工作,但當我把鼠標懸停在控件這是介於兩者之間,它不在眼前了,是否有一個像失敗的事件我應該看看? – method
使用
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。。
它不起作用,但是當您將鼠標懸停在其他控件上時該控件應該失去焦點?因爲正如我在前面的評論中所說的那樣,當我將鼠標懸停在疊加的控件上時,該行會恢復。 – method
是的。焦點控制是當時響應用戶輸入的控件。例如,當您將鼠標懸停在按鈕上時,您希望該按鈕在您點擊時進行響應。你能解釋一下你想做什麼嗎?如果你願意改變應用程序的結構,可能會有更好的解決方案。我的解決方案不起作用的原因是LineShape對象(我假設你正在使用?)無法獲得焦點。您可以檢查只讀控件屬性Line.CanFocus,並且您會發現它返回false。 – RutledgePaulV
[可能的重複](http://stackoverflow.com/questions/3213270/how-to-set-z-order-of-a-control-using-winforms) –