• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC#2010 splitterで分けたpanel)

VC#2010 splitterで分けたpanelの高さが思ったとおりに取得できない

このQ&Aのポイント
  • FormにPanelを二つ配置し、Splitterで上下に区切る方法について説明します。
  • panel1の高さを取得する際に、panel1とpanel2の高さが正しく反映されない問題が発生しています。
  • panel1の高さが想定通りに取得できない理由や解決策について解説します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#251971
noname#251971
回答No.1

実際にpanel1が(panel2と重なって) 下まで含んだサイズになっているのではないでしょうか。 Dockプロパティによるドッキングは、 フォームへの要素の配置順(Zオーダー)に依存します。 Fillにする要素を先にフォーム上に配置した場合、 まず全体にFillされて、後から配置した部品がそれに重なって配置されます。 ですので、通常はFillする要素は最後に配置します。 先に配置した部品がDockで上下左右などにドッキングされていれば、 後から配置される部品をFillすると、他の部品と重ならずに 残りの領域に対して配置されます。 上記のように、通常はフォームに部品を置いた順で 最初に置いた部品が一番後ろとなる形にZオーダーが設定されていきます。 ですが、後からZオーダーの変更も可能です。 フォームデザイナを表示している画面で、 メニューの[表示]-[その他のウィンドウ]-[ドキュメント アウトライン] を開いてみてください。 そのウィンドウには、要素のZオーダーと親子関係が表されており、 その関係の変更も可能になっています。 ([↑][↓]ボタンでZオーダー変更。下にある項目ほどZオーダーが後ろになる) そこで、panel2がpanel1よりも下になるように並び替えをすれば、 目的の状態になるのではないかとおもわれます。

coelacanth9
質問者

お礼

お世話になっております。ご回答ありがとうございます! おっしゃるとおりでした。 記事に投稿した手順で操作したつもりが、アウトラインで見てみるとそうなっていませんでした・・。いじくってるうちに変わってしまったのかもしれません。 ドキュメントアウトラインの使い方を知らなかったので、そちらも勉強になりました。重ねて御礼申し上げます。 入れ替えてみたところ、思ったとおりのHeightが得られました。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C#、VB.NETのDockプロパティについて

    たとえばPanelコントロールのDockプロパティをTOPにした状態で、 後から追加したSplitterコントロールのDockプロパティをTOPにすると、 Panelコントロールの下部に配置されますが、Panelの上部にSplitter を配置してもらうにはどうすればよいでしょうか? TabIndexの順番とは無関係のようですが・・・。

  • デスクトップに貼り付けたパネルを背面に移動したい

    Form1とは独立してデスクトップにPanelを貼り付けているのですが このPanelを他のアプリのウィンドウの背面に移動したいと思っています。 どのようにしたら、良いでしょうか。 Form1については以下のように最背面にすることは出来るのですが 独立したPanelは移動できずに困っています。 下記のHandleの部分をPanel->Handleとしてもだめでした。 SetWindowPos(Handle, HWND_BOTTOM,Left ,Top , Width,Height, SWP_SHOWWINDOW); Panelは以下のようにしてデスクトップに貼り付けています。 Panel->ParentWindow=GetDeskTopWindow(); ご存知の方、宜しくお願いします。

  • VC#2010 アスペクト比を保った拡大縮小

    こんにちは。アスペクト比を保った拡大縮小について質問です。 [やりたい事] ・本を開いたようなイメージで、Panelの中に2個のPictureBoxを左右に配置しています。 ・Panelのサイズを拡大縮小した時に、画像の元のアスペクト比を保ったまま拡大縮小したい。 ・その際、PictureBox自身に自分の位置や大きさを計算させたい。 [現状と問題点] ・なんとなく動作しているが、画像がチラついてしまう。 ・PictureBoxのBackColorに色をつけているが、画像の端に微妙にその色が見えている時がある。 ・自分なりに考えて計算式を作ってみましたが、実はもっとスマートな計算方法があるなら教えて頂きたいです。 [プロジェクトアップロード先] http://www1.axfc.net/uploader/so/2808804 テスト用の画像も入っています。パスワードは設定していません。 実行すれば現状の動作を確認できるようになっています。 [ソースコード抜粋] ・・・ 問題の箇所 → mPictureBox.RefleshPosition()の中身 private void Form1_Load(object sender, EventArgs e) { //Formにpanelを追加 Panel panel1 = new Panel(); panel1.Dock = DockStyle.Fill; this.Controls.Add(panel1); //panelにpictureBoxを追加 panel1.Controls.Add(new mPictureBox(panel1, eSide.Left, @"..\..\800_600.jpg")); panel1.Controls.Add(new mPictureBox(panel1, eSide.Right, @"..\..\600_800.jpg")); panel1.Refresh(); } ----------------------------------------------------------- //thisはmPictureBoxです //this.sideはenum eSide{Left, Right} というenumです。 //RefleshPosition()はmPictureBoxのメソッドです。 //mPictureBoxのPaintイベントや親のSizeChangedで呼ばれます。 public void RefleshPosition() { if (this.Image.Height > this.Image.Width) { //元画像の高さ > 幅 の場合 //自分(PictureBox)の高さ = 親(Panel)の高さ this.Height = this.Parent.Height; //自分(PictureBox)の幅  = [元画像の幅] * ([自分の高さと元画像の高さの倍率]) this.Width = (int)(Image.Width * ((double)this.Height / (double)this.Image.Height)); this.Top = 0; //↑で自分の幅を計算した結果、1ページ分の幅より広くなってしまっていたら if (this.Width > (this.Parent.Width / 2.0)) { //自分(PictureBox)の幅 = 親(Panel)の幅 this.Width = (int)(this.Parent.Width / 2.0); //自分(PictureBox)の高さ= [元画像の高さ] * ([自分の幅と元画像の幅の倍率]) this.Height = (int)(Image.Height * ((double)this.Width / (double)this.Image.Width)); //自分のTop = [親(Panel)の高さの半分] - [自分の高さの半分]    ←上下中央寄せにしたい為 this.Top = (int)((Parent.Height / 2.0) - (this.Height / 2.0)); } } else { //↑のif文と逆の計算 this.Width = (int)(this.Parent.Width / 2.0); this.Height = (int)(Image.Height * ((double)this.Width / (double)this.Image.Width)); this.Top = (int)((Parent.Height / 2.0) - (this.Height / 2.0)); if (this.Height > (this.Parent.Height)) { this.Height = (int)(this.Parent.Height); this.Width = (int)(Image.Width * ((double)this.Height / (double)this.Image.Height)); this.Top = 0; } } if (this.side == eSide.Right) { //右ページなら画像の左端は、親(Panel)の中央 this.Left = (int)(this.Parent.Width / 2.0); } else { //左ページなら画像の左端は、親(Panel)の中央 - 画像の幅  ←  本のように中央に寄せたい為 this.Left = (int)((this.Parent.Width / 2.0) - this.Width); } }

  • Visual Studio 2008 で VC++ .NET を使って

    Visual Studio 2008 で VC++ .NET を使って開発をしています。 クラスについて現在勉強しているんですけど、早速詰まってしまいました。 『クラス内のメソッドを呼び出す時に、Form1等のフォームを指定し、クラス側ではそのフォームにボタンを配置する。 配置して、そのボタンをクリックされると、ダイアログで「Hello World!」と表示する』 このようなソフトを作りたいのです。(特に意味はなく、勉強したいため) ボタンの配置までは出来るんですが、「クリックされると」の部分が出来ません。 今までは、(クラス使ってないときでは) this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); など、 EventHandlerにthisを与えていたのですが、クラスだとthisが使えなくて困っています。 分かる方お願いします (コードはNGワード扱いされたので、URLを張ります。) http://azio.web.fc2.com/code.txt

  • 実行中の Timage のリサイズ

    こんにちは。 よろしくお願いいたします。 Borland C++Builder 6 を使用しています。 フォーム上に Timage を配置し、ソフト実行中にマウスで Timage をつかんでドラッグしてサイズを変更したいのですが、こういう事って可能でしょうか? もう少し詳しく申しますと、フォーム上に Timage を2つ上下に配置し、ソフト実行中に上下に配置した Timage の境目をつかんで上下にドラッグし、上側の Timage を大きくしたり小さくしたりしたいのですが、こういう事って可能でしょうか?

  • モジュールからの呼び出し - Panel内こんとろ~る

    モジュールからあるフォームのラベルのテキストを変更する下記のようなプログラムがありました。 Dim Frm as New Form Dim i as integer(カウンタ用変数) Frm = New_Frm(変更するオブジェクトのフォーム名) i=0 for i=0 to 3 Frm.controls("Label" & i).text= i next このようなプログラムがあり、見た目・配置変更が容易という都合上でLabel1~3をPanel上に配置し実行したところエラーが起きました。 この場合、どう書き換えればいいのでしょうか?

  • C# PanelのRegion設定について

    ボタンクリックにてPanelのRegion領域を変更したいのですが、勝手にリサイズされて困っております。 panel1の初期Location.X=0,Location.Y=0 のときはうまくいくのですが、初期Locationに値が入ると、矩形領域自体がリサイズされてしまいます。 (矩形領域が小さくなります。) なお、下記コードはテスト様に作成したもので、panel1のサイズを取得して、GraphicsPath からRegionを設定しています。 同じサイズなので、変化はないハズなのですが、初期Locationに値を設定すると、リサイズされてしまいます。 panel1のプロパティは panelのAutoSize=False Dock=None Margin=0,0,0,0 です。 private void button1_Click(object sender, EventArgs e) { Rectangle rect = new Rectangle(panel1.Location.X,panel1.Location.Y, panel1.Width,panel1.Height); GraphicsPath path = GetRoundRect(rect, 10); Graphics g = CreateGraphics(); g.SmoothingMode = SmoothingMode.AntiAlias; panel1.Region = new Region(path); } public GraphicsPath GetRoundRect(Rectangle rect, int radius) {   path.StartFigure();   path.AddLine(rect.Left, rect.Top, rect.Right, rect.Top);   path.AddLine(rect.Right, rect.Top,rect.Right, rect.Bottom);   path.AddLine(rect.Right, rect.Bottom,rect.Left, rect.Bottom);   path.AddLine(rect.Left, rect.Bottom,rect.Left, rect.Top);   path.CloseFigure();   return path; } アドバイスよろしくお願いいたします。

  • C#で、pictureBoxのオブジェクト?の横(width)と縦(height)を表示させたい

    C#の文字列操作とフォームオブジェクトのプロパティについてわからないことがあります。 フォームに pictureBoxのオブジェクトを配置して、 名前をgazouにしました。 そのgazouの横(width)と縦(height)を表示させることを させたいのですが、 NullReferenceExceptionはハンドルされませんでした。 オブジェクト参照がオブジェクト インスタントに設定されていません。 トラブルシューティングのヒント; オブジェクト インスタンスの作成にはnewキーワードを使用します。 メソッドを呼び出す前に、オブジェクトがNullで良いかどうか確認して下さい。 この例外に関する一般的なヘルプを参照します。 と表示されました。以下、問題のソースです。 string s = String.Format("width=[{0}] height=[{1}]", gazou.Image.Size.Width , gazou.Image.Size.Height); MessageBox.Show(s);

  • formタグを使うと不要な空行が出てしまいます。(サンプル有り)

    いつも勉強させていただいております。今回は質問をさせていただけないでしょうか。 あるフォーム(Google検索ボックス)をページの中に入れようとしています。 下記のような、HTMLを書いてみました。 上の文章 <form> form の文章 </form> 下の文章 どうやっても、「form の文章」の上下に2,3行分くらいの空行が できてしまいます。 <form height="16">としてもだめです。 どのようにすれば、空行をなくせるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • form input テキストを上下中央に表示したい

    お世話になります フォームのテキストボックスに表示する文字(value)を「上下左右中央」にしたいのですが 「上下中央」ができずに困っています(IE6、firefox) ※safari3では中央になりました 以下のhtmlを書いています。 paddingやverticalなど試してみたのですが… (buttonのvertical-align:bottom;は、これが無いと上へズレてしまうので、書きました。  これも意味がわかりません。。) とても基本的なことなのですが 検索しても解決策を見つけられませんでした。よろしくお願いします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style><!-- form input { margin-bottom:10px; color:#fff; border:none; font-size:12px; } form input.mlmg-text { width:150px; height:26px; background-color:green; padding:2px 5px; text-align:center; vertical-align:center; } form input.mlmg-buttton { width:50px; height:30px; color:#fff; background-color:blue; vertical-align:bottom; } --></style> </head> <body> <form method="post"> <input type="text" class="mlmg-text" name="user_mail" value="上下中央に配置したい"><input type="button" class="mlmg-buttton" name="join" value="GO"><br /> <input type="text" class="mlmg-text" name="user_mail_resign" value="上に寄っちゃう"><input type="button" class="mlmg-buttton" name="resign" value="GO"> </form> </body> </html>

    • ベストアンサー
    • HTML