проблемы с вызовом событий мыши и вводом окна сообщения! - PullRequest
0 голосов
/ 18 июня 2011

Мой вопрос кажется немного длинным, но я знаю, что решение - это небольшие исправления в моем коде. Я реализую последовательность из трех событий мыши и событие рисования в моей форме 1

pictureBox1_MouseDown, pictureBox1_MouseMove, pictureBox1_Paint, pictureBox1_MouseUp.

код должен работать следующим образом: когда я щелкаю мышью, перетаскиваю ее и отпускаю кнопку в нужной точке, тогда должно появиться настраиваемое окно сообщения, которое принимает входные значения. поэтому я создал форму(form2), который появляется как окно сообщения.вот мой код формы 1, вы можете понять проблему после просмотра кода.

form1:

     private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        // "e.X" and "e.Y" are used to get MousePositionX and MousePositionY
        rect = new Rectangle(0, 0, e.X, e.Y);
        pictureBox1.Invalidate();
    } 
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        // This makes sure that the left mouse button is pressed.
        if (e.Button == MouseButtons.Left)
        {
            // Draws the rectangle as the mouse moves

            rect.Width = e.X;
            rect.Height = e.Y;
        }
        pictureBox1.Invalidate();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {

        using (Pen pen = new Pen(Color.Red, 2))
        {
            e.Graphics.DrawRectangle(pen, rect);
        }
    }


    private WindowsFormsApplication2.Form2 _form2 = new WindowsFormsApplication2.Form2();

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        DialogResult dialogresult = _form2.ShowDialog(this);


        if (dialogresult == DialogResult.OK)
        {
            try
            {
                for (int i = 0; i < 2; i++)
                {
                    l[i] = e.X;
                    m[i] = e.Y;
                }
            }
            catch (Exception ex)
            {
            }
        }
    }

проблемы здесь:

1) Согласнокод, когда мы перетаскиваем мышь, появляется прямоугольник и в месте, где мы оставляем кнопку мыши, появляется окно сообщения, теперь это окно сообщения (form2) не может прочитать входные значения, так как я не знаю, как соединить кнопки OK и CANCElиз form2 с form1.После ввода и нажатия OK прямоугольник должен исчезнуть, но здесь это не происходит.

2) Мне нужно только ввести вход только два раза, т.е. я выполняю предыдущую последовательность действий (все события мыши и событие рисования) только дважды, поэтому я написал цикл FOR соответственно. Но проблема в том,окно сообщения (form2) запускается каждый раз, когда я отпускаю кнопку мыши. Это вызывает серьезную проблему, поскольку мне нужно реализовать событие mousedoubleclick после ввода двух входных данных.

Любой, пожалуйста, скажите, пожалуйста, необходимые исправления, которые я должен сделать.заранее спасибо.

1 Ответ

1 голос
/ 18 июня 2011

Я не уверен, что вы имеете в виду под "соединить кнопки OK и ОТМЕНА формы2 с формой1"?

Вам не нужно ничего "подключать". Все, что вам нужно, это две кнопки на форме 2 («ОК» и «Отмена»), и в каждом методе _click вам нужно this.DialogResult = DialogResult.OK; для «ОК» и this.DialogResult = DialogResult.Cancel; для «Отмена».

Затем вы продолжаете свое «если» в Форме 1.

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            DialogResult dialogresult = _form2.ShowDialog(this);

            if (dialogresult == DialogResult.OK)
            {                
                rect.Width = 0;
                rect.Height = 0;
                pictureBox1.Invalidate();
            }
        } 

Это удалит прямоугольник. Я не знаю, хорошее ли это решение, но оно работает.

Ваш цикл внутри метода не может работать так, как вы хотите: каждый раз, когда вы вызываете pictureBox1_MouseUp и достигаете цикла «i», будет установлено значение «0», а затем цикл запускается.
Вам нужен int TwoClicks = 0 в конструкторе Form1. И вы должны изменить pictureBox1_MouseUp соответственно:

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (TwoClicks < 2)
            {
            TwoClicks++;
            DialogResult dialogresult = _form2.ShowDialog(this);

            if (dialogresult == DialogResult.OK)
            {                
                rect.Width = 0;
                rect.Height = 0;
                pictureBox1.Invalidate();
            }
            }
        }

Не стесняйтесь задавать любые вопросы (и опишите вашу первую проблему, если я не понял ее правильно).

...