0

論理ゲートプログラムを実行しようとしています。クラス NOT でを作成しようとしていますPictureBox。問題は、form1 内で create メソッドを呼び出してもPictureBox表示されず、リスト項目をクリックしても表示されないことです。FindForm()問題は、メソッドを使用しているにもかかわらず、それが form1 にあることを知らないことです。フォームから呼び出す

---Source Code for NoT class---

class NOT: Shape
{
    PictureBox px = new PictureBox();    
    Image img = Image.FromFile(@"C:\NOT.png");
    public NOT(int x, int y) : base(x,y)
    {
        px.FindForm();
        px.Visible = true;
        px.Enabled = true;

    }

    public override void CreatePicture()
    {
        Point p1 = new Point(xx, yy);
        px.Image = img;
        px.Location = p1;

        px.Show();      
    }
}


---Source code for the SHape Class---
abstract class Shape
{
    protected int xx, yy;    //private Point location;

    public Shape(int X, int Y)
    {
        xx = X;
        yy = Y;
    }

    public abstract void CreatePicture();
}
private void nOTToolStripMenuItem_Click(object sender, EventArgs e)
    {
        nt.CreatePicture();


    }
NOT nt = new NOT(12,23);

4

3 に答える 3

2

画像ボックスをformsControlsコレクションに追加して、フォームに関連付ける必要があります。呼び出すFindForm()と、現在割り当てられているフォームのみが返されます。あなたの場合、それは戻ってきnullます。

public override void CreatePicture(Form form)
{
    Point p1 = new Point(xx, yy);
    px.Image = img;
    px.Location = p1;

    form.Controls.Add(px);

    px.Show();      
}
于 2012-06-08T15:16:38.570 に答える
1

pictureBox を追加する必要があります。たとえば、PictureBox がパネルにある場合:

panel.Controls.Add();

それがあなたが入れたばかりの形であればControls.Add();

それが役に立てば幸い。

于 2012-06-08T15:20:22.967 に答える
0

描画するには、PictureBox をフォームに配置する必要があります。

PictureBox px = new PictureBox();
....
px.Parent = YouFormForExample;//Component who is draw this picture box
于 2012-06-08T15:19:17.270 に答える