| ■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 |