2011-07-31 27 views
3

これは私の最初の投稿ですので、私はすべての適切な情報を提供したいと思います。フォームに(完全に)動的に作成されたボタンを中央揃え?

私は現在、ボタンのコントロール配列(MSDNで提案されているコントロール配列の回避策を使用しています)を持つ単純なメニューアプリケーションを開発中です。フォームのサイズ変更とボタンの中央揃えに苦労しています。これらのボタンは、コンパイル時に(INIファイルのパラメータを使用して)作成され、私の現在のセンタリングアルゴリズムは、それらを右側にわずかに設定しているようです。私は、 "button.location = new Point(...、...)"メソッドを使用していますが、これについては、値が中央よりも左上の角を左に配置していることを示しています。 。

私の二つの質問は、このです:

どのように私は完全にコンパイル時にこれらのボタンを中央にすることができますか?ボタンの幅の半分を差し引いて差を計算しようとしましたが、ボタンの幅と点のプロパティは互換性がなく、ボタンが大きくオフセットしています。

そして...私のもう一つの目標は、サイズ変更時にボタンを完全に伸縮させることです。あたかもボタンが動的に作成されているので、比率アルゴリズムを書くように強制されていると、アンカーは効果がありません...アンカーを働かせる方法はありますか?

は、ここで私は、最大負荷に持っているものだ:私はすでに試してみました

MyControlArray(i).Location = New Point(CInt(((Width - ButtonWidth)/2) +_ 
(ButtonWidth/2)), CInt((Height - MyControlArray(i).Height)/2)) 

:あなたは間違っている変数を使用しているためだ

New Point(CInt(((Width - ButtonWidth)/2)), CInt((Height - MyControlArray(i).Height)_ 
/2)) 

答えて

7

は、幅と高さは、国境やキャプションが含まれます。代わりにClientSizeプロパティを使用する必要があります。このように:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) 
    MyBase.OnLoad(e) 
    Dim btn = New Button() 
    Controls.Add(btn) 
    btn.Location = New Point((ClientSize.Width - btn.Width) \ 2, _ 
          (ClientSize.Height - btn.Height) \ 2) 
End Sub 
+0

魅力的なように働き、新しいことを学びました。 Passantありがとう! – Goat

3

AnchorStyles.NoneAnchorプロパティを設定する水平方向と垂直方向の両方で、コントロールが中央揃えされることになります。

control.Anchor = AnchorStyles.None 

垂直位置(水平方向のみセンタリング)mantainする:水平位置(のみ垂直センタリング)をmantainする

control.Anchor = AnchorStyles.Top 

を:

control.Anchor = AnchorStyles.Left 

Source

私はそれを試して、それは私のために働いた。コントロールは親要素の中央に配置されます。

関連する問題