2010-04-13 105 views
0

我有從標籤派生的自定義控件。 我需要將本地控件的位置原點從左上角更改爲左下角。Windows窗體標籤自定義控件來源更改

是否有方法或屬性來做到這一點?

+0

你是說你想讓Location屬性指定標籤左下角的位置而不是左上角? – 2010-04-13 17:40:56

+0

是的,這是我需要的。 – 2010-04-13 17:54:33

+0

也許你可以解釋*爲什麼*你想這樣做。我們能夠爲您的問題提出更好的解決方案。 – 2010-04-13 20:06:16

回答

0

TextAlign屬性應該做你所需要的。

label.TextAlign = System.Drawing.ContentAlignment.BottomLeft; 

如果你想使Location物業反映控制的右下角,而不是左上角,那麼這是不可能的。你可以,但是,創建你自己的財產:

public Point BottomLeft 
{ 
    get { return new Point(Left, Bottom); } 
    set { Location = new Point(value.X, value.Y - Height); } 
} 

請記住,雖然,這不會保持真實,如果Height屬性改變(你必須重新進行設置)。

+0

我不認爲這會改變控制位置的來源。 – 2010-04-13 17:55:44

0

如果你想改變Label.Location財產的行爲,因此,它是指在標籤的左下角,你可以在你的自定義標籤覆蓋InitLayout()

class myLabel : Label 
{ 
    protected override void InitLayout() 
    { 
     base.InitLayout(); 
     Location = new Point(Location.X, Location.Y - Height);     
    } 
} 

這將轉向控制基於控制器的高度。因此,如果您以(100,100)開頭,標籤高度爲13,則以(100,87)結束,左下角爲(100,100)。

但是,只有當標籤被添加到容器時纔會發生這種情況。如果您在將標籤添加到容器後更改標籤的位置,它將返回到右上角。

您可能嘗試的另一件事是覆蓋標籤所在容器的LayoutEngine { get; },以便您完全控制解釋放置在容器中的任何自定義標籤的Location屬性的方式。

+0

不確定這會有幫助,你正在改變位置。我需要控件的位置指向左下角。因此,如果我將控件添加到位置(100,100)的窗體中,我需要位置100,100作爲控件的左下角。 – 2010-04-13 19:35:51

+0

你說得對,我應該減去時加了。固定。 – 2010-04-13 19:48:55

+0

我明白你的意思了。您不希望**位置**的實際值發生變化。我的建議將改變** Location.Y **。如果這是一個破壞行爲的話,你可能必須實現你自己的LayoutEngine,或者弄亂標籤的** OnPaint()**。 – 2010-04-13 19:57:11