PaintBoxによる直接描画
前回はDataGridViewで表示していたが、自分の用途には多機能すぎる気がしたので、PaintBoxにより描画の面倒を自前で全部見ることにした。
とりあえず表示だけならこんな感じ。
DataGridView使うより楽な気がする。描画でSolidBrushとかをちゃんとdisposeすべきかとか、Fontとかを毎回newするのは遅くなるかとかはとりあえず気にしないことにする。
マウスやキーボードイベントを取れれば、UIまわりはすぐできそう。
ソースは以下の通り。
using System; using System.Collections; using System.IO; using System.Drawing; using System.Windows.Forms; namespace WinApp { public class TestForm : Form { PictureBox pbox = new PictureBox(); Color DefaultColor = ColorTranslator.FromHtml("#E3FFF3"); public TestForm() { ClientSize = new Size(600, 400); Text = "TestForm"; Controls.Add(pbox); pbox.Dock = DockStyle.Fill; pbox.BorderStyle = BorderStyle.Fixed3D; Load += new EventHandler(TestForm_Load); } private void TestForm_Load(object sender, System.EventArgs e) { Draw(); } void Draw() { pbox.Image = new Bitmap(pbox.Width,pbox.Height); Graphics g = Graphics.FromImage(pbox.Image); Font f = new Font("MS ゴシック",12,FontStyle.Regular); SolidBrush brush_dir = new SolidBrush(Color.Blue); SolidBrush brush_file = new SolidBrush(Color.Black); g.FillRectangle(new SolidBrush(DefaultColor),0,0,pbox.Width,pbox.Height); string cdir = Directory.GetCurrentDirectory(); ArrayList dirs = new ArrayList(); dirs.Add(" <.> "); dirs.Add(" <..> "); foreach (string dir in Directory.GetDirectories(cdir)) { String s = " <" + Path.GetFileName(dir) + "> "; dirs.Add(s); } string [] files = Directory.GetFiles(cdir); int i=0; foreach (string dir in dirs) { g.DrawString(dir,f,brush_dir,0,i*14); i++; } foreach (string file in files) { String s = " " + Path.GetFileName(file) + " "; g.DrawString(s,f,brush_file,0,i*14); i++; } } [STAThread] static void Main() { Application.Run(new TestForm()); } } }