Добавление нескольких изображений в форму в C # - PullRequest
0 голосов
/ 04 января 2019

Поэтому я пытаюсь добавить в форму несколько изображений (музыкальных заметок) в форме PictureBox, но, несмотря на все мои усилия, отображается только первая музыкальная заметка, а все предыдущие музыкальные заметки - нет.

Событие Key_MouseUp (происходит, когда мышь поднимают после нажатия клавиши пианино):

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 > 15)
                    {
                        bNoteShape = "SemiBreve";
                        duration = 2000;
                    }
                    else if (count > 10 && count <= 15)
                    {
                        bNoteShape = "DotMinim";
                        duration = 1000;
                    }
                    else if (count > 5 && count <= 10)
                    {
                        bNoteShape = "Minim";
                        duration = 500;
                    }
                    else if (count > 2 && count <= 5)
                    {
                        bNoteShape = "Crotchet";
                        duration = 250;
                    }
                    else if (count >= 1.25 && count <= 2)
                    {
                        bNoteShape = "Quaver";
                        duration = 125;
                    }
                    else
                    {
                        bNoteShape = "Semi-Quaver";
                        duration = 63; 
                    }

                    MusicNote mn = new MusicNote(mk.getMusicNote(), duration, bNoteShape, mk.getNote());
                    Notes.Add(mn);

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

Класс и конструктор музыкальных нот:

class MusicNote : PictureBox
{
    public int notepitch;
    public int noteduration;
    public String noteshape;
    public String note;
    enum Accid { sharp, flat, sole };

    String NoteImage_path = "C:\\Users\\Luke Xuereb\\Documents\\University\\Year 2\\Semester 1\\Object Oriented Programming\\Piano Assignment\\Notes-Images\\";
    static int xLoc = 50;
    static int yLoc = 30;


    bool dragging = false;
    System.Timers.Timer timer1 = new System.Timers.Timer();

    public MusicNote(int iNotepitch, int iDuration, String iBnoteShape, String iNote)
    {
        notepitch = iNotepitch;
        noteduration = iDuration;
        noteshape = iBnoteShape;
        note = iNote;

        ImageLocation = NoteImage_path + noteshape + ".bmp";
        BackColor = Color.Beige;

        Location = new Point(xLoc, yLoc);
        xLoc += 15;
    }

Я несколько дней застрял на этой проблеме и совершенно уверен, что логика кода верна (именно поэтому всегда отображается первая музыкальная нота).

Есть ли проблема с отображением нескольких коробок с картинками? Новая картинка-папка создается каждый раз, когда создается новая музыкальная нота, поскольку класс MusicNote наследуется от класса PictureBox.

В качестве альтернативы, есть ли лучший вариант для моей текущей проблемы, вместо использования PictureBox?

Любая помощь будет высоко ценится. Спасибо!

...