|
分類:[C#]
こんばんは。質問させて頂きます。
Form上にpanel1を配置し、さらにpanel1の中にpanel2を配置し、panel2.CreateGraphic()で帳票っぽく表示したく、以下のようにコードを書きました。
場所は、FormのShownイベントです。
private void Form1_Shown(object sender, EventArgs e)
{
Font lblFont = new Font("MS UI Gothic", (float)11.25); // ラベルのフォントスタイル、サイズ
Graphics graphicForm = this.CreateGraphics();
// 背景描画
graphicForm.FillRectangle(new SolidBrush(Color.FromArgb(192, 255, 192)), 0, 0, 1350, 35);
// タイトル
graphicForm.DrawString("タイトル1 : あああああ", lblFont, Brushes.Black, 10, 10);
// 背景描画2行目
graphicForm.FillRectangle(new SolidBrush(Color.FromArgb(192, 255, 255)), 0, 35, 1350, 25);
Color bkColor; // 背景色
Graphics graphicPanel = this.panel2.CreateGraphics();
// データ個数でループ
Int32 kosuu = 1000;
for (Int32 i = 0; i < kosuu; i++) {
// 背景色の決定
if (i % 2 > 0) {
bkColor = Color.SkyBlue;
}
else {
bkColor = Color.LightYellow;
}
this.panel2.Size = new Size(1350, i * 150);
// 背景描画
graphicPanel.FillRectangle(new SolidBrush(bkColor), 0, i * 150, 1350, 150);
}
}
やりたいことは、
・panel2に描画したいものが描画されないので、描画したい。
panel1に直接描画はできたのですが、スクロールさせる方法が分からず、panel2にしました。
panel1のAutoScroll=true としております。
kosuuにはいくつデータが来るか前もって分からない前提で、最大数も持ちません。サンプルで1000としております。
色を変えた各帯の上にも、データを数十描画します。
始めはラベル等をAddRangeしておりましたが、kosuuが多くなるとあまりに動作が重く、DrawStringなどで実装することとしました。
何分、C#始めて日が浅いもので、色々勘違いしている部分があるかもしれませんが、どうかご教授お願い致します。
|