Как мы можем получить местоположение относительно формы окна? - PullRequest
4 голосов
/ 24 февраля 2010

Я реализую приложение, которое может перетаскивать изображения на панели, и поэтому я хочу убедиться, что изображение размещено на панели, и оно будет видно целиком, когда оно будет удалено. В этом случае я хочу получить текущую позицию курсора, когда я делаю событие перетаскивания. Итак, как я могу получить местоположение курсора, связанное с панелью? Вот метод события панели перетаскивания.

private void panel1_DragDrop(object sender, DragEventArgs e)
{
    Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;

    if (c != null)
    {
        if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)
        {
            c.Location = this.panel1.PointToClient((new Point(e.X, e.Y)));**

            this.panel1.Controls.Add(c);
        }
    }  
}

1 Ответ

3 голосов
/ 24 февраля 2010

Вы можете получить координаты курсора, используя Cursor.Position, это даст вам экранные координаты. затем вы можете передать их в PointToClient(Point p)

Point screenCoords = Cursor.Position;
Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);

Хотя я вполне уверен, что DragEventArgs.X и DragEventArgs.Y уже являются экранными координатами. Ваша проблема, вероятно, заключается в

 if (e.X < 429 && e.X > 0 && e.Y<430 && e.Y>0)

Похоже, это будет проверка по координатам панели, тогда как e.X и e.Y - это координаты экрана в этой точке. Вместо этого перед тем, как проверять границы, передайте его в координаты панели:

 Point screenCoords = Cursor.Position;
 Point controlRelatedCoords = this.panel1.PointToClient(screenCoords);
 if (controlRelatedCoords.X < 429 && controlRelatedCoords.X > 0 && 
     controlRelatedCoords.Y < 430 && controlRelatedCoords.Y > 0)
 {

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...