0

現時点では、マウスの左ボタンを押すと表示される黒い画像ボックスを作成しようとしています。ただし、クリックしても何も起こりません。

誰かが私が間違っていることを見てもらえますか?

私の画像クラスでは:

 PictureBox _pictureBoxTag = new PictureBox();

    private List<PictureBox> _displayedImage = new List<PictureBox>();

    public void AddPictureBox()
    {
        try
        {
            PictureBox _picBox = new PictureBox();
            _picBox.Size = new Size(100, 100);
            _picBox.SizeMode = PictureBoxSizeMode.StretchImage;
            _picBox.BackColor = Color.Black;
            _picBox.Location = new Point(100, 100);
            _displayedImage.Add(_picBox);



        }
        catch (Exception e)
        {
            Trace.WriteLine(e.Message);
        }
    }

次に、 Form1.cs クラスで

   HV_Image _testImage;
_testImage = new HV_Image();
  private void MouseDown( object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                _testImage.AddPictureBox();
                Trace.WriteLine("Picture box added");
            }

            Trace.WriteLine("Mouse Click");
        }

私の考えでは、画像クラスには、画像ボックスを作成するために必要な情報が入力された画像ボックスのリストが含まれている必要があります。たとえば、サイズ、色、場所などです。その後、Form1.cs クラスで関数を呼び出すだけで描画されます。

私の方法がひどい場合、またはうまくいかない場合、これを行うことができる別の方法はありますか?

4

2 に答える 2

0

新しい PictureBox をフォームのコントロール コレクションに追加しません。

AddPictureBox から新しく作成されたピクチャ ボックスを返し、フォームのコレクションに追加する必要があります。

public PictureBox AddPictureBox()
{
    try
    {
        PictureBox _picBox = new PictureBox();
        ......
        return _picBox;
    }
    catch (Exception e)
    {
        Trace.WriteLine(e.Message);
        return null;
    }
}


private void MouseDown( object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        PictureBox pic = _testImage.AddPictureBox();
        if(pic != null)
        {
            this.Controls.Add(pic);
            Trace.WriteLine("Picture box added");
    }
} 

または、フォームのインスタンスを AddPictureBox メソッドに渡します

public void AddPictureBox(Form f)
{
    try
    {
        PictureBox _picBox = new PictureBox();
        ......
        f.Controls.Add(_picBox);
    }
    catch (Exception e)
    {
        Trace.WriteLine(e.Message);
    }
}
于 2013-02-01T10:59:01.763 に答える