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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.24730 の関連記事表示

<< 0 >>
■24730  描画メソッドを他クラスから実行するには
□投稿者/ うえだ -(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);
        }
      }
    }
親記事 /過去ログ46より / 関連記事表示
削除チェック/

■24733  Re[1]: 描画メソッドを他クラスから実行するには
□投稿者/ 魔界の仮面弁士 -(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
記事No.24730 のレス /過去ログ46より / 関連記事表示
削除チェック/

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

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

    描画先をメソッドに渡すとできました!
    ありがとうございました。
記事No.24730 のレス / END /過去ログ46より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -