| File: System\Windows\Forms\OLE\WrappingDataObject.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace System.Windows.Forms; /// <summary> /// Used to identify and wrap user provided data that isn't already a <see cref="DataObject"/> instance. /// </summary> internal sealed class WrappingDataObject : DataObject { private readonly bool _originalIsIDataObject; public WrappingDataObject(object data) : base(data) { // Don't wrap existing DataObject instances. Debug.Assert(data is not DataObject); _originalIsIDataObject = data is IDataObject; } internal override bool TryUnwrapUserDataObject([NotNullWhen(true)] out IDataObject? dataObject) { // We only want to unwrap IDataObject instances from users. if (_originalIsIDataObject) { return base.TryUnwrapUserDataObject(out dataObject); } // When we hand back our wrapper we're emulating what would happen via the native IDataObject proxy. // As the native interface has no concept of "autoConvert", we need to always consider it "true" // as our native IDataObject implementation would. dataObject = this; return true; } public override string[] GetFormats(bool autoConvert) // Always auto convert to emulate native IDataObject behavior. => base.GetFormats(autoConvert: true); public override bool GetDataPresent(string format, bool autoConvert) // Always auto convert to emulate native IDataObject behavior. => base.GetDataPresent(format, autoConvert: true); #pragma warning disable WFDEV005 // Type or member is obsolete [Obsolete] public override object? GetData(string format, bool autoConvert) // Always auto convert to emulate native IDataObject behavior. => base.GetData(format, autoConvert: true); #pragma warning restore WFDEV005 // Type or member is obsolete }