A release candidate version of our WinForms Controls v21.1 is now available. This version makes a lot of minor updates to the controls, better aligns its API namespaces, and modernizes many aspects of our WinForms Controls infrastructure in the same way as a our recent WPF Controls updates.
Downloading the Release Candidate
Since this is just a Release Candidate version, the installer is not available on our download page, and licenses cannot yet be purchased on our web site. If you'd like to help us test it out, please contact us at our support address and we'll be happy to send you the download URL. For customers with active WinForms Controls subscriptions, let us know in your e-mail and we'll get you v21.1 license information.
Let’s take a look at some of the largest changes.
.NET Core 3.1 and .NET 5 Support
First, we updated our products to include a target for .NET Core 3.1. This included a major update to our designer functionality for proper integration with the new design tools Microsoft is still actively developing for Visual Studio.
Next, we validated that .NET 5 applications can successfully reference our NuGet packages and work as expected. .NET 5 applications will use our .NET Core 3.1 assembly variations, since .NET 5 is effectively the next version of .NET Core 3.1, just under a more concise name.
Visual Studio WinForms Designer for .NET Core Support
Visual Studio is built on .NET Framework, so that presents a unique challenge to supporting WinForms designers for .NET Core since the related types cannot be loaded directly by Visual Studio. Microsoft implemented an elegant solution where .NET Core types are loaded in a remote process. Then .NET Framework types are loaded in Visual Studio that communicate with the remote process. The remote process may one day run on a separate machine from Visual Studio, so all user-facing dialogs must be implemented on the .NET Framework side of the stack.
Moving all dialogs to the .NET Framework client was particularly challenging for products like Bars which historically have relied heavily on drag-and-drop operations on the control surface combined with dynamic popup content. We completely rebuilt the Bars design-time experience for .NET Core around a single dialog which exposes the capabilities previously only available through drag-and-drop.
For example, the Links tab provides access to all the menus defined by a BarManager: menus, toolbars, popups, and even menus nested within other menus. From here links can be added/removed, customized, or rearranged. We have even included productivity shortcuts like double-clicking a popup button link will automatically jump to the links of that popup menu to continue customization.
Microsoft is still actively developing WinForms designer support for Visual Studio with breaking changes between releases, so be sure to check our Visual Studio Designer documentation for requirements.
Speaking of NuGet packages, v21.1 is available on nuget.org. This is the quickest way to reference our WinForms Controls from any project type: .NET 5, .NET Core 3.1, or .NET Framework 4.0 or later.
We have ported all our WinForms Controls product documentation from an older Sandcastle-based configuration to a newer DocFX-based configuration. All our documentation topics are now written in Markdown and DocFX generates the API-related topics.
The offline documentation that used to ship in our product installer as a CHM (compiled HTML Help) file is now distributed in HTML files that can be opened in your favorite browser.
Part of the modernization efforts in this version have been geared towards removing the requirement for customers to download and run our product installer to work with our WinForms Controls. The NuGet packages allow you to access the assembly binaries from any project, but how do you access documentation?
We have added online product documentation for the WinForms Controls on our web site. Full documentation is now always at your fingertips, available from anywhere, even your phone. The online documentation includes the entire API reference and deep links into Microsoft Docs where appropriate for base CLR types.
Assemblies are accessible via nuget.org and product documentation can be viewed on our web site. How about getting product samples without an installer?
We have solved this by creating a new “WinForms-Controls” GitHub repository that contains the full source of our sample project and even our documentation topics. You can view the sample project source directly in the GitHub repository, or if you prefer to run the samples, you can clone the repo to your machine and run them there.
These samples are also the fastest way to evaluate WinForms Controls with .NET Core 3.1 or .NET 5 since the sample project is configured to multi-target both .NET Framework and .NET Core.
By having our samples and documentation source now available to the public, we hope that customers may be willing to contribute where they see opportunities for enhancements in those areas.
Backend Build Infrastructure
While not directly affecting customers, we have internally moved from a build infrastructure that was based on PowerShell scripts to a newer one based on the NUKE project. NUKE allows you to build a console-based app that is pure C# and has tons of functionality already baked into it. We have been so happy with the build framework that we now sponsor its author on GitHub.
In addition, we have moved our internal builds for the WinForms Controls off Azure DevOps and over to GitHub Actions. Having source, issue-tracking, and builds (via Actions) all in one place on GitHub has been a win for us internally and should allow us to be more agile moving forward.
We are really pleased with the results of our efforts to move to a more open, modern infrastructure. Customers can continue to download our product installer (once v21.1 is officially released) to easily get everything they need. During the Release Candidate period, please e-mail our support team to get access to the v21.1 product installer.
We are pleased to announce the release of the 2020.1 version of our WinForms Controls. This version includes the massive SyntaxEditor enhancements and updates we’ve been working on that have previously been described as “SyntaxEditor vNext” in the blog, and moves the older WinForms SyntaxEditor API to the same codebase already used by the WPF and UWP SyntaxEditor versions. This change brings a number of new features to the WinForms SyntaxEditor (including some huge premium add-on language updates) and will allow us to keep all three SyntaxEditor platform implementations in sync as new features are added in the future.
Let’s dig in and see a handful of the larger SyntaxEditor updates.
The internals of SyntaxEditor have been heavily refactored to support a cross-platform API across the WPF, UWP, and WinForms platforms. This allows SyntaxEditor features for the three platforms to be kept in sync moving forward. The 2019.1 WPF and UWP versions of SyntaxEditor already have this codebase in place.
Carets and Selection
Multiple selections, each with their own caret, are now supported. A new selection can be added by holding the Ctrl key when clicking in the text area or clicking on the selection or line number margins. Most edit actions have been refactored to fully support multiple selections. For instance, pressing Shift+Right Arrow will extend all of the selections by one character.
Copying text from multiple selections unions the selected text, joining each range's text with a line terminator. Pasting multi-line text into a view with the same number of selections as text lines being pasted will replace each selection with a related line from the pasted text.
Touch Selection Grippers
Selection grippers will show for the primary selection when touch input is used.
Carets now support movement at both the start and end of word wrapped lines.
Search Overlay Pane
A new search overlay pane displays over the upper-right of the active editor view when Ctrl+F (find mode) or Ctrl+H (replace mode) are pressed in a multi-line editor. A toggle mode button on the search overlay pane switches between find and replace modes, and all common search options are supported via toggle buttons and other controls. The search overlay pane can be closed by clicking the X button or by pressing Esc.
Ctrl+F3 will open the search overlay pane without focusing it, and will search forward for the currently-selected text. Ctrl+Shift+F3 will do the same but will search backwards.
F3 will search for the next match of the previously-used search options. Shift+F3 will search for the previous match of the previously-used search options.
If the SyntaxEditor.IsSearchResultHighlightingEnabled property is true, the search results can be highlighted while the search overlay pane is open. Closing the search overlay pane, clears the search result highlights.
Metro Light and Metro Dark common image sets are now included as options instead of the existing Classic common image set.
Completion Match Highlights
As text is typed while a completion list is open, the text in each item that matches the typed text is highlighted.
An auto-shrink filter is now available that can optionally trim down the items in the completion list based on typed text.
Other filters can be added to completion lists, rendering as toggle buttons or even tabs.
Various completion list item matchers and match options have been added, that allow for special item matching logic to be injected. Numerous built-in item matchers are available such as starts-with, acronym, shorthand, etc.
Quick Info and Parameter Info
The quick info and parameter info tips have been updated to use the current editor background and syntax highlighting colors.
The scrollbar splitter button now has a larger appearance.
The view splitter can be dragged to the bottom of the view to remove the split and keep the top view.
Scrolling and Zooming
Smooth inertia-based touch scrolling has been added.
Editor views can be scrolled horizontally with Shift+MouseWheel
Better logic was implemented for managing horizontal scroll maximums, especially when scrolling vertically.
New programmatic scroll methods were added that allow for aligning an anchor line to the top/center/bottom of a view with a specified pixel displacement, or scrolling by pixels.
The vertical scrollbar accelerates its scrolling speed the longer you hold the up or down button.
Line Number Customization
A new line number provider language service was added that allows for complete customization of how line numbers are rendered in the line number margin. In addition, a property was added to the document that sets the line number for the first line in the document, defaulting to one.
A optional new ruler margin was added that is useful for column display when working with fixed-width fonts.
Outlining Margin Highlights
Highlights render over contained lines when hovering over an outlining node in the outlining margin.
Line Modification Marks
Line modification marks now have improved logic that better tracks unsaved, saves, and reverted changes.
The rendering of built-in indicator glyphs was improved.
Options for delimiter (bracket) auto-complete and delimiter highlighting are available when delimiter-related language services are registered on the syntax language.
Added support for triple-clicks to select an entire view line. Dragging the pointer on the final click will extend the selection by view line.
Text rendering now properly handles cultural editing concepts like complex glyphs, bi-directional text, etc.
.NET Languages Add-on
The C# parser and resolver were updated to support C# 7.3 syntax, and the VB parser and resolver were updated to support VB 15.8 syntax. Much-improved resolver logic is now present that is far more accurate than in previous versions.
The IntelliPrompt completion list now shows toggle button filters for the various kinds of items displayed in the list.
Web Languages Add-on
Python Language Add-on
This new add-on implements an advanced syntax language for the Python language.
Almost 100 Samples
We've added so many SyntaxEditor samples to this new version that we had to create a brand new Sample Browser app design to support them all!