none
Код исполняется повторно вместо одного раза. RRS feed

  • Вопрос

  • PictureBox picture;
            int X;
    
            public Form1()
            {
                InitializeComponent();
                for (int i = 0; i < 5; i++)
                {
                    picture = new PictureBox();
                    picture.Parent = this;
                    picture.BackColor = Color.Black;
                    picture.Location = new Point(X, 10);
                    X += picture.Width + 10;
                }
                X = 0;
                Controls.OfType<PictureBox>().ToList().ForEach(l => l.MouseDown += Create_Picture);
            }
    
            private void Create_Picture(object sender, EventArgs e)
            {
                Controls.OfType<PictureBox>().ToList().ForEach(l => l.MouseDown += Create_Picture);
                picture = new PictureBox();
                picture.Parent = this;
                picture.BackColor = Color.Black;
                picture.Location = new Point(X, 150);
                X += picture.Width + 10;
            }

    При одном нажатии на элемент picture на форме после компиляции, должен появляться один элемент picture, но появляются больше, 1, потом 2, потом 4 и так увеличивается.

    В чём проблема и как исправить чтоб появлялся один элемент picture.


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

Ответы

  • Вы при каждом клике добавляете подписку на MouseDown для одного и того же элемента. В результате у вас такое поведение. Уберите подписку на событие в цикле из Create_Picture. Если нужно по нажатию на картинку добавлять ещё одну картинку, то просто подписывайтесь на MouseDown у новосозданного элемента.

    private void Create_Picture(object sender, EventArgs e) { picture = new PictureBox(); picture.Parent = this; picture.BackColor = Color.Black; picture.Location = new Point(X, 150);
    picture.MouseDown += Create_Picture X += picture.Width + 10; }


    • Помечено в качестве ответа Doctor Gordon 5 мая 2012 г. 16:43
    Отвечающий

Все ответы

  • Вы при каждом клике добавляете подписку на MouseDown для одного и того же элемента. В результате у вас такое поведение. Уберите подписку на событие в цикле из Create_Picture. Если нужно по нажатию на картинку добавлять ещё одну картинку, то просто подписывайтесь на MouseDown у новосозданного элемента.

    private void Create_Picture(object sender, EventArgs e) { picture = new PictureBox(); picture.Parent = this; picture.BackColor = Color.Black; picture.Location = new Point(X, 150);
    picture.MouseDown += Create_Picture X += picture.Width + 10; }


    • Помечено в качестве ответа Doctor Gordon 5 мая 2012 г. 16:43
    Отвечающий
  • Doctor Gordon, спасибо что отметили ответ, если вы раньше сами нашли решение - то можно было выложить его и тоже отметить как ответ.


    Для связи [mail]