COM2ComponentEditor.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / ComponentModel / COM2Interop / COM2ComponentEditor.cs / 1305376 / 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.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK