【问题标题】:How do I change the drag threshold in a windows forms application?如何更改 Windows 窗体应用程序中的拖动阈值?
【发布时间】:2014-06-17 16:23:29
【问题描述】:

我在选择对象时遇到了用户拖动对象的问题。我尝试了几种使用鼠标事件设置不太敏感的阈值的方法。对于example

我认为它们不工作主要是因为我使用的是 Piccolo 图形引擎。

我知道这可以通过注册表来完成,但我不想弄乱我的用户注册表项。

替代方法似乎是使用带有SystemParametersInfo; 以及 SPI_SETDRAGHEIGHT 和 SPI_SETDRAGWIDTH 参数的 pinvoke。

我知道如何调用它,

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

而且我知道uiAction 参数值是,

SPI_SETDRAGHEIGHT = 0x004D

SPI_SETDRAGWIDTH = 0x004C

我知道uiParam 是宽度或高度。

除此之外,我被困住了。我真的不明白这些东西,也不知道如何设置最后两个参数。

有 C++(?) 代码here

但我对 C 变体并将它们转换为 C# 的知识令人遗憾。

那么有人可以帮我在我的应用程序中设置拖动阈值吗?

【问题讨论】:

  • 我怀疑 Piccolo 实现了它自己的拖放功能,如果你想依赖他们的库,那么你就会遇到 Piccolo 使用的任何阈值。 Piccolo 可能不允许(也可能不允许)通过注册表设置修改阈值。如果该设置可配置,您可以询问其他 Piccolo 用户。
  • @RogerN 你是对的,拖动处理程序似乎忽略了我所有的努力并影响了它。这就是为什么我想走 pinvoke 路线
  • Pass IntPtr.Zero,该参数不用于此设置。最后一个参数是 2,它让每个正在运行的程序都知道您更改了系统设置。是的,用户会讨厌你,确保你的卸载程序是可靠的。如果您不想更改源代码,则使用开源软件没有多大意义:)
  • 谢谢汉斯。我希望在应用关闭之前读取该值然后将其重置。

标签: c# winforms drag-and-drop


【解决方案1】:

我检查了 Piccolo 源代码,发现拖动阈值取决于您的系统设置,因此在这里使用 PInvoke 调用 SystemParametersInfo 对您没有帮助。但是,可以通过更改PDragSequenceEventHandler 对象的MinDragStartDistance 属性来配置阈值。默认值为 0,这可能解释了为什么您的用户对它过于敏感感到沮丧。

不过,我没有使用 Piccolo 的经验,因此我无法真正评论如何访问该特定属性。

【讨论】:

  • 谢谢。我找到了该属性并且它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 2011-07-01
  • 2012-05-11
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多