|
■No77102 (魔界の仮面弁士 さん) に返信
> ■No77101 (ゆーきゃん さん) に返信
>>この際、Form2で親フォームメソッドのdrawメソッドにアクセスしているのですが、
>>以下のプログラムの方法以外に方法はありますでしょうか?
>
> Form1 側に draw メソッドを用意しているのであれば、
> Form2 に、そのメソッドのデリゲートを渡しておいては如何でしょう。
>
お返事遅くなり、申し訳ございませんでした。
いつもお答えありがとうございます。
大変参考になりました。
申し訳ございません。testプログラムの組み方がよくありませんでした・・・
e.Graphics.DrawLine(Pens.Green, 80, 100, 120, 100);
の部分なのですが、実際は以下のようにしたいのです。
● Form1 =============================================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test1
{
public partial class Form1 : Form
{
float x1;
float y1;
float x2;
float y2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 Fm2 = new Form2();
DialogResult drret = Fm2.ShowDialog();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
draw(sender, e);
}
public static void draw(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(Pens.Green, x1, y1, x2, y2);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
x1 = int.Parse(textBox1.Text);
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
y1 = int.Parse(textBox2.Text);
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
x2 = int.Parse(textBox3.Text);
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
y2 = int.Parse(textBox4.Text);
pictureBox1.Refresh();
}
}
}
● Form2 (プログラム変化なし)===============================================
x1,y1,x2,y2はメソッドが増えた場合、頻繁に呼び出される情報となります。
上のプログラムの場合、「e.Graphics.DrawLine(Pens.Green, x1, y1, x2, y2);」部分で、
「オブジェクト参照が必要です」というエラーが起きてしまいます。
staticを宣言し、静的メソッドにしていることが原因と思われます。
しかし、静的メソッドにしないと、Form2の「Form1.draw(sender, e);」で、
「オブジェクト参照が必要です」というエラーが起きてしまします。
Form1、Form2のエラーを取り除く方法など御座いますでしょうか。
ご指導ご鞭撻の程よろしくお願い致します。
|