2010-02-05 72 views
2

我有一個應用程序,用戶可以在其中在表單上拖動控件。但他們 再問我管理單元行,使控制對齊更容易。我不知道如何實現它們 - 我曾看過:在運行時對齊控件時的對齊線條

http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner的,但它說它只適用於WPF。我在WinForms中嘗試過,但是(如預期的)沒有奏效。

如何在我的應用程序中獲得管理單元行(類似於VS中的單元格)?

謝謝

巴爾

回答

1

你看到這篇文章在CodeProject:

Form Designer

設有鎖定到對設計圖面的網格。

+0

雖然這一個對齊網格,它不是我所期待的,但我會一定記住這一點。謝謝你周杰倫:) – 2010-02-06 04:53:57

1

在您的移動控制,你可以通過劃分,然後由你的線條的寬度乘以調整LeftTop

left = (left/10)*10; 
top = (top/10)*10; 

它並不完美,但它簡單。當然,因爲控件沒有MoveEnd事件,所以你必須跟蹤MouseButton狀態或類似的東西。

編輯:一個更好的實施將全面正確的劃分結果,因此134 = 130和136 = 140

+0

嗯......這看起來很簡單是真的:P感謝Cory,我會看看我能做些什麼:) – 2010-02-06 04:54:38

+0

通常最好的解決方案是最簡單的:-)。我沒有實現這個代碼,所以我非常渴望聽到這個想法是如何爲你制定的(或者沒有)。 – 2010-02-06 21:52:26

0

我有同樣的問題,我還在尋找一個解決方案;這裏是我做過什麼,到目前爲止,它可以爲您

const grid = 12; 
private void MyControl_LocationChanged(object sender, EventArgs e) 
{ 
    if (this.Left % grid != 0) 
     this.Left -= this.Left % grid; 
    if (this.Top % grid != 0) 
     this.Top -= this.Top % grid; 
} 

或在用戶控件

protected override void OnMove(EventArgs e) 
{ 
    if (this.Left % grid != 0) 
     this.Left -= this.Left % grid; 
    if (this.Top % grid != 0) 
     this.Top -= this.Top % grid; 
} 

我目前的挑戰是繪圖活動的解決方案;我的控件託管在一個面板中,我正在尋找一種在必要時鎖定和解鎖面板圖的方法;例如:只有在左側或頂部發生變化後

+0

如果您通過'MouseDown','MouseMove'和'MouseUp'事件而不是'SendMessage'移動控件,該解決方案將完美工作。 – 2016-05-19 18:30:22