CallAs() public method

Calls method 'func' on object 'obj' which is of type 'type' passing parameters 'parameters'
public CallAs ( Type type, object obj, string func ) : object
type System.Type The type of 'obj'
obj object The object on which to excute function 'func'
func string The function to execute
return object
示例#1
0
        /// <summary>
        ///     Shows the dialog
        /// </summary>
        /// <param name="hWndOwner">Handle of the control to be parent</param>
        /// <returns>True if the user presses OK else false</returns>
        public bool ShowDialog(IntPtr hWndOwner)
        {
            bool flag;

            if (Environment.OSVersion.Version.Major >= 6)
            {
                var r = new Reflector("System.Windows.Forms");

                uint num             = 0;
                var  typeIFileDialog = r.GetType("FileDialogNative.IFileDialog");
                var  dialog          = r.Call(_ofd, "CreateVistaDialog");
                r.Call(_ofd, "OnBeforeVistaDialog", dialog);

                var options = (uint)r.CallAs(typeof(FileDialog), _ofd, "GetOptions");
                options |= (uint)r.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
                r.CallAs(typeIFileDialog, dialog, "SetOptions", options);

                var      pfde       = r.New("FileDialog.VistaDialogEvents", _ofd);
                object[] parameters = { pfde, num };
                r.CallAs2(typeIFileDialog, dialog, "Advise", parameters);
                num = (uint)parameters[1];
                try
                {
                    var num2 = (int)r.CallAs(typeIFileDialog, dialog, "Show", hWndOwner);
                    flag = 0 == num2;
                }
                finally
                {
                    r.CallAs(typeIFileDialog, dialog, "Unadvise", num);
                    GC.KeepAlive(pfde);
                }
            }
            else
            {
                var fbd = new FolderBrowserDialog
                {
                    Description         = Title,
                    SelectedPath        = InitialDirectory,
                    ShowNewFolderButton = false
                };

                if (fbd.ShowDialog(new WindowWrapper(hWndOwner)) != DialogResult.OK)
                {
                    return(false);
                }
                _ofd.FileName = fbd.SelectedPath;
                flag          = true;
            }

            return(flag);
        }
        /// <summary>
        /// Shows the dialog
        /// </summary>
        /// <param name="hWndOwner">Handle of the control to be parent</param>
        /// <returns>True if the user presses OK else false</returns>
        public bool ShowDialog(IntPtr hWndOwner)
        {
            bool flag = false;

            //if (Environment.OSVersion.Version.Major >= 6)
            //{
            var r = new Reflector("System.Windows.Forms");

            uint   num             = 0;
            Type   typeIFileDialog = r.GetType("FileDialogNative.IFileDialog");
            object dialog          = r.Call(ofd, "CreateVistaDialog");

            r.Call(ofd, "OnBeforeVistaDialog", dialog);

            uint options = (uint)r.CallAs(typeof(System.Windows.Forms.FileDialog), ofd, "GetOptions");

            options |= (uint)r.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
            r.CallAs(typeIFileDialog, dialog, "SetOptions", options);

            object pfde = r.New("FileDialog.VistaDialogEvents", ofd);

            object[] parameters = new object[] { pfde, num };
            r.CallAs2(typeIFileDialog, dialog, "Advise", parameters);
            num = (uint)parameters[1];
            try
            {
                int num2 = (int)r.CallAs(typeIFileDialog, dialog, "Show", hWndOwner);
                flag = 0 == num2;
            }
            finally
            {
                r.CallAs(typeIFileDialog, dialog, "Unadvise", num);
                GC.KeepAlive(pfde);
            }

            /*}
             * else
             * {
             *      var fbd = new FolderBrowserDialog();
             *      fbd.Description = this.Title;
             *      fbd.SelectedPath = this.InitialDirectory;
             *      fbd.ShowNewFolderButton = false;
             *      if (fbd.ShowDialog(new WindowWrapper(hWndOwner)) != DialogResult.OK) return false;
             *      ofd.FileName = fbd.SelectedPath;
             *      flag = true;
             * }*/

            return(flag);
        }
        /// <summary>
        /// Shows the dialog
        /// </summary>
        /// <param name="hWndOwner">Handle of the control to be parent</param>
        /// <returns>True if the user presses OK else false</returns>
        public bool ShowDialog(IntPtr hWndOwner)
        {
            bool flag = false;

            if (PlatformHelper.GetPlatform() == Platform.OsX ||
                PlatformHelper.GetPlatform() == Platform.Linux ||
                Environment.OSVersion.Version.Major < 6)
            {
                flag = FallBackToFolderBrowserDialog(hWndOwner);
            }
            else
            {
                var r = new Reflector("System.Windows.Forms");

                uint num             = 0;
                Type typeIFileDialog = r.GetType("FileDialogNative.IFileDialog");
                if (typeIFileDialog == null)
                {
                    flag = FallBackToFolderBrowserDialog(hWndOwner);
                }
                else
                {
                    object dialog = r.Call(ofd, "CreateVistaDialog");
                    r.Call(ofd, "OnBeforeVistaDialog", dialog);

                    uint options = (uint)r.CallAs(typeof(System.Windows.Forms.FileDialog), ofd, "GetOptions");
                    options |= (uint)r.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
                    r.CallAs(typeIFileDialog, dialog, "SetOptions", options);

                    object   pfde       = r.New("FileDialog.VistaDialogEvents", ofd);
                    object[] parameters = new object[] { pfde, num };
                    r.CallAs2(typeIFileDialog, dialog, "Advise", parameters);
                    num = (uint)parameters[1];
                    try
                    {
                        int num2 = (int)r.CallAs(typeIFileDialog, dialog, "Show", hWndOwner);
                        flag = 0 == num2;
                    }
                    finally
                    {
                        r.CallAs(typeIFileDialog, dialog, "Unadvise", num);
                        GC.KeepAlive(pfde);
                    }
                }
            }

            return(flag);
        }
示例#4
0
        public bool ShowDialog(IntPtr hWndOwner)
        {
            if ((Environment.OSVersion.Version.Major >= 6) && !this.UseOldDialog)
            {
                var    reflector = new Reflector("System.Windows.Forms");
                uint   num       = 0;
                var    type      = reflector.GetType("FileDialogNative.IFileDialog");
                object obj2      = reflector.Call(this.ofd, "CreateVistaDialog", new object[0]);
                reflector.Call(this.ofd, "OnBeforeVistaDialog", new object[] { obj2 });
                uint num2 = (uint)reflector.CallAs(typeof(FileDialog), this.ofd, "GetOptions", new object[0]);
                num2 |= (uint)reflector.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
                reflector.CallAs(type, obj2, "SetOptions", new object[] { num2 });
                object   obj3       = reflector.New("FileDialog.VistaDialogEvents", new object[] { this.ofd });
                object[] parameters = new object[] { obj3, num };
                reflector.CallAs2(type, obj2, "Advise", parameters);
                num = (uint)parameters[1];
                try
                {
                    int num3 = (int)reflector.CallAs(type, obj2, "Show", new object[] { hWndOwner });
                    return(0 == num3);
                }
                finally
                {
                    reflector.CallAs(type, obj2, "Unadvise", new object[] { num });
                    GC.KeepAlive(obj3);
                }
            }
            var ex = new FolderBrowserDialogEx();

            ex.Description           = this.Title;
            ex.SelectedPath          = this.InitialDirectory;
            ex.ShowNewFolderButton   = true;
            ex.ShowEditBox           = true;
            ex.ShowFullPathInEditBox = true;
            if (ex.ShowDialog(new WindowWrapper(hWndOwner)) != DialogResult.OK)
            {
                return(false);
            }
            ofd.FileName = ex.SelectedPath;
            return(true);
        }
示例#5
0
        /// <summary>
        /// Shows the dialog
        /// </summary>
        /// <param name="hWndOwner">Handle of the control to be parent</param>
        /// <returns>True if the user presses OK else false</returns>
        public bool ShowDialog(IntPtr hWndOwner)
        {
            bool flag = false;

            if (Environment.OSVersion.Version.Major >= 6)
            {
                //try {
                var r = new Reflector("System.Windows.Forms");

                uint   num             = 0;
                Type   typeIFileDialog = r.GetType("FileDialogNative.IFileDialog");
                object dialog          = r.Call(ofd, "CreateVistaDialog");
                r.Call(ofd, "OnBeforeVistaDialog", dialog);

                uint options = (uint)r.CallAs(typeof(System.Windows.Forms.FileDialog), ofd, "GetOptions");
                options |= (uint)r.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS");
                r.CallAs(typeIFileDialog, dialog, "SetOptions", options);

                object   pfde       = r.New("FileDialog.VistaDialogEvents", ofd);
                object[] parameters = new object[] { pfde, num };
                r.CallAs2(typeIFileDialog, dialog, "Advise", parameters);
                num = (uint)parameters[1];
                try {
                    int num2 = (int)r.CallAs(typeIFileDialog, dialog, "Show", hWndOwner);
                    flag = 0 == num2;
                } finally {
                    r.CallAs(typeIFileDialog, dialog, "Unadvise", num);
                    GC.KeepAlive(pfde);
                }
                //} catch {
                //	flag = oldFileBrowser(hWndOwner, flag);
                //}
            }
            else
            {
                flag = oldFileBrowser(hWndOwner, flag);
            }

            return(flag);
        }
示例#6
0
        /// <summary>Runs a common dialog box modally with the specified owner.</summary>
        /// <param name="owner">Any object that implements IWin32Window that represents
        ///     the top-level window that will own the modal dialog box.</param>
        /// <returns>DialogResult.OK if the user clicks OK in the dialog box; DialogResult.Cancel otherwise.</returns>
        public virtual DialogResult ShowDialog(IWin32Window owner)
        {
            /* Quote from the original post:
             *  Being a Vista-style dialog box the dialog can only be shown on Vista or later (not WinNT, XP or 2003).
             *  The code gracefully reverts to show the old-style dialog if OS is not major version 6 or later.
             */
            if (Environment.OSVersion.Version.Major >= 6)
            {
                uint   num             = 0;
                Type   typeIFileDialog = reflector.GetType("FileDialogNative.IFileDialog");
                object dialog          = reflector.Call(this.dialog, "CreateVistaDialog");
                reflector.Call(this.dialog, "OnBeforeVistaDialog", dialog);

                if (this.shouldSetOptions)
                {
                    uint options = (uint)reflector.CallAs(typeof(FileDialog), this.dialog, "GetOptions");
                    this.SetOptions(ref options);
                    reflector.CallAs(typeIFileDialog, dialog, "SetOptions", options);
                }

                object   pfde       = reflector.New("FileDialog.VistaDialogEvents", this.dialog);
                object[] parameters = new object[] { pfde, num };
                reflector.CallAs2(typeIFileDialog, dialog, "Advise", parameters);
                num = (uint)parameters[1];

                try     {
                    var result = (int)reflector.CallAs(typeIFileDialog, dialog, "Show", owner?.Handle ?? IntPtr.Zero);
                    return(result == 0 ? DialogResult.OK : DialogResult.Cancel);
                } finally {
                    reflector.CallAs(typeIFileDialog, dialog, "Unadvise", num);
                    GC.KeepAlive(pfde);
                }
            }
            else
            {
                return(this.ShowDialogFallback(owner));
            }
        }