我有一個應用程序,用戶可以在其中在表單上拖動控件。但他們 再問我管理單元行,使控制對齊更容易。我不知道如何實現它們 - 我曾看過:在運行時對齊控件時的對齊線條
http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner的,但它說它只適用於WPF。我在WinForms中嘗試過,但是(如預期的)沒有奏效。
如何在我的應用程序中獲得管理單元行(類似於VS中的單元格)?
謝謝
巴爾
我有一個應用程序,用戶可以在其中在表單上拖動控件。但他們 再問我管理單元行,使控制對齊更容易。我不知道如何實現它們 - 我曾看過:在運行時對齊控件時的對齊線條
http://msdn.microsoft.com/en-us/library/ms752100.aspx Adorner的,但它說它只適用於WPF。我在WinForms中嘗試過,但是(如預期的)沒有奏效。
如何在我的應用程序中獲得管理單元行(類似於VS中的單元格)?
謝謝
巴爾
在您的移動控制,你可以通過劃分,然後由你的線條的寬度乘以調整Left
和Top
:
left = (left/10)*10;
top = (top/10)*10;
它並不完美,但它簡單。當然,因爲控件沒有MoveEnd事件,所以你必須跟蹤MouseButton狀態或類似的東西。
編輯:一個更好的實施將全面正確的劃分結果,因此134 = 130和136 = 140
嗯......這看起來很簡單是真的:P感謝Cory,我會看看我能做些什麼:) – 2010-02-06 04:54:38
通常最好的解決方案是最簡單的:-)。我沒有實現這個代碼,所以我非常渴望聽到這個想法是如何爲你制定的(或者沒有)。 – 2010-02-06 21:52:26
我有同樣的問題,我還在尋找一個解決方案;這裏是我做過什麼,到目前爲止,它可以爲您
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;
}
我目前的挑戰是繪圖活動的解決方案;我的控件託管在一個面板中,我正在尋找一種在必要時鎖定和解鎖面板圖的方法;例如:只有在左側或頂部發生變化後
如果您通過'MouseDown','MouseMove'和'MouseUp'事件而不是'SendMessage'移動控件,該解決方案將完美工作。 – 2016-05-19 18:30:22
雖然這一個對齊網格,它不是我所期待的,但我會一定記住這一點。謝謝你周杰倫:) – 2010-02-06 04:53:57