c# непроходимая стена

198
09 ноября 2017, 03:02

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

 private void label6_MouseEnter(object sender, EventArgs e)
        {
            Cursor.Position = new Point(Cursor.Position.X-3,Cursor.Position.Y);
        }

Чтобы при попытке пересечь стену курсор смещался на несколько пикселей обратно. Однако это работает только при условии, что я веду курсор плавно, если резко провести через лейбл, то ничего не происходит. Подскажите, почему программа работает неправильно или же лучший способ реализации (чтобы курсор не мог преодалеть объект, а останавливался перед ним). Заранее спасибо.

Вариант из ответа, всё равно при резком движении программа не срабатывает:

 private void MoveCursor()
    {
        // Set the Current cursor, move the cursor's Position,
        // and set its clipping rectangle to the form. 
        this.Cursor = new Cursor(Cursor.Current.Handle);
        Cursor.Position = new Point(Cursor.Position.X - 5, Cursor.Position.Y);
        Cursor.Clip = new Rectangle(this.Location, this.Size);
    }
    private void label1_MouseEnter(object sender, EventArgs e)
    {
        MoveCursor();
    }
Answer 1

Скорее всего это происходит из-за того, что при "быстром, резком" движении курсора система не успевает пересчитывать координаты и условие просто не успевают выполниться.

Попробуйте задать курсору свойство Cursor.Clip:

private void MoveCursor()
{
   // Set the Current cursor, move the cursor's Position,
   // and set its clipping rectangle to the form. 
   this.Cursor = new Cursor(Cursor.Current.Handle);
   Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50);
   Cursor.Clip = new Rectangle(this.Location, this.Size);
}
READ ALSO
Создание нескольких террайнов в юнити

Создание нескольких террайнов в юнити

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

255
Отправка проактивного сообщения в Microsoft Bot Framework

Отправка проактивного сообщения в Microsoft Bot Framework

Пытаюсь по таймеру из класса Синглтона отправить проактивное сообщение по ранее созранённым в БД ConversationReference

359
Индекс элемента в IQueryable

Индекс элемента в IQueryable

Доброго времени суток, собственно сабж в заголовкеПробовал юзать метод ToList(), но

236