Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2ComponentEditor.cs / 1 / COM2ComponentEditor.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms.ComponentModel.Com2Interop {
using System.Runtime.Remoting;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System;
using System.Collections;
using Microsoft.Win32;
using System.Windows.Forms.Design;
internal class Com2ComponentEditor : WindowsFormsComponentEditor {
public static bool NeedsComponentEditor(object obj) {
if (obj is NativeMethods.IPerPropertyBrowsing) {
// check for a property page
Guid guid = Guid.Empty;
int hr = ((NativeMethods.IPerPropertyBrowsing)obj).MapPropertyToPage(NativeMethods.MEMBERID_NIL, out guid);
if ((hr == NativeMethods.S_OK) && !guid.Equals(Guid.Empty)) {
return true;
}
}
if (obj is NativeMethods.ISpecifyPropertyPages) {
try {
NativeMethods.tagCAUUID uuids = new NativeMethods.tagCAUUID();
try {
((NativeMethods.ISpecifyPropertyPages)obj).GetPages(uuids);
if (uuids.cElems > 0) {
return true;
}
}
finally {
if (uuids.pElems != IntPtr.Zero) {
Marshal.FreeCoTaskMem(uuids.pElems);
}
}
}
catch {
}
return false;
}
return false;
}
[
SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters") // This was shipped in Everett.
]
public override bool EditComponent(ITypeDescriptorContext context, object obj, IWin32Window parent) {
IntPtr handle = (parent == null ? IntPtr.Zero : parent.Handle);
// try to get the page guid
if (obj is NativeMethods.IPerPropertyBrowsing) {
// check for a property page
Guid guid = Guid.Empty;
int hr = ((NativeMethods.IPerPropertyBrowsing)obj).MapPropertyToPage(NativeMethods.MEMBERID_NIL, out guid);
if (hr == NativeMethods.S_OK) {
if (!guid.Equals(Guid.Empty)) {
object o = obj;
SafeNativeMethods.OleCreatePropertyFrame(new HandleRef(parent, handle), 0, 0, "PropertyPages", 1, ref o, 1, new Guid[]{guid}, Application.CurrentCulture.LCID, 0, IntPtr.Zero);
return true;
}
}
}
if (obj is NativeMethods.ISpecifyPropertyPages) {
bool failed = false;
Exception failureException;
try {
NativeMethods.tagCAUUID uuids = new NativeMethods.tagCAUUID();
try {
((NativeMethods.ISpecifyPropertyPages)obj).GetPages(uuids);
if (uuids.cElems <= 0) {
return false;
}
}
catch {
return false;
}
try {
object o = obj;
SafeNativeMethods.OleCreatePropertyFrame(new HandleRef(parent, handle), 0, 0, "PropertyPages", 1, ref o, uuids.cElems, new HandleRef(uuids, uuids.pElems), Application.CurrentCulture.LCID, 0, IntPtr.Zero);
return true;
}
finally {
if (uuids.pElems != IntPtr.Zero) {
Marshal.FreeCoTaskMem(uuids.pElems);
}
}
}
catch (Exception ex1) {
failed = true;
failureException = ex1;
}
if (failed) {
String errString = SR.GetString(SR.ErrorPropertyPageFailed);
IUIService uiSvc = (context != null) ? ((IUIService) context.GetService(typeof(IUIService))) : null;
if (uiSvc == null) {
RTLAwareMessageBox.Show(null, errString, SR.GetString(SR.PropertyGridTitle),
MessageBoxButtons.OK, MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1, 0);
}
else if (failureException != null) {
uiSvc.ShowError(failureException, errString);
}
else {
uiSvc.ShowError(errString);
}
}
}
return false;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SmiSettersStream.cs
- HandledMouseEvent.cs
- ConfigXmlSignificantWhitespace.cs
- GridViewCommandEventArgs.cs
- CodeGroup.cs
- AnnotationResourceChangedEventArgs.cs
- Errors.cs
- QilXmlWriter.cs
- IteratorDescriptor.cs
- SubqueryRules.cs
- indexingfiltermarshaler.cs
- WebBrowserDocumentCompletedEventHandler.cs
- ToolStripRenderEventArgs.cs
- DataGridCell.cs
- LineProperties.cs
- Visual3DCollection.cs
- RemotingService.cs
- RuntimeHelpers.cs
- UpdatePanel.cs
- XmlNamespaceMappingCollection.cs
- StringPropertyBuilder.cs
- XmlDataLoader.cs
- AppDomainManager.cs
- Misc.cs
- SqlRowUpdatedEvent.cs
- DataGridPreparingCellForEditEventArgs.cs
- RSAProtectedConfigurationProvider.cs
- SqlLiftIndependentRowExpressions.cs
- FlowNode.cs
- Hyperlink.cs
- SubstitutionResponseElement.cs
- PasswordRecovery.cs
- Compiler.cs
- SoapEnumAttribute.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- CompositeClientFormatter.cs
- isolationinterop.cs
- Helpers.cs
- DbDataSourceEnumerator.cs
- EditorPartCollection.cs
- AmbientLight.cs
- CacheManager.cs
- WriteFileContext.cs
- SoapSchemaMember.cs
- EntityDataReader.cs
- CommandField.cs
- BamlBinaryReader.cs
- StringInfo.cs
- MobilePage.cs
- ArrangedElementCollection.cs
- ReplyChannelAcceptor.cs
- Single.cs
- Expander.cs
- BulletedListEventArgs.cs
- Panel.cs
- ProfileGroupSettingsCollection.cs
- CfgParser.cs
- PreviewPrintController.cs
- HttpCookieCollection.cs
- CustomGrammar.cs
- shaperfactory.cs
- BuildProviderCollection.cs
- UserControlBuildProvider.cs
- WindowsNonControl.cs
- ReachUIElementCollectionSerializer.cs
- DriveInfo.cs
- CrossSiteScriptingValidation.cs
- EmptyImpersonationContext.cs
- HtmlWindowCollection.cs
- ClientApiGenerator.cs
- ListManagerBindingsCollection.cs
- tooltip.cs
- ComponentSerializationService.cs
- NameScopePropertyAttribute.cs
- OrderByQueryOptionExpression.cs
- CollectionViewSource.cs
- NeutralResourcesLanguageAttribute.cs
- SessionSwitchEventArgs.cs
- FormatSettings.cs
- AgileSafeNativeMemoryHandle.cs
- TokenBasedSet.cs
- PriorityBinding.cs
- XmlBinaryReaderSession.cs
- ServiceReference.cs
- ImageSourceValueSerializer.cs
- WindowsGrip.cs
- ConfigurationLocation.cs
- FlowSwitch.cs
- StyleSheetComponentEditor.cs
- ZipIOExtraFieldElement.cs
- Size3DValueSerializer.cs
- FactoryMaker.cs
- Function.cs
- DataContractSerializerOperationBehavior.cs
- BitmapEffectGroup.cs
- SmiEventSink.cs
- Trace.cs
- Size.cs
- TreeViewHitTestInfo.cs
- InputMethodStateChangeEventArgs.cs