Subscribe (RSS)

Quick Links

About Actipro

Actipro Software has been creating .NET user interface control products for Windows Forms since its inception. More recently, Actipro has become a pioneer in the .NET 3.0 WPF control development arena.
Monday, 20 July 2009 03:45 by Bill Henning (Actipro)

SyntaxEditor updates to dynamic lexers - feedback wanted

We’ve started some work on doing updates to what are known as “dynamic languages” in SyntaxEditor 4.0.  These languages allow you to define a lexer in terms of explicit and regular expression pattern groups and make it very simple to get syntax highlighting working fast.

In the next-generation framework we’re prototyping out with the WPF version of SyntaxEditor, we’ve renamed these to be called “dynamic lexers” instead, since for the most part, they just control how the lexer tokenizes and highlights text.  Thus they can really be used with any language.

Anyhow, while we’re pretty happy with the XML format for defining dynamic lexers right now, we’d love to get additional input on new features you’d like to see or ideas for improvement.  Please post your comments or email them over.

Tags:   , ,
Categories:   Actipro | In development | Windows Forms | WPF
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (9) | Comment RSS




Monday, 13 July 2009 06:09 by Bill Henning (Actipro)

Latest UIStudio and SyntaxEditor for WinForms builds help prevent memory leaks

On Friday we released new builds of all our WinForms / ASP.NET products.  The big updates were some enhancements to the renderer management framework that is used primarily in UIStudio and SyntaxEditor.  All the controls in these products would attach to an event on the renderer they used (typically a default global renderer) that told them if a renderer property was modified.  This way the control instances would know when to redraw themselves.  The problem was that sometimes even after a control was done being used, unless you called Dispose on the control (which forced removal of the event tie), the control may still be retained in memory due to this event tie. 

What we did in this new build is update our renderers to support a weak event pattern.  All the controls now use that pattern, meaning that the event tie will no longer keep the controls in memory, thus helping prevent against any possible memory leak scenarios.

Tags:   , ,
Categories:   Actipro | New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (1) | Comment RSS




Thursday, 11 December 2008 23:22 by Bill Henning (Actipro)

Docking & MDI for WPF - Improving WinForms interop

We’ve had a lot of requests lately for improved support when using any sort of interop control (generally WinForms-based) within our Docking & MDI for WPF product.  In should be noted that interop content may also include things like DirectX content, etc.

The main problem is this, WPF renders any interop content on top of WPF content on the same root window.  The issues are described lower down in this topic:

http://msdn.microsoft.com/en-us/library/ms742522.aspx

In addition to the content rendering issues in WPF, there are some focus handling issues when dealing with interop controls.

What are we doing about it?

We have begun moving forward with finding ways to work around the above issues.  Today I’d like to talk about a new workaround included in build 482 that was just released.

One major issue with Docking & MDI was that auto-hide flyouts would appear below interop content that was located in the MDI area.  I’m happy to say that we’ve come up with a new property on DockSite that helps with this particular issue.

AutoHide

An auto-hide flyout (Tool Window 1) that shows on top of two documents with WinForms-based content

By setting the new DockSite.UseHostedAutoHidePopups property to false, you can now achieve auto-hide flyouts that appear above interop content.  In the screenshot above, you’ll notice a WPF tool window flys out on top of documents that contain a SyntaxEditor for WinForms control instance and a WinForms WebBrowser control instance.

We recommend that if you do not host WinForms content in your documents, you should still keep DockSite.UseHostedAutoHidePopups its default value of true.

This was very tricky to implement and is a major step forward for the product!

Moving forward

We still have some more areas to work on.  It’s likely that the next area will be a workaround so that the dock guides (when dragging a window) will appear on top of interop content.  Stay tuned!

Tags:   , , ,
Categories:   Actipro | WPF | New features | Windows Forms | Tips and tricks
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (0) | Comment RSS




Monday, 8 December 2008 23:29 by Bill Henning (Actipro)

WinForms products migrate to VS 2008 / VS 2005

As of today’s releases of our Windows Forms products, we have dropped support for VS 2003 projects and .NET 1.1 builds of our component libraries.  At this point, VS 2008 has been out for some time and anyone doing Windows Forms development should be on .NET 2.0 or later.

The latest maintenance releases now have both Visual Studio 2008 and Visual Studio 2005 sample projects included.

All the component libraries are built targeting .NET 2.0.  Please note that libraries that target .NET 2.0, can be used in any later .NET framework as well, such as .NET 3.0 or 3.5.

Tags:   , , ,
Categories:   Actipro | New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (0) | Comment RSS




Sunday, 7 September 2008 23:32 by Bill Henning (Actipro)

SyntaxEditor .NET Languages Add-on's IntelliPrompt improvements

 

We just released build 276 of SyntaxEditor and its add-ons.  This build has more general tweaks and bug fixes, along with some major updates to the IntelliPrompt capabilities for C#/VB via the .NET Languages Add-on.

Here are some of the major new updates.  There are a lot of small enhancements in IntelliPrompt across the board as well.

Anonymous Types

IntelliPrompt now works for anonymous types.  It will construct a type definition behind the scenes that contains the properties you specify and will use that type definition for constructing IntelliPrompt UI.

Anonymous

SyntaxEditor showing a member list for a property that is several levels deep in anonymous types

In the screen above, both abc and def are implicitly defined anonymous types.  You can see how SyntaxEditor correctly identifies the Now property on the abc anonymous type as a DateTime.

Extension Method Application

We have really enhanced the way that we determine which extension methods are applied to various types.  In previous builds there were a number of cases where extension methods could be applied to inappropriate types.  With our new code updates, the add-on attempts to resolve the parameters down to really determine if an extension method applies to a type, even if the type is a complex generic one.

Extension1 

A member list showing how extension methods are applied properly based on the source type

In the screen above, note how the AGoodTextExt extension method appears in the member list, while ABadTestExt does not since the latter is for enumerable int objects, not enumerable char objects.

Extension Method Quick/Parameter Info

The code updates also include some more updates to the quick and parameter info that is displayed for extension methods.  It will attempt to resolve the generic parameters into their "real" types for display to the end user.

Extension2

A member list showing how LINQ's Enumerable extension methods have been applied to a list variable, and how the quick info correctly displays the return value as IEnumerable<int>

In the screen above, the quick info used to say IEnumerable<T> in previous builds, but now says IEnumerable<int>.  We will be making other improvements in this area in the future.

Implicit Variable Declarations in VB

While our C# implementation has had var support for a while, we now have implicit variable declarations working in VB as well.

VBImplicit

A member list displayed for a variable that was implicitly declared

In the screen above, SyntaxEditor correctly displays the members for the ApplicationException type since that type was used to initialize the variable var.

Tags:   , ,
Categories:   New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (2) | Comment RSS




Monday, 14 July 2008 20:15 by Bill Henning (Actipro)

SyntaxEditor .NET Languages Add-on IntelliPrompt Improvements

We just released build 275 of SyntaxEditor and its add-ons.  This build has a lot of minor tweaks and bug fixes that have been made over the last 2-3 months.

In addition there have been some major enhancements in the .NET Language Add-on's IntelliPrompt capabilities.

Delegate Improvements

SEDelegates

A demo of how a delegate can be called like a method with full IntelliPrompt

 

Delegates now have full IntelliPrompt capabilities, just like calling methods.  Note how in the screenshot above, a generic delegate is called and a DateTime value is properly returned as the value.  The member list shows the members of the DateTime return value.

Generic Methods

SEGenMethods

A member list displayed for the result of a generic method call

Generic methods can have their return type defined by the parameter that is passed to them.  In the example above, a field called ADateProp which is of type DateTime, is passed as a parameter to the generic method Echo.  IntelliPrompt correctly recognizes that per the definition of Echo, the return type is also DateTime.

Constructed Types

SEConstructedType

Parameter info displayed for a method invoked directly off a constructed type

This feature has been highly requested... IntelliPrompt that functions on a constructed type expression.  In the screenshot above, the Append method's parameter info is displayed, following a new StringBuilder() call.

Beginnings of Lambda Expressions

SELambda

A member list displayed for a lambda expression variable

Lambda expressions are a new concept in the latest C# and VB updates by Microsoft.  In the example above, a member list is displayed for the x variable introduced in a lambda expression.  IntelliPrompt determines that x is a DateTime based on the Func<DateTime, bool> declaration.

Note that not all Lambda expression IntelliPrompt works at this time but we will continue to improve IntelliPrompt in all areas as we move forward.

Enjoy the updates!

Tags:   , ,
Categories:   Actipro | New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (0) | Comment RSS




Wednesday, 9 April 2008 03:12 by Bill Henning (Actipro)

SyntaxEditor Generic Method IntelliPrompt Enhancements

The latest build 274 of SyntaxEditor's .NET Language Add-on includes several improvements for generic method support.

First, if you call a generic method (defined as T GenMethod<T>()) passing the generic parameter type like (GenMethod<int>().), the member list that is displayed will be for int.

GenericMethods

Demonstrates how the generic extension method ElementAt is applied to a string array twice and SyntaxEditor correctly recognizes the final return value is a char

Second, generic methods on extension methods now resolve types properly as well.  This is especially useful with Linq as you can see in the screenshot above.  Above, ElementAt is a generic extension method defined on Linq's Enumerable class.  The first time it is applied, the string type is returned and the second time it is applied, the char type is returned.

We still have a little more work to do with generic methods but these are some great steps forward!

Tags:   , ,
Categories:   Actipro | New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (0) | Comment RSS




Tuesday, 18 March 2008 22:32 by Bill Henning (Actipro)

New SyntaxEditor .NET Languages Add-on IntelliPrompt Features

 

The latest build of the .NET Languages Add-on released today includes some great new features related to automated IntelliPrompt.

Extension Methods

This build adds IntelliPrompt support for extension methods, a new feature found in C# 3.0 and VB 9.0. 

Extension methods allow you to define new methods on existing types without having to sub-class or recompile the original type.  This means you can add functionality directly to types for which you don't have source code.

 ExtensionMethodsSource

The member list displayed for an Int32 parameter, showing how source-defined extension methods are applied

In the sample above, note the extension method ToStringExt is defined on the static ExtMethodProvider class.  In the TestMethod, we press "." to show a member list for its Int32 parameter val and that locates the ToStringExt method, including it in the available members for the Int32 parameter.

Extension methods can be defined in compiled assemblies or in code as above.  The most common use of extension methods is with LINQ.

ExtensionMethodsLinq

A member list displayed for a string array variable, showing how extension methods from LINQ's classes have been added to the normal members that appear on an array

Delegates

The latest build adds IntelliPrompt support for delegates.

Delegate

The parameter info tip displayed for a delegate invocation

EditorBrowsableAttribute Support

Support for recognition of the EditorBrowsable attribute is now available.

 EditorBrowsable

Note that the member list shows an entry for _AVisibleClass but not for _AnInvisibleClass since that class has EditorBrowsable(Never) applied to it

When the EditorBrowsable(EditorBrowsableState.Never) attribute is applied to a type or member, that type or member will no longer appear in member lists.

The attribute is recognized for both assembly-defined and source-defined types and members.

Tags:   , ,
Categories:   Actipro | New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (0) | Comment RSS




Tuesday, 11 March 2008 09:56 by Bill Henning (Actipro)

SyntaxEditor .NET Languages Add-on Adds Generic Type IntelliPrompt

The latest build for SyntaxEditor's .NET Languages Add-on now includes complete generic type IntelliPrompt functionality.

DotNetAddOnGenericTypeMembe

A parameter info tip displayed for a generic type... notice how it has resolved the return type to String

This has been a highly requested feature by customers.  Now you can fully utilize the power of generic types such as generic collections, etc. with the .NET Languages add-on.

For instance, in the screenshot above, after you would complete the indexer reference and press ".", the member list that would display would be for type String.  Type String was declared as the "U" generic parameter in MyCollection, which was passed down to the base Collection generic type.  Therefore the String type was used to construct Collection.  With the most recent build, SyntaxEditor's .NET Languages Add-on can recognize that and provide proper IntelliPrompt related to it.

Enjoy the new features!

Tags:   , ,
Categories:   Actipro | New features | Windows Forms
Actions:   Submit to DotNetKicks | E-mail | Permalink | Comments (0) | Comment RSS