C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

No87308 の続きになるのですが /夜叉丸 (18/05/18(Fri) 11:19) #87405
Re[1]: No87308 の続きになるのですが /猫まっしぐら (18/05/18(Fri) 11:47) #87407
│└ Re[2]: No87308 の続きになるのですが /夜叉丸 (18/05/18(Fri) 16:12) #87414
│  └ Re[3]: No87308 の続きになるのですが /猫まっしぐら (18/05/18(Fri) 16:48) #87415
Re[1]: No87308 の続きになるのですが /魔界の仮面弁士 (18/05/18(Fri) 11:58) #87408
  └ Re[2]: No87308 の続きになるのですが /夜叉丸 (18/06/05(Tue) 14:21) #87553
    └ Re[3]: No87308 の続きになるのですが /猫まっしぐら (18/06/05(Tue) 15:10) #87554
      └ Re[4]: No87308 の続きになるのですが /夜叉丸 (18/06/05(Tue) 15:35) #87556
        └ Re[5]: No87308 の続きになるのですが /猫まっしぐら (18/06/05(Tue) 16:35) #87558
          ├ Re[6]: No87308 の続きになるのですが /夜叉丸 (18/06/06(Wed) 10:43) #87563
          │└ Re[7]: No87308 の続きになるのですが /猫まっしぐら (18/06/06(Wed) 14:34) #87566
          └ Re[6]: No87308 の続きになるのですが /夜叉丸 (18/06/06(Wed) 10:32) #87561
            └ Re[7]: No87308 の続きになるのですが /夜叉丸 (18/06/06(Wed) 10:44) #87564
              └ Re[8]: No87308 の続きになるのですが /猫まっしぐら (18/06/06(Wed) 15:09) #87567
                └ Re[9]: No87308 の続きになるのですが /夜叉丸 (18/06/06(Wed) 18:54) #87568


親記事 / ▼[ 87407 ] ▼[ 87408 ]
■87405 / 親階層)  No87308 の続きになるのですが
□投稿者/ 夜叉丸 (108回)-(2018/05/18(Fri) 11:19:08)

分類:[.NET 全般] 

今まで Panel1(LEFT) と Panel2(Fill) があり,その間に Split1 がある場合に

表示モードにより Panel1 を表示しない場合
Panel1.Visible = Split1.Visible = false;

表示する場合
Panel1.Visible = Split1.Visible = false;
Panel1.BringToFront();
Split1.BringToFront();
Panel2.BringToFront();

にて処理していたのですが、

PanelContainer を使用した場合には
どのように処理すればよいのでしょうか?
[ □ Tree ] 返信 編集キー/

▲[ 87405 ] / ▼[ 87414 ]
■87407 / 1階層)  Re[1]: No87308 の続きになるのですが
□投稿者/ 猫まっしぐら (5回)-(2018/05/18(Fri) 11:47:28)
No87405 (夜叉丸 さん) に返信

> PanelContainer を使用した場合には
> どのように処理すればよいのでしょうか?

SplitContainerじゃなくて?
SplitContainerならPanel1Collapsed=True/False,Panel2Collapsed=True/False
で制御しますが…
[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87407 ] / ▼[ 87415 ]
■87414 / 2階層)  Re[2]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (109回)-(2018/05/18(Fri) 16:12:37)
No87407 (猫まっしぐら さん) に返信
No87408 (魔界の仮面弁士 さん) に返信

すみませんでした。
PanelContainer ではなくて SplitContainer でした。

Panel1Collapsed → 説明には「Panel1を縮小するかを決定します。」
になていますが、考え方は Visible と同じでいいんですか?



[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87414 ] / 返信無し
■87415 / 3階層)  Re[3]: No87308 の続きになるのですが
□投稿者/ 猫まっしぐら (6回)-(2018/05/18(Fri) 16:48:30)
No87414 (夜叉丸 さん) に返信

> Panel1Collapsed → 説明には「Panel1を縮小するかを決定します。」
> になていますが、考え方は Visible と同じでいいんですか?

そうです
縮小、というよりは折りたたむというイメージですかね
[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87405 ] / ▼[ 87553 ]
■87408 / 1階層)  Re[1]: No87308 の続きになるのですが
□投稿者/ 魔界の仮面弁士 (1675回)-(2018/05/18(Fri) 11:58:10)
No87405 (夜叉丸 さん) に返信
> 今まで Panel1(LEFT) と Panel2(Fill) があり,その間に Split1 がある場合に

こういう状態だったということでしょうか。

Panel panel1, panel2;
Splitter split1;
public Form1()
{
  InitializeComponent();
  Controls.Clear();
  split1 = new Splitter() { Dock = DockStyle.Left, BackColor = Color.HotPink };
  panel1 = new Panel() { Dock = DockStyle.Left, BackColor = Color.LightCyan };
  panel2 = new Panel() { Dock = DockStyle.Fill, BackColor = Color.LightGreen };
  Controls.AddRange(new Control[] { panel2, split1, panel1 });
  panel1.DoubleClick += (sender, e) => panel1.Visible = split1.Visible = false;
}



> PanelContainer を使用した場合には
> どのように処理すればよいのでしょうか?

PanelContainer というのは
SplitContainer のことでしょうか。

SplitContainer splitContainer1;
public Form1()
{
  InitializeComponent();
  Controls.Clear();
  splitContainer1 = new SplitContainer() { Dock = DockStyle.Fill, BackColor = Color.HotPink };
  splitContainer1.Panel1.BackColor = Color.LightCyan;
  splitContainer1.Panel2.BackColor = Color.LightGreen;
  Controls.Add(splitContainer1);
  splitContainer1.Panel1.DoubleClick += (sender, e) => splitContainer1.Panel1Collapsed = true;
}
[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87408 ] / ▼[ 87554 ]
■87553 / 2階層)  Re[2]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (116回)-(2018/06/05(Tue) 14:21:34)
ありがとうございました。

フォームのリサイズ時に
Panel1とPanel2が同時に高さが変わるのですが
Panel2を現状の高さでPanel1の高さのみ変わるようにしたいのですが
どのようにすればよいのでしょうか?

┌─────┐  以前であれば、
│┌───┐│  Panel1.Dock = Fill
││Panel1││  Panel2.Dock = Bottom
│└───┘│  にしておけばPanel2の高さは
│┌───┐│  変更されませんでした。
││Panel2││
│└───┘│
└─────┘

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87553 ] / ▼[ 87556 ]
■87554 / 3階層)  Re[3]: No87308 の続きになるのですが
□投稿者/ 猫まっしぐら (7回)-(2018/06/05(Tue) 15:10:22)
No87553 (夜叉丸 さん) に返信

SplitContainer.FixedPanelをPanel1にすればPanel1の高さ又は幅が、 Panel2にすればPanel2の高さ又は幅が固定されます
(高さ又は幅のいずれになるかはSplitContainer.Orientationによります)

その場合は.SplitContainer.IsSplitterFixed = Trueにすればユーザーによるスプリッターの移動を禁止出来ます

またスプリッターを固定した時はSplitContainer.SplitterWidthを小さくする等して動かせないことを明示した方が良いかなと

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87554 ] / ▼[ 87558 ]
■87556 / 4階層)  Re[4]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (117回)-(2018/06/05(Tue) 15:35:06)
2018/06/05(Tue) 15:48:13 編集(投稿者)
No87554 (猫まっしぐら さん) に返信
SplitContainer.FixedPanelをPanel2にすれば
固定できました。

1.		2.		3.		
┌─────┐ ┌─────┐ ┌─────┐ 
│┌───┐│ │┌───┐│ │┌───┐│ 
││Panel1││ ││   ││ ││   ││ 
│└───┘│ ││Panel1││ ││Panel1││ 
│┌───┐│ ││   ││ ││   ││ 
││Panel2││ │└───┘│ │└───┘│ 
│└───┘│ │┌───┐│ │┌───┐│ 
└─────┘ ││Panel2││ ││   ││ 
		│└───┘│ ││Panel2││ 
        └─────┘ ││   ││ 
				│└───┘│	
				└─────┘	
4.		5.		6.		
┌─────┐ ┌─────┐ ┌─────┐
│┌───┐│ │┌───┐│ │┌───┐│
││Panel1││ ││Panel1││ ││   ││
│└───┘│ │└───┘│ ││Panel1││
│┌───┐│ │┌───┐│ ││   ││
││Panel2││ ││   ││ │└───┘│
│└───┘│ ││Panel2││ │┌───┐│
└─────┘ ││   ││ ││   ││
        │└───┘│ ││Panel2││
        └─────┘ ││   ││
				│└───┘│
				└─────┘

1.最小の状態です。
2.フォームを縦に伸ばします。Panel2が固定なのでPanel1が伸びます。
3.Panel2 を縦に伸ばします。
4.フォームの縦を最小までちじめます。
5.同様にフォームの縦を伸ばすと、Panel2が固定なのにPanel2が伸びます。
6.3で伸ばした長さになるまでPanel2が伸びてからPanel1が伸びます。


5の動きが2と同様の動きにならないのでしょうか?

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87556 ] / ▼[ 87563 ] ▼[ 87561 ]
■87558 / 5階層)  Re[5]: No87308 の続きになるのですが
□投稿者/ 猫まっしぐら (8回)-(2018/06/05(Tue) 16:35:02)
No87556 (夜叉丸 さん) に返信

すみません
こちらでは再現出来ませんでした
ちなみにPanel1MinSizeとPanel2MinSize、フォームのMinimumSizeはいくつでしょう…
[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87558 ] / ▼[ 87566 ]
■87563 / 6階層)  Re[6]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (119回)-(2018/06/06(Wed) 10:43:50)
2018/06/06(Wed) 10:44:41 編集(投稿者)
No87558 (猫まっしぐら さん) に返信

> ちなみにPanel1MinSizeとPanel2MinSize、フォームのMinimumSizeはいくつでしょう…
Panel1MiniSize=140
Panel2MiniSize=100
Form.MinimumSize=(736, 389)

現状は以下のように
┌───────┐
│┌─────┐│≡Panel0≡
││ Panel0 ││Dock=Top
│└─────┘│Size=(710, 65)
│┌─────┐│
││┌───┐││≡SplitContainer≡
│││Panel1│││DOCK=Fill
││└───┘││Size=(710, 275)
││┌───┐││SplitterWidth=5
│││Panel2│││
││└───┘││
│└─────┘│
└───────┘

Panel0にはラベルやボタン等があります。
切替えにより、Panel1, Panel2 の表示順を
入れ替えたい時があるのですが、
Orienntalでは縦横の切替えはできるのですが
入替えができません。
また、sc.Panel1.Controls も使えないみたいで張替えることもできません。
コンテナを使わない場合は、DockとBringToFrontの設定を駆使するとできたのですが

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87563 ] / 返信無し
■87566 / 7階層)  Re[7]: No87308 の続きになるのですが
□投稿者/ 猫まっしぐら (9回)-(2018/06/06(Wed) 14:34:23)
No87563 (夜叉丸 さん) に返信

取り敢えず中身の入れ替えですが、SplitContainerのPanel1,Panel2にパネルコントロールをDock=Fillで貼っておいてボタンのクリックイベント等で
    If Flg Then
        Flg = False
        SC.Panel1.Controls.Remove(P1)
        SC.Panel2.Controls.Remove(P2)
        SC.Panel1.Controls.Add(P1)
        SC.Panel2.Controls.Add(P2)
    Else
        Flg = True
        SC.Panel1.Controls.Remove(P1)
        SC.Panel2.Controls.Remove(P2)
        SC.Panel1.Controls.Add(P2)
        SC.Panel2.Controls.Add(P1)
    End If
とやれば出来ることは出来ます

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87558 ] / ▼[ 87564 ]
■87561 / 6階層)  Re[6]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (118回)-(2018/06/06(Wed) 10:32:21)
2018/06/06(Wed) 10:43:25 編集(投稿者)
No87558 (猫まっしぐら さん) に返信

> ちなみにPanel1MinSizeとPanel2MinSize、フォームのMinimumSizeはいくつでしょう…
Panel1MiniSize=140
Panel2MiniSize=100
Form.MinimumSize=(736, 389)

現状は以下のように
┌───────┐
│┌─────┐│≡Panel0≡
││ Panel0 ││Dock=Top
│└─────┘│Size=(710, 65)
│┌─────┐│
││┌───┐││≡SplitContainer≡
│││Panel1│││DOCK=Fill
││└───┘││Size=(710, 275)
││┌───┐││SplitterWidth=5
│││Panel2│││
││└───┘││
│└─────┘│
└───────┘

Panel0にはラベルやボタン等があります。
切替えにより、Panel1, Panel2 の表示順を
入れ替えたい時があるのですが、
Orienntalでは縦横の切替えはできるのですが
入替えができません。
また、sc.Panel1.Controls も使えないみたいで張替えることもできません。
コンテナを使わない場合は、DockとBringToFrontの設定を駆使するとできたのですが

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87561 ] / ▼[ 87567 ]
■87564 / 7階層)  Re[7]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (120回)-(2018/06/06(Wed) 10:44:25)
No87558 (猫まっしぐら さん) に返信

新規プロジェクトを作成して
Form1.cs は変更せずに
SplitContainerのみ張り付けて設定を変更した場合のForm1.Designer.csが以下になります。
この場合でも同じ現象が発生します。

namespace WindowsFormsApp1
{
	partial class Form1
	{
		/// <summary>
		/// 必要なデザイナー変数です。
		/// </summary>
		private System.ComponentModel.IContainer components = null;

		/// <summary>
		/// 使用中のリソースをすべてクリーンアップします。
		/// </summary>
		/// <param name="disposing">マネージ リソースを破棄する場合は true を指定し、その他の場合は false を指定します。</param>
		protected override void Dispose(bool disposing)
		{
			if (disposing && (components != null))
			{
				components.Dispose();
			}
			base.Dispose(disposing);
		}

		#region Windows フォーム デザイナーで生成されたコード

		/// <summary>
		/// デザイナー サポートに必要なメソッドです。このメソッドの内容を
		/// コード エディターで変更しないでください。
		/// </summary>
		private void InitializeComponent()
		{
			this.splitContainer1 = new System.Windows.Forms.SplitContainer();
			((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
			this.splitContainer1.SuspendLayout();
			this.SuspendLayout();
			// 
			// splitContainer1
			// 
			this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
			this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
			this.splitContainer1.Location = new System.Drawing.Point(0, 0);
			this.splitContainer1.Name = "splitContainer1";
			this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
			// 
			// splitContainer1.Panel1
			// 
			this.splitContainer1.Panel1.BackColor = System.Drawing.Color.Red;
			this.splitContainer1.Panel1MinSize = 170;
			// 
			// splitContainer1.Panel2
			// 
			this.splitContainer1.Panel2.BackColor = System.Drawing.Color.Blue;
			this.splitContainer1.Panel2MinSize = 150;
			this.splitContainer1.Size = new System.Drawing.Size(500, 324);
			this.splitContainer1.SplitterDistance = 170;
			this.splitContainer1.TabIndex = 0;
			// 
			// Form1
			// 
			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
			this.ClientSize = new System.Drawing.Size(500, 324);
			this.Controls.Add(this.splitContainer1);
			this.Font = new System.Drawing.Font("MS UI Gothic", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
			this.MinimumSize = new System.Drawing.Size(516, 363);
			this.Name = "Form1";
			this.Text = "Form1";
			((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
			this.splitContainer1.ResumeLayout(false);
			this.ResumeLayout(false);

		}

		#endregion

		private System.Windows.Forms.SplitContainer splitContainer1;
	}
}


[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87564 ] / ▼[ 87568 ]
■87567 / 8階層)  Re[8]: No87308 の続きになるのですが
□投稿者/ 猫まっしぐら (10回)-(2018/06/06(Wed) 15:09:33)
No87564 (夜叉丸 さん) に返信

再現しました
これ3でPanel1MinSizeまで押し込むのがミソですね
つまりPanel1MinSizeに当たったところでリサイズが完了してしまってPanel2の高さが内部的に更新されなくなってしまうのでその高さを
保持してしまうんではないかと…

対処方法はSizeChangedイベントで
SC.SplitterDistance = SC.Height - SC.Panel2.Height
でどうでしょう
(これが正しいのかは自信ありませんが)

[ 親 87405 / □ Tree ] 返信 編集キー/

▲[ 87567 ] / 返信無し
■87568 / 9階層)  Re[9]: No87308 の続きになるのですが
□投稿者/ 夜叉丸 (122回)-(2018/06/06(Wed) 18:54:39)
No87567 (猫まっしぐら さん) に返信

変更しました。
5の動きは治りました。

3→4の動きで

panel2 固定なのに、
panel1, panel2 が同時に小さくなっていきます。

panel1 が縮小していき最小に達してから
panel2 が縮小してき4になってほしいです。

[ 親 87405 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -