将多个PictureBox添加到C#表单

时间:2019-01-02 19:44:10

标签: c# forms constructor picturebox

我试图将几张音乐笔记的图片(使用PictureBox)添加到Music Staff表格中。

在某个鼠标事件(MouseUp)中,将创建一个音符,并且该音符应出现在屏幕上。但是,仅当创建第一个音符时,图像才会出现在屏幕上。对于第一个之后创建的所有其他音符,图像不会显示。

在以下方法中,创建了音符:

let image = MPSImage(texture: myTexture, featureChannels: 4)

创建便笺后,便会将其发送到MusicNote构造函数:

private void Key_MouseUp(object sender, MouseEventArgs e)
    {
        foreach (MusKey mk in panel1.Controls)
        {
            if (sender == mk) //true for the specific key pressed on the Music Keyboard
            {
                if (e.Button == MouseButtons.Left)
                {
                    timer1.Enabled = false;
                    sp.Stop();
                    string bNoteShape = null;

                    // ticks -> milliseconds
                    if (count >= 16)
                    {
                        bNoteShape = "SemiBreve";
                        duration = 1024;
                    }
                    else if (count >= 8 && count <= 15)
                    {
                        bNoteShape = "DotMinim";
                        duration = 768;
                    }
                    else if (count >= 4 && count <= 7)
                    {
                        bNoteShape = "Crotchet";
                        duration = 384;
                    }
                    else if (count >= 2 && count <= 3)
                    {
                        bNoteShape = "Quaver";
                        duration = 128;
                    }
                    else
                    {
                        bNoteShape = "Semi-Quaver";
                        duration = 90; //63 is too short
                    }

                    MusicNote mn = new MusicNote(mk.getMusicNote(), duration, bNoteShape, mk.getNote());
                    Notes.Add(mn);
                    mn.picturebox1.Location = new Point(xLoc1, yLoc1);

                    panel2.Controls.Add(mn.picturebox1); //adding MusicNote component to MusicStaff (panel2) collection

                }
            }
        }
    }

我尝试通过构造函数初始化位置(并递增xLoc),也尝试使用Key_MouseUp方法的形式本身来初始化位置,但似乎都没有作用。

逻辑似乎是正确的,因为总是会加载第一个音符的图片,但是我不明白为什么第一个音符之后的其他每个音符都不会出现在屏幕上。

任何帮助将不胜感激,谢谢!

编辑:也许我可以用PictureBox替代音乐盒来存储音符?

1 个答案:

答案 0 :(得分:0)

好吧,您似乎没有初始化新的“ picturebox1”

    picturebox1 = new PictureBox(); //Add this
    picturebox1.ImageLocation = NoteImage_path + noteshape + ".bmp";

编辑: 好的,总的来说,我们需要做一些事情才能将控件添加到表单中。

  1. 新控件(看起来像您拥有的那样)2

  2. 将其添加到父控件(看起来像您拥有的那样)

    panel2.Controls.Add(mn.picturebox1); //将MusicNote组件添加到MusicStaff(panel2)集合中

  3. 重画控件- 当您调整表单大小时,这会自动发生,或者在将新控件添加到面板后,您可以调用refresh(在面板上)。

    panel2.Controls.Add(mn.picturebox1); 
    panel2.Refresh();