Как изменить порог перетаскивания в приложении Windows Forms?

1

У меня проблема с перетаскиванием объектов при их выборе. Я попробовал несколько методов, используя события мыши, чтобы установить менее чувствительный порог. Например.

Они не работают в первую очередь, я думаю, потому что я использую графический движок Piccolo.

Я знаю, что это можно сделать через реестр, но я не хочу вмешиваться в записи реестра пользователей.

Альтернативой, по-видимому, является использование pinvoke с SystemParametersInfo; и параметры SPI_SETDRAGHEIGHT и SPI_SETDRAGWIDTH.

Я знаю, как его вызывать,

[DllImport("user32.dll", SetLastError = true)]
static extern bool SystemParametersInfo(int uiAction, int uiParam, IntPtr pvParam, int fWinIni);

И я знаю, что uiAction параметров uiAction,

SPI_SETDRAGHEIGHT = 0x004D

SPI_SETDRAGWIDTH = 0x004C

Я знаю, что uiParam - это ширина или высота.

Помимо этого я застрял. Я действительно не понимаю этого материала и понятия не имею, как установить последние два параметра.

Существует C++ (?) Код здесь.

Но мои знания о вариантах C и их преобразование в С# являются печальными.

Так может кто-нибудь, пожалуйста, помогите мне установить порог перетаскивания перетаскивания в моем приложении?

  • 0
    Я подозреваю, что Piccolo реализует свою собственную функцию перетаскивания и что, если вы хотите полагаться на их библиотеку, вы застряли на том пороговом значении, которое использует Piccolo. Piccolo не может (и, вероятно, не позволяет) изменять пороговое значение в настройках реестра. Вы можете спросить других пользователей Piccolo, можно ли настроить этот параметр.
  • 0
    @RogerN вы правы, и обработчик перетаскивания, похоже, игнорировал все мои усилия и их влияние. Это действительно, почему я хотел бы пойти по маршруту Pinvoke
Показать ещё 2 комментария
Теги:
winforms
drag-and-drop

1 ответ

1
Лучший ответ

Я проверил исходный код Piccolo и обнаружил, что порог перетаскивания не зависит от ваших системных настроек, поэтому использование PInvoke для вызова SystemParametersInfo не поможет вам здесь. Однако порог настраивается путем изменения MinDragStartDistance свойства PDragSequenceEventHandler объекта. Значение по умолчанию равно 0, что, вероятно, объясняет, почему ваши пользователи разочарованы тем, что они слишком чувствительны.

Однако у меня нет опыта использования Piccolo, поэтому я не могу прокомментировать, как получить доступ к этому конкретному свойству.

  • 0
    Спасибо. Я нашел это свойство, и оно работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню