System.Windows.Forms
中的标准枚举:
[Flags]
public enum DragDropEffects
{
Scroll = -2147483648,
//
// Summary:
// The combination of the System.Windows.DragDropEffects.Copy, System.Windows.Forms.DragDropEffects.Link,
// System.Windows.Forms.DragDropEffects.Move, and System.Windows.Forms.DragDropEffects.Scroll
// effects.
All = -2147483645,
None = 0,
Copy = 1,
Move = 2,
Link = 4,
}
Scroll有一个奇怪的价值,你不觉得吗?
据我所知,这些价值都来自"the old times" of COM\OLE DROPEFFECT ......但他们为什么一开始就这样选择呢?作者是否试图保留8到0x80000000之间的间隔?它是以某种方式使用或是否有一个有趣的故事背后或它只是YAGNI原则的另一个长寿说明?
答案 0 :(得分:1)
它是一个状态标志,与主要丢弃效果(复制/移动/链接)分开。离开房间以备将来的跌落效果时,选择高位允许一个技巧,例如检查值是否为负。与HRESULT或GetAsyncKeyState返回值相同的想法。
答案 1 :(得分:0)
是的,它看起来像某种“有趣”的黑客。常识会建议使用8,但也许有一些Windows版本相关的原因,为什么8不能使用,所以作者使用-2147483645(-0x80000000)代替。这不是 不正常的一个数字 - 无论谁编写它只是从高有效端而不是低有效端开始使用二进制'1'。
也许滚动在其他一组拖放效果中被认为是复制/移动/链接,因此作者希望将它放在单词的另一端,以及任何其他类似的不同效果。
也许在某个地方有一些可怕的逻辑来测试DragDropEffects变量是否大于零(意图是“任何不是非”的东西),而Scroll不应该落在那个范围内?
有点神秘。至少你认为他们会把常量放在十六进制中,以显示它不只是一些完全随机数。答案 2 :(得分:0)
这样可以快速检查> 0以便知道是否正在调用复制,移动或链接。它不包括无以及滚动。