2014-09-21 54 views
0

這個問題是關於C#的WinForms ...我有這主要有三樣東西自定義用戶控件:標籤,文本框和列表框,所有垂直佈置是這樣的:如何在用戶控件調整大小時自動居中放置用戶控件中的文本框?

XXXXXXXXXXXXX

我已經寫了一個小的Custom ControlDesigner類來防止用戶在設計時改變這個用戶控件的高度。

我也設置了文本框和列表框以錨定到左/右位置,以便當用戶更改用戶控件的寬度時,這兩個內部控件可以很好地調整大小。

我希望Label也是水平中心,但將它固定到左/右似乎不起作用。我想我可能不得不在自定義控件設計器類中編寫某種自定義調整大小函數,當用戶控件調整大小時會自動將標籤放在中間位置?

另請注意,標籤文本發生更改時,我希望標籤仍保留在中心位置。

那麼我該如何做到這一點?

這裏是我的自定義的控件設計類至今:

public class DropDownTextBoxDesigner : System.Windows.Forms.Design.ControlDesigner 
    { 
     public override SelectionRules SelectionRules 
     { 
      get 
      { 
       SelectionRules retVal = 
         SelectionRules.Visible | 
         SelectionRules.Moveable | 
         SelectionRules.LeftSizeable | 
         SelectionRules.RightSizeable; 

       return retVal; 
      } 
     } 
    } 
+1

中心的文本,而不是標籤。只需將AutoSize屬性設置爲False並使用TextAlign即可。 – 2014-09-21 20:20:12

回答

1

寫了用戶控制事件的SizeChanged像這樣:

private void UserControl1_SizeChanged(object sender, EventArgs e) 
    { 
     textBox1.Left = Width/2 - textBox1.Width/2; 
     textBox1.Top = Height/2 - textBox1.Height/2; 
    } 
+0

不完全工作。如果我將「標籤文本」更改爲像XXXXXXXXXXXXXXXXXXXXXXXXXX這樣的內容,則更接近右側。我認爲你完全沒有讀過我的問題。我只需要水平居中,而不是垂直。另外,問題是關於標籤,而不是文本框。 – Ahmad 2014-09-21 19:17:06

+0

對不起,我盡了全力,但可能是我被主標題弄糊塗了。無論如何,也許這有助於:將標籤的'AutoSize'屬性設置爲false。將'Anchor'更改爲[Left,Top,Right]並調整標籤,使其位於中間。同時將'TextAlign'屬性設置爲'MiddleCenter'。不知道這是否是您想要的解決方案。 – Sjips 2014-09-21 19:56:28

+1

我不得不做一些修改,除了你建議讓它工作,因爲我想..謝謝。 – Ahmad 2014-09-22 19:27:08

0

在resize事件,你可以只設置標籤的左屬性居中在容器中?

Label.Left = (Container.Width/2) - (Label.Width/2); 
+0

調整事件大小? – Ahmad 2014-09-21 19:17:31

+0

用戶控件的c大小事件 – ErTR 2014-09-21 19:25:43

相關問題