Динамическое рисование объектов на основе клика пользователя - PullRequest
0 голосов
/ 12 января 2011

Я использую Windows Forms в C #, и я хотел бы создать функцию, которая выполняет следующие действия:
Когда пользователь нажимает на форму, «что-то» будет нарисовано в месте, которое он щелкнул.

У меня есть два вопроса:
1) Есть ли лучший метод / рекомендуемый способ сделать это?Прямо сейчас я использую Windows EventHandler, который срабатывает при щелчке мыши, получает местоположение курсора, а затем рисует объект в этом месте.

2) Когда я рисую объект в месте «Курсор».Положение ", это на самом деле рисуется значительно дальше, чем где находится фактический курсор.(Он рисует это вниз и влево.) Есть ли какой-то тип преобразования, который необходимо выполнить на Cursor.Position, чтобы получить координаты экрана?

Ниже я продемонстрировал несколько упрощенных примеров кода.Вы видите, что я регистрирую форму в «Click» EventHandler.Затем, когда запускается EventHandler, я вызываю функцию, которая просто рисует метку на форме.

Заранее спасибо за вашу помощь.

MyForm myForm = new myForm();
myForm.Click += new System.EventHandler(this.MyForm_Click);

_

private void MyForm_Click(object sender, EventArgs e)
{
    Point p = Cursor.Position;    // Does this get the correct position?
    DrawObject(p);
}

private void DrawObject(Point p)
{
    Label l = new Label()
    l.Size = new System.Drawing.Size(300, 300);
    l.Text = "New Label";
    l.Location = p;
    this.Controls.Add(l);
}

1 Ответ

2 голосов
/ 12 января 2011

Вместо использования Cursor.Position следует подписаться на событие MouseClick . Это предоставит вам информацию о местоположении в самом обработчике.

Cursor.Position даст вам координаты в экранных координатах. Если вы хотите использовать его, вам нужно будет использовать PointToClient , чтобы отобразить его в координатное пространство вашей формы.

...