C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: クラスの使用方法


(過去ログ 15 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■5632 / inTopicNo.1)  クラスの使用方法
  
□投稿者/ ニコラ (1回)-(2007/07/19(Thu) 12:32:51)

分類:[VB.NET/VB2005] 

VisualBasic2005 C#を使用しております。

2つのクラスを作成し、

メインのクラスから、もう一つのクラスを呼び出し、フォームに図を描画したいと思っています、
フォームは表示されるのですが、図が表示されず。

どうやら、呼び出されたクラスの中にある。

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
        処理
    }
が起動されていないようです。

メインのクラスにこれを置くと描画されるのですが、
呼び出されるクラスには置けないのでしうか。。




引用返信 編集キー/
■5636 / inTopicNo.2)  Re[1]: クラスの使用方法
□投稿者/ HiJun (55回)-(2007/07/19(Thu) 12:50:49)
2つのクラスを使用してとありますが、
単なるクラスなのか、何を継承しているのかわからないので
答えようが無いですね。

もうちょっと、2つのクラスの詳細を提示できませんか?

(単に、Form1に表示しろイベントを投げてやるだけでOKな気がしますが...)
引用返信 編集キー/
■5637 / inTopicNo.3)  Re[2]: クラスの使用方法
□投稿者/ ニコラ (2回)-(2007/07/19(Thu) 13:03:29)
説明不足ですみません
こんな感じなのですが・・・



namespace テスト
{
    public partial class Form1 : Form
    {
         private Mes mes = new Mes(); 
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            mes.serf = "こんにちわ";
            mes.JJ();
        } 
    }
}



namespace テスト
{
    class Mes:Form
    {
        public string serf;

        public void JJ()
        {
           
            this.Invalidate();


        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;

            if(serf  != null){
            Font font1 =new Font("MS ゴシック",18,FontStyle.Bold);//書式
            SolidBrush brush =new SolidBrush(Color.Black);//色
            RectangleF rect = new RectangleF(26,430,750,140);//領域
            g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;//アンチエイリアス     
            g.DrawString(serf,font1,brush,rect);//描画
            }
        }
    }
}



引用返信 編集キー/
■5647 / inTopicNo.4)  Re[3]: クラスの使用方法
□投稿者/ よねKEN (58回)-(2007/07/19(Thu) 14:26:36)
よねKEN さんの Web サイト
> private void Form1_Load(object sender, EventArgs e)
> {
> mes.serf = "こんにちわ";
> mes.JJ();
> }

フォームmesをShowしていないようですが・・・

引用返信 編集キー/
■5649 / inTopicNo.5)  Re[4]: クラスの使用方法
□投稿者/ ニコラ (4回)-(2007/07/19(Thu) 14:56:39)
2007/07/19(Thu) 15:01:35 編集(投稿者)

すみません;
>
> フォームmesをShowしていないようですが・・・
>

とはなにでしょうか? すみません
Form1に対して描画を行いたいのですが。。


引用返信 編集キー/
■5655 / inTopicNo.6)  Re[5]: クラスの使用方法
□投稿者/ よねKEN (59回)-(2007/07/19(Thu) 16:15:50)
よねKEN さんの Web サイト
2007/07/19(Thu) 16:17:42 編集(投稿者)
No5649 (ニコラ さん) に返信
> 2007/07/19(Thu) 15:01:35 編集(投稿者)
>
> すみません;
>>
>>フォームmesをShowしていないようですが・・・
>>
>
> とはなにでしょうか? すみません
> Form1に対して描画を行いたいのですが。。

以下のコードに関して、

>protected override void OnPaint(PaintEventArgs e)
> {
> base.OnPaint(e);
> Graphics g = e.Graphics;
>
> if(serf != null){
> Font font1 =new Font("MS ゴシック",18,FontStyle.Bold);//書式
> SolidBrush brush =new SolidBrush(Color.Black);//色
> RectangleF rect = new RectangleF(26,430,750,140);//領域
> g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;//アンチエイリアス
> g.DrawString(serf,font1,brush,rect);//描画
> }
> }

この処理は、フォームMesの描画に関するコードですので、
Form1とは無関係ですよね。
そして、

> private void Form1_Load(object sender, EventArgs e)
> {
> mes.serf = "こんにちわ";
> mes.JJ();
> }

というコードのmes.JJ();の後にmes.Show();のような処理がないので、
フォームmesが画面に表示されてません。
フォームmesが表示されていないので、Mesクラスに定義したOnPaintメソッドも
実行される機会がありませんよね、という意味です。

Form1に描画したいなら、Form1のOnPaintメソッドに記述しないといけませんよね。

引用返信 編集キー/
■5658 / inTopicNo.7)  Re[5]: クラスの使用方法
□投稿者/ 倉田 有大 (61回)-(2007/07/19(Thu) 17:25:09)
>>フォームmesをShowしていないようですが・・・
> とはなにでしょうか? すみません
> Form1に対して描画を行いたいのですが。。

ニコラさんはフォームmesを作成して、mesに処理をしているのですから、Form1に何も起こらなくて当然です。

>class Mes:Form
>{

ここの意味は理解されてますか?フォームを継承して新しいフォームMesを定義しているのですが。



引用返信 編集キー/
■5662 / inTopicNo.8)  Re[6]: クラスの使用方法
□投稿者/ ニコラ (5回)-(2007/07/19(Thu) 19:05:41)
わかりました!
ありがとうございます。
いまいち理解不足だったようです。。
ということは、Form1の描画のためのOnPaintメソッドは,他のクラスに置けないのですね。。

引用返信 編集キー/
■5666 / inTopicNo.9)  Re[7]: クラスの使用方法
□投稿者/ ダッチ (147回)-(2007/07/19(Thu) 21:19:42)
No5662 (ニコラ さん) に返信
> わかりました!
> ありがとうございます。
> いまいち理解不足だったようです。。
> ということは、Form1の描画のためのOnPaintメソッドは,他のクラスに置けないのですね。。
> 

Form1 の OnPaint メソッドで行う処理を別のクラスに書いて、
Form1 の OnPaint メソッドでそれを呼べばいいだけだと思います。

    public partial class Form1 : Form
    {
        private Mes mes;
        public Form1()
        {
            InitializeComponent();
            mes = new Mes();
            mes.serf = "こんにちわ";
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            mes.DrawForm1(e.Graphics); // OnPaint メソッドの中から他のクラスのメソッドを呼ぶ
        }
    }

    class  Mes
    {
        public string serf;

        public void DrawForm1(Graphics g)
        {
            if (serf  != null){
                Font font1 =new Font("MS ゴシック",18,FontStyle.Bold);//書式
                SolidBrush brush =new SolidBrush(Color.Black);//色
                RectangleF rect = new RectangleF(26,430,750,140);//領域
                g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;//アンチエイリアス     
                g.DrawString(serf,font1,brush,rect);//描画
            }

        }
    }

引用返信 編集キー/
■5718 / inTopicNo.10)  Re[8]: クラスの使用方法
□投稿者/ ニコラ (6回)-(2007/07/21(Sat) 14:00:52)
お礼が遅くなってしまいすみません。
完成いたしました!
本当にありがとうございます!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -