File: System\Windows\Forms\Controls\PropertyGrid\PropertyGridInternal\PropertyDescriptorGridEntry.ExceptionEditor.cs
Web Access
Project: src\src\System.Windows.Forms\src\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.
 
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms.Design;
 
namespace System.Windows.Forms.PropertyGridInternal;
 
internal partial class PropertyDescriptorGridEntry
{
    /// <summary>
    ///  The exception editor displays a message to the user.
    /// </summary>
    private class ExceptionEditor : UITypeEditor
    {
        public override object? EditValue(ITypeDescriptorContext? context, IServiceProvider provider, object? value)
        {
            if (value is Exception ex)
            {
                if (context.TryGetService(out IUIService? uiService))
                {
                    uiService.ShowError(ex);
                }
                else
                {
                    string message = ex.Message;
                    if (message is null || message.Length == 0)
                    {
                        message = ex.ToString();
                    }
 
                    RTLAwareMessageBox.Show(
                        null,
                        message,
                        SR.PropertyGridExceptionInfo,
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error,
                        MessageBoxDefaultButton.Button1,
                        0);
                }
            }
 
            return value;
        }
 
        /// <summary>
        ///  Retrieves the editing style of the Edit method. If the method
        ///  is not supported, this will return None.
        /// </summary>
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext? context)
            => UITypeEditorEditStyle.Modal;
    }
}