
図のように"追加ボタン"を押すと親パネル(panel1)に子パネル(panel2)を上から
追加する画面を作りました。(以下がソースです)
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
foreach (Panel p in panel1.Controls)
{
i++;
p.Top += 40;
}
Panel panel2 = new Panel();
createPanel(panel2, i);※子パネルのレイアウトを設定し、確認用の連番をセットしています
panel1.Controls.Add(panel2);
}
常に親パネルの最上段に子パネルを追加したいのですが、
スクロールバーで親パネルの下のほうで追加ボタンを押すと、
親パネルの表示されている最上段の位置に子パネルが追加されてしまいます。
スクロールバーで親パネルの最下部に移動していても、追加するときは親パネルの(0,0,)の位置に
子パネルを表示させるにはどのように実装したらよいでしょうか?
メソッドcreatePanel(panel2, i)の中で、
子パネルのロケーションを0,0に設定してもダメでした。
以上、よろしくお願いいたします。

A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
まず,親パネルのかわりにFlowLayoutPanellを使って下さい。
この時,
・FlowDirectionをTopDownにする
→内部のコントロールを上端から下に並べる
※BottomUpは下端から上に並べていく
・WrapContentsをFalseにする
→コントロールが入りきらない場合にコントロールを折り返して配置させない
・AutoScrollをTrueにする
→コントロールが入りきらない場合にスクロールバーを表示する
という設定が必要になります。
次に,基本的にはコントロールをControls.Addで追加していくのですが,
上記のプロパティからわかるように,単純に追加すると一番下に追加されます。
これを避けるために,Controls.AddのあとにControls.SetChildIndexでnewIndexに0を指定し,
追加したコントロールを一番上になるようにします。
最後に,幅の調整です。
Dock系による調整が出来ないので,丁度の幅にするには
FlowLayoutPanelのClientSize.Widthから追加したコントロールのMargine.Horizontalを引くことで出せますが,
これだけだとスクロールバーが表示されたタイミングで幅がずれます。
いくつか試したところ,
1. FlowLayoutPanelをSuspendLayoutする
2. FlowLayoutPanelのAutoScrollをfalseにする
3. FlowLayoutPanelの全ての子コントロールの幅を調整する
4. FlowLayoutPanelのAutoScrollをtrueにする
5. FlowLayoutPanelをResumeLayoutする
でできました。
以下,TextBoxを追加していくサンプル (C# on .NET Framework 4) です。
・FlowLayoutPanel型のコントロールflowLayoutPanel1
・Button型のコントロールbutton1
を置き,
・button1.Clickイベントにbutton1_Click
・flowLayoutPanel1.ResizeイベントにflowLayoutPanel1_Resize
を設定しています。
また,_をスペースに,もしくは____をタブに変換してください。
private void button1_Click (object sender, EventArgs e)
{
____var textBox = new TextBox() { Text = flowLayoutPanel1.Controls.Count.ToString() };
____flowLayoutPanel1.Controls.Add(textBox);
____flowLayoutPanel1.Controls.SetChildIndex(textBox, 0);
____ResetChildSize();
}
private void flowLayoutPanel1_Resize (object sender, EventArgs e)
{
____ResetChildSize();
}
private void ResetChildSize ()
{
____flowLayoutPanel1.SuspendLayout();
____flowLayoutPanel1.AutoScroll = false;
____foreach (var control in flowLayoutPanel1.Controls.Cast<Control>())
____{
________control.Width = flowLayoutPanel1.ClientSize.Width - control.Margin.Horizontal;
____}
____flowLayoutPanel1.AutoScroll = true;
____flowLayoutPanel1.ResumeLayout();
}
ところで,子パネルはユーザーコントロール化できないのですか。
Panelよりも色々と便利なことが多いですけれども……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- YouTube youtubeは画面と操作パネルが別々に表示されていたのに画面上にかぶるように表示されるようになった 1 2022/05/08 10:04
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- DIY・エクステリア ルミナスのラックで、ストーブガードを自作したいが、熱くはならない? 1 2023/02/18 18:18
- その他(法律) イラストの著作権についてです。 フラワースタンドのパネル用のイラストを私がとある絵師様に依頼しました 1 2023/05/28 00:26
- モニター・ディスプレイ TNパネル、IPSパネル、ADSパネルの画質や色味はかなり違いますか?気にならない程度ですか? 3 2023/01/02 20:02
- 一戸建て 一戸建ての太陽光発電について教えて下さい。 今度新築を建てるのですが、初期費用0円の太陽光パネル設置 8 2022/08/21 12:49
- ノートパソコン 【IGZOパネル】IGZOディスプレイを採用したノートパソコンを教えてください。 I 1 2023/07/11 19:58
- クラフト・工作 接着芯の貼り方と作り方 1 2023/04/21 08:02
- Illustrator(イラストレーター) 至急。イラストレーターでこの画面で、整列パネルが表示されてないのですがどこを押せば表示されますか? 1 2022/07/25 19:21
- 一戸建て 家の太陽光発電をLIXIL TEPCOの『建て得』採用してる人いませんか? 現在の発電量などをリアル 1 2023/04/03 06:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
C#でパネルに子パネルを上から...
-
DateTimePickerでに年月までし...
-
フォームでPDFを表示させた...
-
コモンダイアログコントロール...
-
EXCELVBA リストボックスで選択...
-
ワードのドロップダウンリスト
-
アイテムを点滅させる
-
Accessのタブコントロールを2...
-
ActiveXコントロールを.NETにイ...
-
VScrollBarの点滅を何とかしたい。
-
SSTabのフォーカスの移動につい...
-
CEdit の内容が変わった時にメ...
-
TabControlが変る瞬間イベント
-
VisualStudio MFC変数が追加で...
-
エクセルで作った新しいウイン...
-
Minecraft 統合版(PC)の描画距...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
スピンボタンを右クリックして...
-
DateTimePickerでに年月までし...
-
ActiveXコントロールを.NETにイ...
-
フォームでPDFを表示させた...
-
コモンダイアログコントロール...
-
連続で印刷すると画像が更新さ...
-
VScrollBarの点滅を何とかしたい。
-
エクセル - リストボックスのマ...
-
CEdit の内容が変わった時にメ...
-
空のリストビューで1行おきに...
-
リストコントロール(MFC or API...
-
TabControlとToolBarの背景色変更
-
タブコントロール上のリストコ...
-
アイテムを点滅させる
-
EXCELVBA リストボックスで選択...
-
regsvr32でActiveX登録を行ったocx
-
VB6.0のデザイン時 コントロー...
-
Accessのタブコントロールを2...
おすすめ情報