12

FlowLayoutPanelに問題があり、それを解決する方法がわかりません。

2つのFlowLayoutPanelを別の内部に配置しています。2番目の内側のflpには3つのボタンがあります。

ここに画像の説明を入力してください

FlowLayoutPanelの子のプロパティは次のとおりです。

FlowDirection = LeftToRight;
AutoSize = true;
AutoSizeMode = GrowAndShrink;
WrapContents = true;

ここで、各ボタンのFlowBreakプロパティをtrueに設定しましたが、表示される動作は希望どおりではありません。FlowLayoutPanelをボタンの幅に縮小する必要があります。

ここに画像の説明を入力してください

に変更FlowDirectionすることUpToDownはオプションではありません。

AutoSizeが機能しない理由を知っている人はいますか?

これがコードです。

//
//FlowLayoutPanel1
//
this.FlowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.FlowLayoutPanel1.Controls.Add(this.FlowLayoutPanel3);
this.FlowLayoutPanel1.Location = new System.Drawing.Point(84, 77);
this.FlowLayoutPanel1.MinimumSize = new System.Drawing.Size(10, 10);
this.FlowLayoutPanel1.Name = "FlowLayoutPanel1";
this.FlowLayoutPanel1.Size = new System.Drawing.Size(308, 265);
this.FlowLayoutPanel1.TabIndex = 0;
//
//FlowLayoutPanel3
//
this.FlowLayoutPanel3.AutoSize = true;
this.FlowLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.FlowLayoutPanel3.Controls.Add(this.Button1);
this.FlowLayoutPanel3.Controls.Add(this.Button2);
this.FlowLayoutPanel3.Controls.Add(this.Button3);
this.FlowLayoutPanel3.Location = new System.Drawing.Point(127, 3);
this.FlowLayoutPanel3.MinimumSize = new System.Drawing.Size(10, 10);
this.FlowLayoutPanel3.Name = "FlowLayoutPanel3";
this.FlowLayoutPanel3.Size = new System.Drawing.Size(162, 87);
this.FlowLayoutPanel3.TabIndex = 1;
//
//Button1
//
this.FlowLayoutPanel3.SetFlowBreak(this.Button1, true);
this.Button1.Location = new System.Drawing.Point(3, 3);
this.Button1.Name = "Button1";
this.Button1.Size = new System.Drawing.Size(75, 23);
this.Button1.TabIndex = 0;
this.Button1.Text = "Button1";
this.Button1.UseVisualStyleBackColor = true;
//
//Button2
//
this.FlowLayoutPanel3.SetFlowBreak(this.Button2, true);
this.Button2.Location = new System.Drawing.Point(3, 32);
this.Button2.Name = "Button2";
this.Button2.Size = new System.Drawing.Size(75, 23);
this.Button2.TabIndex = 1;
this.Button2.Text = "Button2";
this.Button2.UseVisualStyleBackColor = true;
//
//Button3
//
this.Button3.Location = new System.Drawing.Point(3, 61);
this.Button3.Name = "Button3";
this.Button3.Size = new System.Drawing.Size(75, 23);
this.Button3.TabIndex = 2;
this.Button3.Text = "Button3";
this.Button3.UseVisualStyleBackColor = true;
4

3 に答える 3

16

これはバグであり、非常に長い間存在しています。問題は、FlowLayoutPanelのレイアウトエンジンが、2番目の行にラップされていても、2番目のコントロールの幅を含む最初の行の幅を誤って計算することです。

回避策はばかげていますが効果的です。最初のコントロールの後に幅0のダミーパネルを追加します。デザイナでこれを行う場合は、最初にドロップして、最初のコントロールの右側の適切な場所にドラッグします。次に、[プロパティ]ウィンドウで[マージン]を(0、0、0、0)に、[サイズ]を(0、0)に設定します。

于 2013-04-03T16:04:47.367 に答える
6

FlowLayoutPanelがあなたがやろうとしていることをするように設計されているとは思いません。TableLayoutPanelの方がおそらく適しています。単一の列を持つTableLayoutPanelを追加し、各ボタンを行に追加します。

編集:私はハックな回避策を見つけました。最初のボタンの後に、サイズが0,0でマージンが0,0のパネルを作成します。FlowBreakがfalseに設定されていることを確認してください。

ここに画像の説明を入力してください

編集:最初のボタンの後に、それぞれに1つではなく、1つのパネルを作成するだけで済みます。

于 2013-04-03T14:58:04.160 に答える
2

解決策ではありませんが、回避策です。TableLayoutPanelのフローブレークを使用しての動作をシミュレートしようとしているようですFlowLayoutPanelTableLayoutPanel代わりに使ってみましたか?コメントのスクリーンショットによると、それはあなたのニーズに完全に機能するはずです。

于 2013-04-03T14:57:44.717 に答える