Ich versuche zu lernen, wie benutzerdefinierte Steuerelemente, Symbolleisten erstellen. Mit .NET Reflector habe ich versucht, die ToolStripDesigner-Klasse "umzuschreiben" (im Moment bedeutet das nur, Code von Reflector in Visual Studio zu kopieren). Da es viele interne Klassen von System.Design.dll verwendet, musste ich einige weitere Klassen mit Reflector kopieren. In System.Windows.Forms.Design.OleDragDropHandler
Klasse, habe ich diesen Code gefunden:binäre Operationen auf Flags Enumeration
DragDropEffects allowedEffects = DragDropEffects.Move | DragDropEffects.Copy;
for (int i = 0; i < components.Length; i++)
{
InheritanceAttribute attribute = (InheritanceAttribute) TypeDescriptor.GetAttributes(components[i])[typeof(InheritanceAttribute)];
if (!attribute.Equals(InheritanceAttribute.NotInherited) && !attribute.Equals(InheritanceAttribute.InheritedReadOnly))
{
allowedEffects &= ~DragDropEffects.Move;
allowedEffects |= 0x4000000; // this causes error
}
}
Dragdropeffects-Enumeration ist öffentlich, mit diesen Bereichen:
[Flags]
public enum DragDropEffects {
Scroll = -2147483648, // 0x80000000
All = -2147483645, // 0x80000003
None = 0,
Copy = 1,
Move = 2,
Link = 4,
}
wie Sie sehen können, gibt es kein Feld mit dem Wert im ersten Stück gezeigt von Code (0x4000000). Auch dieser Code löst einen Fehler in VS: operator |= cannot be applied to operands of type System.Windows.Forms.DragDropEffects and int
Also meine Frage ist - wie hat das kompiliert? Oder hat .NET Reflector beim Dekompilierungsprozess einen Fehler gemacht? Gibt es eine Möglichkeit, es zu umgehen (ohne diese seltsame, unbenannte Information in allowedEffects
Variable zu verlieren)?
danke für die ILSpy, Zeit zu lernen mit einem anderen Werkzeug;) –