|
■No22823 (欧米か さん) に返信 欧米かさん、返信ありがとうございます。
確かにたくさんプログラミング言語がある中で、どうしてC#じゃないとダメなんだ、ということもあると思いますが、初めてはじめたプログラミング言語がC#で、C#も全然できないうちにほかの言語を勉強する気になれなくて・・・。とりあえず、限界を感じるまでC#で行ってみます。
ところで、質問した件なのですが、実は、なんとか実現出来そうになったので報告します。 先ほどはpictureBox1とpictureBox2にGraphicsオブジェクトで直接描画していたのですが、先ほどインターネットで情報を探していたら、BitmapオブジェクトにGraphicsオブジェクトで描画する(表現が正しいのか分かりません)方法があったので、それを試してみたら出来ました! これならGraphicsオブジェクトのDrawLineとか使用して図形の描画が出来ますし、BitmapオブジェクトなのでpictureBox1のImageプロパティに設定して、pictureBox2を透過させて表示させることが出来ます。
実は、簡単なシミュレーションソフトみたいなのを作りたくて、シミュレーション結果と座標軸を同じPictureBoxに表示させてたのですが、時間経過で画面を更新するたびに座標軸も一緒に描画させると、画面いっぱいに座標軸を描画させているので画面がチカチカしてしまっていました。そこで、始めに座標軸だけを下のPictureBoxに表示させておいて、上に重ねたPictureBoxにGraphicsオブジェクトで描画したかったんです。 Bitmapオブジェクトが透過することは分かったのですが、Graphicsオブジェクトで描画した図形をBitmapオブジェクトに変換する方法がなかなか見つからなかったので、Graphicsオブジェクトを透過させる方法を探しておりました。
ちょっと文章が長くなってしまいましたが、最後に、「Graphicsオブジェクトで描画した図形がとりあえず透過出来たコード」を載せておきます。(timer1コントロールを追加しました。)
// グローバルのGraphicsオブジェクトとint型変数を宣言 Graphics graphics; int x;
// button1を押したとき private void button1_Click(object sender, System.EventArgs e) { // ビットマップオブジェクトの生成 Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); // 生成されたビットマップオブジェクトを元にグラフィクスオブジェクトの生成 Graphics g = Graphics.FromImage(bmp); // 原点座標を移動 g.TranslateTransform(pictureBox1.Width/2, pictureBox1.Height/2); // 原点を通る座標軸を描画 g.DrawLine(Pens.Blue, -picBoxWidth/2, 0, picBoxWidth/2, 0); g.DrawLine(Pens.Blue, 0, -picBoxHeight/2, 0, picBoxHeight/2);
g.Dispose(); // リソースを開放 pictureBox1.Image = bmp; // Bitmapオブジェクトを設定 }
// button2を押したとき private void button2_Click(object sender, System.EventArgs e) { // pictureBox2のGraphicsオブジェクトを生成 graphics = pictureBox2.CreateGraphics();
// timer1のEnabledプロパティを設定する if(timer1.Enabled == false) { // 無効の場合は有効 timer1.Enabled= true; } else { // 有効の場合は無効 timer1.Enabled = false; } }
// timer1_Tickイベント private void timer1_Tick(object sender, System.EventArgs e) { // pictureBox2をクリア pictureBox2.Refresh(); // x座標を更新 x += 10; // 黒い円を描く graphics.FillEllipse(Brushes.Black, x, 10, 30,30); }
結果的に自己完結してしまいましたが、どうもありがとうございました。お騒がせしました。 また、困ったことがあったらよろしくお願いします。
|