2

無理だとは思いますが、これでいいのです。

Java および最近の .Net アップデートでは、フロー レイアウトが可能です。フロー レイアウトでは、レイアウト マネージャーがフォーム コントロールを再配置して、使用可能なスペースに収まるようにします。

ハードコードされた絶対位置を使用する VBA と WinForms しか見たことがありません。

このコンテキストでフロー レイアウト マネージャーに遭遇した人はいますか?

4

3 に答える 3

3

Access 2007 以降のバージョンでは、アンカーを介してこの機能が実装されています。フォームのサイズ変更に合わせてコントロールを伸縮、縮小、または移動させる

以前のバージョンでそれを行いたい場合は、フォームの On Resize イベントを使用して独自のロールを作成できます。

于 2012-06-29T15:20:46.430 に答える
3

このようにレイアウトされたフォームがあります。私のすべてのコントロールは、垂直位置に基づいて順番に名前が付けられています: txt_R1、txt_R2、txt_R3 など...

フォームデザイン

フォームが読み込まれると、次のようになります。

フォームロード済み

コンボ ボックスを更新すると、次のコードが実行されます。

Dim s_tier As String
Dim s_rate As String
Dim s_lbl_Rate As String
Dim s_lbl_Tier As String
Dim s_obj As String

Me.TXT_Min.Visible = True
Me.LBL_MIN.Visible = True
Me.TXT_Min.Value = 0

Me.TXT_Scale.Visible = True
Me.lbl_Scale.Visible = True
Me.TXT_Scale.Value = 0

Me.txt_MinMax.Visible = True
Me.lbl_MinMax.Visible = True
Me.txt_MinMax.Value = 0

s_tier = "TXT_T"
s_rate = "TXT_R"
s_lbl_Rate = "LBL_R"
s_lbl_Tier = "LBL_T"

For i = 1 To numActive
    
    'Tier Text Box
    s_obj = s_tier & i
    
    Me(s_obj).Visible = True
    Me(s_obj).Value = "NULL"
    
    'Tier Label
    s_obj = s_lbl_Tier & i
    
    Me(s_obj).Visible = True
                            
    'Rate Text Box
    s_obj = s_rate & i
    
    Me(s_obj).Visible = True
    Me(s_obj).Value = "NULL"
    
    'Rate Label
    s_obj = s_lbl_Rate & i
    
    Me(s_obj).Visible = True

Next i

'set last tier to infinite, since last tier typically goes on forever
s_obj = s_tier & numActive

Me(s_obj).Value = ChrW(&H221E)
Me(s_obj).FontSize = 16

'Make Test button visible and move to appropriate place

s_obj = s_lbl_Tier & (numActive + 1)

Me.Btn_Test.Top = Me(s_obj).Top
Me.Btn_Test.Left = Me(s_obj).Left
Me.Btn_Test.Visible = True

s_obj = s_tier & (numActive + 1)
'Make Test button visible and move to appropriate place
    
Me.btn_SQL.Top = Me(s_obj).Top
Me.btn_SQL.Left = Me(s_obj).Left
Me.btn_SQL.Visible = True
Me.Refresh

コンボ ボックスで「1」が選択されている場合、更新されたフォームは次のようになります。 オプションを選択

... または、コンボ ボックスで「2」が選択されている場合: オプションを選択

... または、コンボ ボックスで「3」が選択されている場合: オプションを選択

私の方法の鍵は、シーケンシャルな命名規則を活用する方法として使用することです。

for i = 1 to numactive

コードの一部。ループが終了すると、すべての静的コントロールが表示されます。numactive 変数に 1 を追加して、最初の非表示コントロールがどこにあるかを判断し、「フローティング」コントロールをその位置に固定します。

このメソッドを微調整して、他のコントロールの位置の代わりにオフセットを使用して、任意のコントロールを任意の位置に実際に配置できます。あなたの想像力を暴走させましょう!

于 2012-06-29T22:00:05.150 に答える
1

もちろん、WinFormsにはFlowLayoutPanelTableLayoutPanelがあります..

MSDN に Winforms の AutoLayoutの例があります。

于 2012-06-29T15:19:10.367 に答える