| File: System\Windows\Forms\Design\LinkAreaEditor.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// 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.ComponentModel.Design; using System.Drawing.Design; namespace System.Windows.Forms.Design; /// <summary> /// Provides an editor that can be used to visually select and configure the link area of a link label. /// </summary> internal partial class LinkAreaEditor : UITypeEditor { private LinkAreaUI? _linkAreaUI; public override object? EditValue(ITypeDescriptorContext? context, IServiceProvider provider, object? value) { if (!provider.TryGetService(out IWindowsFormsEditorService? editorService)) { return value; } if (_linkAreaUI is null) { IHelpService? helpService = provider.GetService<IHelpService>(); // Child modal dialog -launching in SystemAware mode. _linkAreaUI = ScaleHelper.InvokeInSystemAwareContext(() => new LinkAreaUI(helpService)); } string? text = string.Empty; PropertyDescriptor? property = null; if (context?.Instance is not null) { property = TypeDescriptor.GetProperties(context.Instance)["Text"]; if (property?.PropertyType == typeof(string)) { text = (string?)property.GetValue(context.Instance); } } string? originalText = text; _linkAreaUI.SampleText = text; _linkAreaUI.Start(value); if (editorService.ShowDialog(_linkAreaUI) == DialogResult.OK) { value = _linkAreaUI.Value; text = _linkAreaUI.SampleText; if (!text.Equals(originalText) && property?.PropertyType == typeof(string)) { property.SetValue(context!.Instance, text); } } _linkAreaUI.End(); return value; } /// <inheritdoc /> public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext? context) => UITypeEditorEditStyle.Modal; }