2015/06/11(木) [n年前の日記]
#1 [prog] VS2013を使ってC#と.NETの勉強中
画像表示まではできたけど…。むむむ。
◎ ツールバーやステータスバーが他のフォームと重なってしまう問題。 :
ツールバー、ステータスバーを右クリックして最背面に移動を選べば重ならない状態になってくれる模様。
_ToolStrip/StatusStripコントロールがほかのコントロールに重なるのを解消するには?[C#、VB、VS 2005、VS 2008] − @IT
_ToolStrip/StatusStripコントロールがほかのコントロールに重なるのを解消するには?[C#、VB、VS 2005、VS 2008] − @IT
◎ FlowLayoutPanelの入れ子が上手くいかず。 :
フォームのサイズを変更したら、中のコントロールのサイズも追随してほしいのだけど…。結局上手くいかなくて諦めた。TableLayoutPanel を使うことにした。
フォームのデザインをしてるうちに、そもそもツールバーにボタンを置いとけばフォーム上に各機能のボタンを置かなくていいんじゃないかと気づいたので、結局 SplitContainer だけを使う状態になった。
フォームのデザインをしてるうちに、そもそもツールバーにボタンを置いとけばフォーム上に各機能のボタンを置かなくていいんじゃないかと気づいたので、結局 SplitContainer だけを使う状態になった。
◎ 複数のPictureBoxを背景透過したいのだけど。 :
PictureBox とやらに画像を表示するあたりを試しているけど、複数の画像を背景透過した状態で表示しようとして悩んでたり。
PictureBox を複数生成して、あらかじめフォームに居る PictureBox を親として追加していけばイケるかなと思ったけれど。
子、孫、ひ孫と追加していけば背景透過してくれるけど。
ちなみにこのあたり、「c# .net 背景 透過」とか「c# BackColor Color.Transparent」でググれば関連情報が出てくる、ような気がする。
PictureBox の Paint イベントで、毎回最初から何もかも全部描くようにすれば一応透過表示っぽくはなるけれど。
PictureBox を複数生成して、あらかじめフォームに居る PictureBox を親として追加していけばイケるかなと思ったけれど。
Panel | +-- PictureBox 1 | +-- PictureBox 2 | +-- PictureBox 3これだと、複数の子のPictureBox の背景が、親の PictureBox の背景を反映した状態になってしまって…。上図で言えば、PictureBox 2 と PictureBox 3 の背景が、PictureBox 1 の内容になってしまうので、PictureBox 2 と 3 が重なった時に見た目がおかしいわけで。
子、孫、ひ孫と追加していけば背景透過してくれるけど。
Panel | +-- PictureBox 1 | +-- PictureBox 2 | +-- PictureBox 3その場合、子は親のサイズ内に描画され、孫は子のサイズ内に描画され…。親となるPictureBoxのサイズが子のPictureBoxも含むサイズになってないと子の一部しか描画されないわけで。
ちなみにこのあたり、「c# .net 背景 透過」とか「c# BackColor Color.Transparent」でググれば関連情報が出てくる、ような気がする。
PictureBox の Paint イベントで、毎回最初から何もかも全部描くようにすれば一応透過表示っぽくはなるけれど。
// PictureBox描画 private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; pictureBox1.Width = canvas_w; pictureBox1.Height = canvas_h; g.FillRectangle(Brushes.White, g.VisibleClipBounds); // グリッド描画 if (displayGridToolStripMenuItem1.Checked) { Pen p = new Pen(Color.FromArgb(128, Color.Gainsboro), 1); for (int x = 0; x < canvas_w; x += grid_w) { g.DrawLine(p, x, 0, x, canvas_h); } for (int y = 0; y < canvas_h; y += grid_h) { g.DrawLine(p, 0, y, canvas_w, y); } } // オブジェクト描画 for (int i = 0; i < images.Count; i++) { ObjData o = (ObjData)images[i]; if (o.type == 0) { g.DrawImage(o.bitmap, o.x, o.y); } } }これだと、各画像をマウスで掴んでドラッグして移動(表示位置変更)とかやるのがおそらく大変そうで。自前で、マウス座標と各画像のアタリ判定みたいなことをしないといかんのではないのかなと。これがもし、各画像が PictureBox なら、そのあたり便利そうなアレコレがあらかじめ用意されてそうだけど…。
[ ツッコむ ]
以上です。