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

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

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

Re[2]: 描画メソッドを他クラスから実行するには


(過去ログ 46 を表示中)

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

■24730 / inTopicNo.1)  描画メソッドを他クラスから実行するには
  
□投稿者/ うえだ (1回)-(2008/09/08(Mon) 19:49:37)

分類:[C#] 

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

pictureBoxのペイントイベントハンドラ内で、他のクラスの描画メソッドを実行して図形を描画したいのですが何も描画できません。
以下のコードに問題がありましたらご指摘おねがいします。


namespace test
{
  public partial class Form1 : Form
  {
    int red=250, green=50, blue=100;
      :
      :
    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
      Expression exp = new Expression();
      exp.Expression(red, green, blue);
    }
  }
}


namespace test
{
  class Expression
  {
    Control cont = new Control();

    public void Expression(int red, int green, int blue)
    {
      Brush brush = new SolidBrush(Color.FromArgb(255, red, green, blue));

      Point[] pts1 ={
          new Point(10,10), new Point(10,20),
          new Point(20,20), new Point(20,10)
        };
      Graphics g = cont.CreateGraphics();
      g.FillPolygon(brush, pts1);
    }
  }
}

引用返信 編集キー/
■24733 / inTopicNo.2)  Re[1]: 描画メソッドを他クラスから実行するには
□投稿者/ 魔界の仮面弁士 (836回)-(2008/09/08(Mon) 21:30:20)
No24730 (うえだ さん) に返信
> 他のクラスの描画メソッドを実行して図形を描画したいのですが

であれば、そのクラスに「描画先となるキャンバス」(すなわち『Graphics クラス』)を
渡す必要があるかと思います

.NET の描画系クラスも、そのような実装になっていますよね。

# たとえば System.Windows.Forms 関連だと、TextRenderer クラス, TextBoxRenderer クラス,
# ButtonRenderer クラス, CheckBoxRenderer クラス, ComboBoxRenderer クラス,
# GroupBoxRenderer クラス, ProgressBarRenderer クラス, RadioButtonRenderer クラス,
# ScrollBarRenderer クラス, ToolStripRenderer クラス, TrackBarRenderer クラス …などなど。


> private void pictureBox1_Paint(object sender, PaintEventArgs e)
> {
>    Expression exp = new Expression();
>    exp.Expression(red, green, blue);
> }
描画先となるキャンバスは、イベント引数から得られる e.Graphics であるハズなのに、
それが描画メソッドに渡されていません。ここに問題があるかと。
(これでは Expression は、どこに描画すればよいのか分からなくなってしまいますよね)


> class Expression
> {
>    Control cont = new Control();
>    public void Expression(int red, int green, int blue)
>    {
        /*snip*/
>    Graphics g = cont.CreateGraphics();
        /*snip*/
>    }
> }
あらたな Control を作成(new)し、そこから CreateGraphics していますが、
ここで描画先として生成した Graphics と、本来描画すべき pictureBox1 (の Paint イベント)から
得られる Graphics とは、何の関係も無いはずです。

無関係のキャンバスに描画したところで、pictureBox が描画される事は無いというわけで。


# ところで、Expression というのは、語句/表現/数式といった意味の「名詞」ですよね。
# メソッドの名前は、「動詞」または「動詞句」にしておくのが一般的かと思いますよ。
# http://msdn.microsoft.com/ja-jp/library/cc433282.aspx

引用返信 編集キー/
■24765 / inTopicNo.3)  Re[2]: 描画メソッドを他クラスから実行するには
□投稿者/ うえだ (3回)-(2008/09/09(Tue) 12:51:44)
2008/09/09(Tue) 12:53:35 編集(投稿者)

ご回答ありがとうございます。

描画先をメソッドに渡すとできました!
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -