VC# 追加フォーム生成時、フォームに描画できない
前略
・VC#(.NET 2008)のプログラムでおしえてください。
・メインのWindowsフォームからボタンクリックで 追加したサブWindowsフォーム上のピクチャーボックス上に何も操作なしでに描画したいのですができません。CreateGraphics()でオブジェクトを生成して描画しています。どのようにしたらよいのかおしえてください。フォームのイベントとして、Paint,Load,shown,Activated等いろいろやってもだめでした。
尚、サブフォームにボタンをもうけ このメソッドの中に描画コマンドを書き、ボタンを操作すると描画できます。下記は円を描こうとしていますが、shapeコンポーネントでは描けな複雑な描画をしたいと思っています。
・以下に 下記の動作となるソースコードを記載します。
(1)起動するとメインフォームForm1のpictureBox1に 赤い円が描かれる
(2)ボタンbutton1をクリックするとForm2が表示される。
Form2上のラベルlabel1とlabel2の文字色は青色に変わっています。
しかし、円は何故か描かれていません
(3)Form2上のボタンをクリックすると赤い円がForm2上に描かれます。
どこをどのように直せば追加のサブフォームForm2が表示された時に Form2上のpictureBox1に円が描がかれているのでしょうか。以上、よろしくお願いします
//-----------------------------------------------------------
//メインフォーム
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace temp2
{
public partial class Form1 : Form
{
public Form1(){
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e){
Form2 form2 = new Form2();
form2.ShowDialog();
}
private void Form1_Paint(object sender, PaintEventArgs e){
Graphics g = pictureBox1.CreateGraphics();
g.DrawEllipse(Pens.Red, 0, 0, 200, 200);
}
}
}
//サブフォーム
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace temp2
{
public partial class Form2 : Form
{
public Form2(){
InitializeComponent();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e){
label1.ForeColor = Color.Blue;
Graphics g1 = pictureBox1.CreateGraphics();
g1.DrawEllipse(Pens.Blue, 0, 0, 50, 50);
label2.ForeColor = Color.Blue;
}
private void button1_Click(object sender, EventArgs e){
Graphics g2 = pictureBox1.CreateGraphics();
g2.DrawEllipse(Pens.Blue, 0, 0, 50, 50);
}
private void Form2_Paint(object sender, PaintEventArgs e){
}
private void Form2_Load(object sender, EventArgs e){
}
private void Form2_Shown(object sender, EventArgs e){
}
}
}
以上
補足
回答いただきありがとうございます。 動作について補足いたします。 button1をクリックすると、数時間毎に特定のURLにアクセスし、HTMLの内容に変更がないか調べ、変更があれば他の処理を行います。 パソコンを再起動するまでは、永遠と調べ続けて欲しいため、無限ループにしています。 実は、今までは、他のスクリプト言語で作成していたのですが、今回初めてVisualStudio2008のC#を使って、マウスで操作のできるアプリケーションに書き換えています。 今までは、暴走した時も、通常終了も、taskkillコマンドを含むバッチファイルを動作させ、外部から強制終了させていましたが、今回は、ボタンをクリックするだけで、気軽にマウスで強制終了ができるようにしたく思っています。もっと確実に終了する方法があれば助かります。 理想的なのは、 button1は、動作開始のボタン。 button2は、プログラムが暴走した時の非常に強力な強制終了のボタン。 button3は、Alt+F4を押したときと同程度の通常終了ボタン。 という3つのボタンを作りたく思っています。 なお、一時ファイルの保存はありますが、再起動時に、全て削除しますので、万が一、処理途中で強制終了が発生しても問題ないと思っています。 System.Threading.Thread.Sleep(10000000);部分のの処理は、 for(;;){ ・・・・・ 処理 ・・・・・ sleep(10000000); } という感じのプログラムになっています。 また、button2でmyappを指定しているのは、この実行ファイルが、myapp.exeという名前のためです。