Better ListView is a list view control for .NET Windows Forms
+
Designed as a replacement for the regular .NET list view control.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
Better ListView has more features and flexibility, always uses the current system theme (including Aero support), and removes limitations of the regular .NET list view control.
+
Minimum learning needed. Better ListView can be used just like the regular list view.
+
Written in pure managed C# code. It is fast, light-weight and optimized for 10k+ items.
+
Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
Tested in the real world by thousands of users
+
+
+
+
+
Extra features summary
+
+Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag & drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
+
+
+Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.
+
Göran Alfvén, Sweden
+
+
+The control is very easy and intuitive to use and is well documented.
+
DevProConnections.com Review
+
+
+Better List View is awesome.
+
Daniel N
+
+
Hierarchical items
+
+You can create tree-like structures in Better ListView; inbuilt drag & drop hierarchical reordering of items.
+
+
Improved grouping
+
+Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
+
+
Save/load contents with 1 line of code
+
+You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
+
+
Double-buffered and flicker free
+
+Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
+
+
Column header images
+
+You can use images in column headers. Custom image sizes are supported.
+
+
+
+
Sub-item images
+
+You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
+
+
Image-List and Image Support
+
+Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
+
+
Custom list view Image size
+
+You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
+
+
Drag & drop with insertion mark
+
+Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
+
+
+
+
List view item reordering
+
+Better ListView has inbuilt item reordering and item drag & drop inserting at the position specified by user. Drag & drop preview is shown using an insertion mark.
+
+
Column-header reordering
+
+Better ListView has inbuilt easy drag & drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
+
+
+
+
Auto-scroll for column header reordering and item reordering
+
+Better ListView has inbuilt auto-scrolling for column header and item reordering.
+
+
Column headers can be shown in all views
+
+Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
+
+
+
+
Thumbnails view mode
+
+Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
+
+
Image shadows, borders and padding
+All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
+
+Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
+
+
+
+
Multi-column sorting
+
+You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
+
+
+
+
Inbuilt sorting and natural sorting
+
+Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
+
+
Richer event data
+
+Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
+
+
Checkboxes in all views
+
+You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
+
+
+
+
Three state checkboxes
+Three state checkboxes are supported in Better ListView:
+
+
+
+
Hide or show checkboxes of specific ListView Items
+
+You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
+
+
+
+
Powerful list view tooltips
+
+You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
+
+
+
+
Uses current Windows theme
+
+Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
+
+
XML and binary serialization of everything
+
+Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
+
+
Owner drawing
+
+Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
+
+
+
+
Multi-line items
+
+Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
+
+
+
+
Background image support
+
+Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
+
+
+
+
Context menu for column headers, list items, and empty area
+
+Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
+
+
+
+
Advanced hit-test with detailed information
+The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
+
+
+
+
Customizable search-by-typing
+
+Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
+
+
Display text when the list view is empty
+You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
+
+
+
+
Embed controls for item editing
+Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
+
+
+
+
ListView item text formatting
+
+Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
+
+
Focusable ListView sub-items and groups
+
+Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
+
+
+You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
+
+
+
+
+It's an odd thing when you're inspired by a form component, but Component Owl
+with their Better ListView has done it. Love its native feel.
+
Daniel N, USA
+
+
More advantages of our improved list view component:
+
+
Developer friendly: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. Save time and ship sooner.
+
Better ListView has improved usability and fixed behavior. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look & feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. Using Better ListView is pleasant for users. Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.
+
Guaranteed support and continued development: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular Swift To-Do List and ImagingShop). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.
+
Tested in real world applications by thousands of users: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is extremely stable.
+
Better ListView does not inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.
+
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+
“Have you ever wondered why some software immediately strikes you
+ as polished and professional, and looks and feels just great?
+ So did we. Component Owl is the result of our journey.
+
+
Component Owl is part of the network.
+
+
+
+
About Dextronet
+
+
Dextronet has been founded in 2004 with the intention to develop, sell and support software
+ with great design that makes your life better. To put it simply: We love creating software
+ that you will love to use.
+
+
In the 14 years that Dextronet has existed, we have been growing
+ and expanding our business organically and responsibly, and attained substantial steady growth
+ each year. We are here to stay.
+
+
Our flagship and most popular product is Swift To-Do List
+ (developed in .NET). With over 500.000 downloads and paying customers in 93 countries,
+ it is the number one task and notes organizer for Windows.
+
+
Better ListView component is the core part of Swift To-Do List, and as such, tens
+ of thousands users work with it every day.
+
+
+
+
About Component Owl
+
+
ComponentOwl.com was founded as a Dextronet.com spinoff to commercially release Better ListView
+ and other software components originally developed for our in-house purposes.
+
+
Our goal is to provide complete, light-weight, flexible, intuitive to use and reliable
+ components and controls for Microsoft .NET with native look and feel.
+
+
Soon after release, Better ListView has started to receive favorable reviews and praise
+ from developers. All our development effort
+ is based on the feedback of our customers.
+
+
+
+
“The [Better ListView] control is very easy and intuitive to use and
+ is well documented.”
+ – DevProConnections.com Review
+
+
+
+
+
+
+
Our Team
+
+
Our growing team has over 50+ years of combined experience with development of rich-client
+ desktop Windows software and components.
+
+
+
+ Libor Tinka, Better ListView lead developer, has been programming since 7 years old on ZX Spectrum,
+ and has enormous attention for detail. His interests include programming, quantum physics, advanced
+ mathematics, digital imaging (algorithms, HDR and panoramic photography), and green Japanese tea.
+
+
+
Our Customers
+
+
Since releasing Better ListView, numerous developers and companies have started utilizing
+ Better ListView in their projects, to save money, development time, and to impress their customers.
+
+
Our customers represent a rich spectrum of businesses and organizations, including:
... and others, as well as individual developers all over the world.
+
+
+
+
+
“It's an odd thing when you're inspired by a form component, but
+ Component Owl with their Better ListView has done it. Love its native feel.”
+ – Daniel Nolan
+
+
+
+
+
+
“I greatly appreciate all of the help you have provided over the past week. The knowledge of your product and Support response time far exceeds that of the other software vendors I have worked with. I could not be more happy with the product and will be recommending Component Owl to any/all future development teams I am part of. Thank you again for being so attentive to our needs and providing excellent support!
+
+”
+ – Brian S.
+
+
+
+
+
+
+
+
+
Association of Software Professionals Member
+
+
We’ve been proud members of Association of Software Professionals for over
+ 12 years now.
+
+
We also contribute to ASPects, the monthly magazine of Association of Software Professionals.
+
+
+
+
+
+
“Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.”
+ – Göran Alfvén, Sweden
+
+
+
+
Microsoft Partner
+
+
We are part of the Microsoft Partner Network, which helps us strengthen our capabilities in delivering the best components for Microsoft Windows.
+
+
+
Our Contact Info
+
+
Contact us today directly with any of your questions, suggestions or comments:
+ support (at) componentowl (dot) com
+
+
You can also use the contact form in Support section.
+ We usually reply within 24 hours or sooner.
+
+ Our offices are based in Brno, Czech Republic, European Union.
+
+ Brno is the second largest city in Czech Republic, after the capital city Prague.
+ It is a technological hub and home of two computer science universities and influential
+ software enterprises, including AVG and Red Hat.
+
This tutorial is intended for developers who would like to distribute their
+WPF or WinForms controls and automatically put them into Visual Studio Toolbox
+during installation.
+
I struggled with Toolbox integration earlier because there are several possible
+approaches (harder to decide between them). Each approach have its own pros and cons and
+no overall comparison is provided. I wrote this tutorial to shed some light on the topic
+and spare you hours, maybe days of research and experimenting with aspects of
+Visual Studio (Toolbox) extensibility.
+
We will first take a look on Toolbox control integration in general to get a
+big picture. Each approach will be then discussed in detail and the following
+question will be answered:
+
+
How to install control in Visual Studio Toolbox?
+
How to update the control?
+
How to uninstall/remove the control?
+
How to support multiple Visual Studio versions?
+
+
There are several options on how to integrate your controls with Visual
+Studio Toolbox:
+
+
Manual installation
+
Toolbox Control Installer (TCI)
+
Visual Studio Automation Object Model (DTE)
+
VSPackage
+
VSI package
+
VSIX package
+
+
Manual installation
+
The simplest way of adding control into Visual Studio Toolbox is from within
+the IDE.
+
This approach have one crucial drawback, which is that you leave Toolbox
+integration to the user. Many developers are not that experienced with Visual
+Studio and when your component is shipped, even if you provide appropriate
+step-by-step guide, they may find it too complicated and rather try
+another component which "just works". I thought that every developer using
+Visual Studio is experienced enough to know how to add new items in VS Toolbox,
+but I received few e-mails from users who uninstalled the product just because
+the component have not appeared in the Toolbox and they thought it is broken
+(without reading our documentation, of course). On the other hand, there is
+a group of users who are not experienced developers, but are in charge of trying
+some products in a given company (e.g. project managers). These people can
+install the component, play with it and they would really appreciate if it just
+works. This increases chance they will actually purchase your product.
+
Advantages: zero effort
+Disadvantages: require experienced users, slows user
+producitivity, updating controls is not intuitive
+
Toolbox Control Installer (TCI)
+
Visual Studio 2005 SDK contained a VSPackage called Toolbox Control
+Installer. This package comes pre-installed with Visual Studio 2008 and newer.
+Its job is to simplify the specific task of extending Visual Studio Toolbox.
+This approach requires you to install your assembly in GAC (Global Assembly
+Cache) and create a key in Windows Registry.
+
Advantages: simple and fast component installation, updating
+and removing
+Disadvantages: requires installation in GAC (not always
+wanted), VS 2005 supported with SDK only
+
Visual Studio Automation Object Model (DTE)
+
If you are not afraid of COM, you can try DTE (Development Tools Environment) approach.
+There is already a project on CodePlex called
+Visual Studio Toolbox Manager,
+which solves the toolbox integration problem using a simple command-line
+application. The project is outdated since it does not support Visual Studio
+2010 and newer. I made a project called DteToolboxInstaller, which
+is also a command-line application and does support Visual Studio 2013, 2012, 2010,
+2008 and 2005. You can use the project as you like. The main disadvantage of DTE
+approach is the speed. The installer have to run devenv.exe using the automation interface, create a
+fake VS Solution, open Toolbox, add the stuff and then close the Solution. The
+whole process take no less than 10 seconds. If you want to integrate with two or
+three versions of Visual Studio, it can take well over a minute.
+
Advantages: does not require updating registry or GAC, full
+control over Toolbox
+Disadvantages: very slow, separate installation required for
+every version of Visual Studio
+
VSPackage
+
A VSPackage seems to be a natural option. VSPackages allow any type
+of Visual Studio extension and you can manipulate Toolbox as well. There was a trouble
+with VSPackages in providing a Package Load Key (PLK) which can be
+generated only manually using web form. The requirement for PLK vanished with
+Visual Studio 2010 (hooray!). The nice thing about VSPackage approcach is that it does not slow
+down the installation process. The package is loaded and the controls are installed
+on-demand (when the Toolbox is opened for the first time after installation).
+After trying all the approaches, using VSPackage seems to be fastest and most
+universal one.
+
Advantages: quick installation, appearance in About box and
+other extensibility features
+Disadvantages: cmplicated setup, each component requires its
+own package if shipped separately
+
VSI Package
+
VSI packages are quite old but you can use them for integration with Visual
+Studio 2005 and newer. It have very simple structure and you can create one even
+without Visual Studio. The only trouble with VSI compared to other
+approaches is invoking a wizard form which cannot be suppressed. The
+installation just cannot run in "quiet" mode. Another trouble with VSI is that a
+digital signature is required in order to get rid of a warning dialog. Your control will be always installed under "My Controls" tab in the
+Toolbox, which is not always desirable.
+
Advantages: simple creation, installer provided by Visual
+Studio, automated creation and signing requires several specific steps
+Disadvantages: no quiet mode (extra steps when custom installer
+is used), manual uninstallation
+
VSIX Package
+
VSIX packages came with Visual Studio 2010 so you can integrate with 2010 or
+newer. the .VSI and .VSIX file extensions are associated with Visual Studio so
+you can simply double-click it or run it via shell. You can also run
+VsixInstaller.exe utility that performs the installation. Good news: No more
+nag screens when VSIX is not signed - the installer only contains a dialog with
+simple text: "This extension does not contain a digital signature."
+Even better news: The VsixInstaller supports quiet mode!
+
Please note that VSI and VSIX package installers contain features like
+displaying EULA, choosing which components to install or localization. When
+deploying your controls for use in Visual Studio, you won't need an installer on
+top of the package.
+
Advantages: installer provided by Visual Studio, quiet mode,
+fast installation
+Disadvantages: package project required, automated creation is
+complicated, no support for VS 2005 and 2008
+
Comparison of Approaches
+
Here is a table summarizing features of the discussed approaches. As you can
+see, the VSPackage approach gives you the most freedom, but is also hardest
+to implement. We will discuss every approach so
+that you will be able to impement the one that suits you best.
We will focus on integration with Visual Studio 2010, 2012 and 2013. Hence you will need:
+
+
Visual Studio 2010 (or 2012, 2013)
+
Visual Studio 2010 SDK (or 2012 SDK, 2013 SDK)
+
Microsoft Windows SDK
+
+
The VS SDK contains regpkg.exe tool and project templates discussed in VSIX
+and VSPackage approaches.
+
The Windows SDK contains gacutil.exe, guidgen.exe, signtool.exe and other
+useful tools.
+
There are two kinds of versioning used for Visual Studio. One is based on the
+release name (e.g. Visual Studio 2008) and the other is a classic version number
+(e.g. 8.0). Both will be used, so it should be noted which version numbers
+correspond to which versions of Visual Studio:
We will start by creating simple WinForms control for integration in VS
+Toolbox.
+
You can start with File - New - Project... (Control+Shift+N) and select
+Windows Forms Controls Library template.
+
Of course, you can also create empty Class Library project, add references to
+System.Drawing and System.Windows.Forms and create a new control. In fact, any
+DLL containing public classes derived from Control will
+suffice.
+
We want to support .NET Runtime version 4.0 and 4.5, so the control should be
+built against .NET 4.0 to ensure compatibility (the lower framework version you
+use, the wider range of compatible frameworks since they are backward
+compatible). It should be noted that .NET 4.5 is an in-place update of .NET 4.0
+and hence the 4.5 assemblies will work on machines with 4.0 runtime installed
+unless you use some feature specific to 4.5.
+
If you have multiple controls in your assembly and don't want to use some of
+them in Toolbox, decorate them with ToolboxItem attribute with
+defaultType parameter set to false:
I have created a very simple control called SampleControl:
+
+
Finally, I set version of the assembly 3.3.0.0 (I chose just something else
+than 1.0.0.0 to see where the specific version number appears).
+
Custom Transparent Icon for the Toolbox
+
Icons for Toolbox are 16 by 16 pixel images. Various image formats are supported
+(BMP, JPEG, PNG and ICO). However, you need to
+create 256-color BMP image to ensure transparency. The transparent color is determined by bottom left
+pixel of the icon. Transparency works for magenta (#ff00ff):
+
+
The icon file should have same name as the control class (i.e.
+SampleControl.BMP).
+
Finally, use ToolboxBitmapAttribute to link icon with the control class:
Note that icon location matters, at least in C#. Since I have added
+the icon under custom folder named Resources, I need to reference
+Resources.SampleControl.bmp instead of just SampleControl.bmp.
+
Here is the resulting transparent icon in Toolbox:
+
+
Marking the Control as Toolbox Item
+
We can mark control as toolbox item by adding a ToolboxItemAttribute
+with defaultType parameter set to true:
+
+[ToolboxItem(true)]
+public partial class SampleControl : UserControl
+...
+
+
This decoration is optional since the controls within assembly are
+considered toolbox items by default. However, we can mark certain control
+classes with ToolboxItem(false) to hide them from Toolbox. This
+comes in handy when we have multiple projects and there are too many controls in
+the Toolbox because loaded from all the other projects.
+
Signing the Assembly
+
The assembly containing controls (SampleControl.dll in our
+case) should be strongly named if we want them installed in GAC
+(Global Assembly Cache) later on. This is optional in most cases, but the Toolbox Controls
+Installer approach requires the assembly being installed in GAC, hence the
+strong name is necessary there.
+
To give an assembly a strong name, open project properties and find
+Signing tab:
+
+
Check the "Sign the assembly" option and select "<New...>"
+from the combo box. This will create a new .SNK file in your project which will
+be used to sign the assembly. You can also browse for existing key file. If you
+want to distribute multiple assemblies with custom controls, it is a best
+practice to use same strong name key for each assembly (it is possible to have
+one .SNK file located in Solution folder and put just a link to that file in
+each project; when we browse for the key under the Signing tab, the link will be
+used without copying the file).
+
The SNK (Strong Name Key) file is basically a private key to digitally sign
+your assembly. There is also a public key which can be used to verify the
+assembly and its shorter variant called "public key token" for assembly
+identification.
To install component into Visual Studio Toolbox manually, open some form or
+control in designer, open the Toolbox window (Control+Alt+X), right-click on the
+Toolbox window and select "Choose Items...":
+
+
The "Choose Toolbox Items" dialog will show up:
+
+
You can browse for DLL file with your component by clicking the "Browse..."
+button.
+
This is the simplest way of putting component in the Toolbox without extra
+actions required.
+
This can be unpleasant for end-users since it means many clicks they have
+to perform. I will explain how to integrate a component a little bit more so that it
+will be visible under the ".NET Framework Components" tab in the above dialog box and
+possibly show up in Toolbox automatically without extra effort of the user.
+
Making the Control Visible in "Choose Toolbox Items" Dialog Box
+
As you can see on the above picture, the SampleControl component is already
+displayed in the dialog box under ".NET Framework Components" tab.
+
This is because the folder containing our control is registered as "assembly folder" in the
+registry and hence is searched when the above dialog is populated.
+
You can register your own assembly this way by creating a key in registry:
+
32-bit OS: HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\<your control name>
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyFolders\<your control name>
+
You can also create key for specific version of .NET runtime (this comes in
+handy if you distribute different components for different versions of .NET):
+
32-bit OS: HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\<your control name>
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\<your control name>
+
In both cases, the default value for the key is a string with full path to
+the folder with your assembly.
+
You can specify Toolbox tab in which the component should show up by adding
+subkey named "Toolbox" with single string value "TabName" this value has Toolbox
+tab name as data. When you add such control in the Toolbox, it will reside under
+new tab with the specified name:
+
+
+
The control should also appear in "Choose Toolbox Items" dialog box if it
+is installed in Global Assembly Cache.
+
The control pops up in the Toolbox automatically in
+its own tab in Visual Studio 2012/2013.
+
Installing the Control in GAC
+
The benefit of GAC (Global Assembly Cache) is that the user needs not to
+browse for your control. He will just select it form the above dialog box
+without having to know where it is actually installed (the dialog is populated
+by controls from "assembly folders" and from the GAC).
+
The GAC have one useful feature and disadvantage at the same time: It allows
+holding multiple versions of the same assembly. When user makes reference to
+your control from GAC and set "Specific Version" to true in
+Reference Properties window, it will be tied to that version. When you install an
+"update", a new version will be added to GAC, but the user will stay with the
+older one. Of course, the "Choose Toolbox Items" dialog will show both versions,
+so the user can just replace old reference with the new one.
+
You can make the installer removing any older versions from GAC during
+installation and add/keep just the newest one. This will force the user to
+replace the reference since it breaks the build.
+
You can work with GAC by using tool called gacutil.exe or
+from code. We will discuss both approaches.
+
The gacutil.exe is located in Microsoft Windows SDK directory. There are two
+such extecutables:
The former is for .NET Framework up to version 3.5. The latter is for
+.NET 4.0 and higher. This is for compatibility reasons as a separate GAC have
+been introduced with .NET 4.0.
+
You can install an assembly to GAC by calling:
+
gacutil.exe /i SampleControl.dll
+
To uninstall it, we refer to our assembly by its assembly name, not file
+name:
+
gacutil.exe /u SampleControl
+
Finally, you can check if the assembly is installed in GAC by listing any
+instances of the provided name:
+
gacutil.exe /l SampleControl
+
It is not wise, however, to use gacutil.exe from a custom
+installer as it is located in SDK that user might not have installed.
+Furthermore, the SDK license does not allow bundling gacutil.exe
+with your installer.
+
Some installers like Inno Setup or MSI allow installing in GAC anyway.
+
You can also work with GAC using
+System.EnterpriseServices.Internal.Publish class. The class have two
+methods: GacInstall and GacRemove. Both
+methods take just path to assembly file as a parameter, so for example:
+
(new Publish()).GacInstall(assemblyPath);
+
will install the specified assembly in GAC.
+
Updating
+
Updating the control depends on how it is installed and referenced.
+
If you have added component in the Toolbox manually via "Choose Toolbox Items"
+dialog box and "Browse..." button, i.e. as a file reference, the
+default property of such reference is that it simply points to the specified
+file no matter which version it have (unless user sets "Specific Version" to
+true in reference properties window; the default is
+false in this case). Simply replacing the DLL with the control by a newer
+file will suffice. If the user have specified "Specific Version" to true,
+the build will break because the reference is no longer valid. He needs to
+replace the reference by a new one pointing on the same file which now have
+newer version.
+
If you have added the component from GAC (these components also appear in the
+"Choose Toolbox Items" dialog box), the "Specific Version" property of the
+reference is true by default:
+
+
This means that even if you install a newer version of the component in GAC,
+the project will still reference the older version and both versions will reside
+in GAC.
+
If you remove all versions of the component from GAC (e.g. using
+gacutil.exe) and then install just the newest one, the build will break
+unless the user changed "Specific Version" property to false.
+
Removing
+
Removing the manually installed control consists of just reverting all the
+steps done during the installation.
+
In case of file references, deleting the file is sufficient.
+
In case of tighter integration (GAC, registry), the registry keys need to be
+deleted and the control can be removed from GAC (e.g. using gacutil.exe).
+
Resetting Toolbox and Clearing the Toolbox Cache
+
The Toolbox can fall into state where it does not display some items, some are
+duplicate and some can be disabled. Sometimes the only remedy is to let Visual
+Studio rebuild the
+Toolbox from scratch.
+
To do that, right-click on the Toolbox window and select "Reset
+Toolbox". Visual Studio will go through all the installed packages and reloads
+components into the Toolbox.
+
If this won't help, you can perform hard reset of the Toolbox. Exit
+Visual Studio and delete all .TBD files in the following folder:
Toolbox Control Installer is a VS package pre-installed in Visual Studio 2008 and
+newer. It looks in Windows registry for components and loads them in the
+Toolbox.
+
Before using TCI, one can check if it is installed in the given version of
+VS. For example, the following registry key should exist if the Visual Studio
+2010 have TCI installed:
The TCI package GUID is always the same so you can make the check for any
+version of Visual Studio with the above key (only change the version number from
+10.0 to corresponding version number, of course).
+
The only prerequisites for the assembly is that it should have strong name
+(i.e. to be signed). See section "Creating the Sample Control" for more
+information.
+
The installation consists of putting the control in GAC (see previous
+section for more information) and creating registry keys.
+
Suppose we have the SampleControl installed in GAC:
+
+
We will make reference to this assembly from registry by creating the
+following key:
The
+DTE (Development Tools Environment) approach does not require working
+with GAC or registry. It remotely manipulates Visual Studio Toolbox and
+adds/removes items as needed.
+
The whole installation is done from (managed) code using COM wrappers. It
+works in the following steps:
+
+
Check if an instance of Visual Studio is not running. If not, continue.
+
Retrieve an EnvDTE.DTE object corresponding to the
+ version of Visual Studio we want to integrate with.
+
Create a "dummy" project using the DTE object
+
Obtain Toolbox window and ToolBox object from it.
+
Find or create ToolBoxTab object.
+
Add item in the Toolbox tab (ToolBoxTab.ToolBoxItems.Add).
+
Wait until current instance of Visual Studio stops running.
+
+
Here are some of the step/strongs in C# code - it is an excerpt from
+DteToolboxInstaller project provided in sample source code:
+
+// obtain a DTE object
+Type typeDTE = Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
+
+DTE dte = (DTE)Activator.CreateInstance(typeDTE, true);
+
+// create a temporary file
+string tempFile = Path.GetFileNameWithoutExtension(Path.GetTempFileName());
+string tempDirectory = string.Format("{0}{1}", Path.GetTempPath(), tempFile);
+
+// create Visual Studio Solution
+Solution4 solution = (dte.Solution as Solution4);
+
+string templatePath = solution.GetProjectTemplate(TemplateName, "CSharp");
+
+solution.AddFromTemplate(templatePath, tempDirectory, DummyProjectName, false);
+
+// get Toolbox window
+Window window = dte.Windows.Item(Constants.vsWindowKindToolbox);
+
+// get Toolbox
+ToolBox toolBox = (ToolBox)window.Object;
+
+// get Toolbox tab
+ToolBoxTab toolBoxTab = (GetToolBoxTab(toolBox.ToolBoxTabs) ?? toolBox.ToolBoxTabs.Add(this.tabName));
+
+// add new item under the Toolbox tab
+toolBoxTab.ToolBoxItems.Add(assemblyName, this.assemblyPath, vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent);
+
+// select the Toolbox tab
+toolBoxTab.Activate();
+
+// cleanup
+dte.Solution.Close(false);
+dte.Quit();
+Marshal.ReleaseComObject(dte);
+
+// wait till Visual Studio turns off completely
+if (IsVisualStudioRunning())
+{
+ Thread.Sleep(VisualStudioProcessTimeout);
+}
+
+
There are several obstacles on implementing the DTE approach.
+
First of all, we need to ensure that Visual Studio is not running during the
+installation - this is because we want messages sent to Visual Studio instance
+will arrive in the "invisible" one ran from our code and not the one which the
+user have currently opened.
+
Similarly, we would like to wait a while until the instance terminates after
+installation. This is necessary when integrating with multiple versions of
+Visual Studio when just a single instance have to be running at a time. Doing two
+installations too quickly in succession may cause the previous one to fail
+because a Visual Studio instance is still running.
+
The communication between our code and Visual Studio is mediated by OLE
+message filter which needs to be implemented. You can take a look on
+DteToolboxInstaller (see below) source code, where is a working installer
+implemented that uses this approach.
+
Updating and Removing
+
Since we have full control over the Toolbox with this approach, updating or
+removing items/tabs is done with the corresponding DTE objects.
+
Automatic Integration with DTE using DteToolboxInstaller
+
I made a simple command-line application called DteToolboxInstaller
+which does all the necessary steps and solves the deals with the discussed
+obstacles. The usage is simple:
Let's consider you don't have a custom installer and want to distribute your
+components in some kind of simple extension package that Visual Studio
+understands.
+
Visual Studio contains an installer for so called VSI packages that will
+do the integration work for you. If you have Visual Studio installed, the .VSI
+extension is already associated with the Visual Studio Content Installer.
+
Creating the VSI Package
+
I have created an empty folder and copied SampleControl.dll in
+it. All that is needed to make a VSI package is to create a .VSCONTENT file,
+which is simply a XML file satisfying
+Visual Studio Content Installer schema:
The content is readable and pretty straightforward. The
+ContentVersion element can contain either "1.0" (support for Visual
+Studio 2005, 2008 and 2010) or "2.0" (support for Visual Studio 2008, 2010,
+2012, 2013).
+
Now we zip the two files and rename extension of the archive to .VSI. We
+should end up with the following three files:
+
+
If you double-click the SampleControl.vsi, the Visual Studio
+Content Installer opens up. You can start the installer from command line as
+well:
By default, the VSI package is not signed. This causes showing: "Publisher:
+Unknown" label on the first page of the installation wizard and an unpleasant
+dialog box later on:
+
+
To avoid this, you need to digitally sign the VSI package. Of course, you
+have to own a digital certificate (usually an X.509 certificate stored in .PFX
+file).
+
Because we cannot sign ZIP files, we need to convert the .VSI file (which is
+actually a ZIP archive with just an altered extension) to self-extracting archive that the Visual Studio Content
+Installer recognizes. There is a tool called MakeZipExe
+to do this task:
When signed, the "Publisher" and "Information URL" labels are filled in the
+installer and no dialog box appears. The benefit of signing is obvious - your
+users will know they are installing trusted, possibly high-quality software and there
+is a higher chance of your software being used more widely (for example, the
+government sector usually require such certified software).
+
You can also add an EULA to your VSI package. This can be done by adding a
+comment metadata in the archive by ZIP archiver that supports such feature (e.g.
+WinZip).
+
Uninstalling the Control from Toolbox
+
As far as I know, the control cannot be removed from the Toolbox
+programmatically. You need to delete the control's DLL located at
+
c:\Users\<user>\Documents\Visual Studio 2010\Controls\
+
the same should be done for every version of Visual Studio installed.
+
In Visual Studio, right-click on Toolbox and select "Reset Toolbox". The
+component will not be found and disappear. Similarly, you can just
+delete the control from the Toolbox or select "Choose Items..." from context
+menu and untick the control there:
+
+
Drawbacks of Using VSI Package
+
One drawback of using VSI package is that the installer runs every version of
+VS IDE you have installed and which is supported by the package. The form will
+disappear eventually, but it lowers user experience.
+
Another drawback is that when you want to update your control, the installer
+offers whether to rename, replace or skip the file (e.g. SampleControl.dll). User have to decide to
+update, which also slows down installation and requires user interaction.
+
You also cannot specify custom Toolbox tab. All controls are installed under
+"My Controls" tab:
This approach brings full control over the integration and other benefits. The VSPackages are loaded on-demand, so
+the integration process won't slow down a custom installer.
+
Although VSPackage and our sample control can be packed within the same
+assembly, we will create a separate Visual Studio Package project.
+
When user opens Toolbox in VS for the first time after installation, the IDE
+will look in registry for any registered packages and load them (if not loaded
+previously).
+
Creating VSPackage Project
+
We would like to have our VSPackage compatible with VS 2010, 2012
+and 2013, so we will work in Visual Studio 2010.
+
Select "File - New - Project.." (Control+Shift+N) and
+select the "Visual Studio Package" template:
+
+
This will start a "Visual Studio Package Wizard":
+
+
You can leave most options in the wizard on defaults. Leave all the check boxes unchecked
+on "Page 3 of 7" and "Page 7 of 7":
+
+
+
Now we will take a look on the generated files. Open the Guids.cs
+file:
+
+// Guids.cs
+// MUST match guids.h
+using System;
+
+namespace ComponentOwl.ToolboxIntegration
+{
+ static class GuidList
+ {
+ public const string GuidSampleVSPackagePkgString = "00000000-8fdf-48b6-98f8-4ff21a3a4def";
+ public const string GuidSampleVSPackageCmdSetString = "def6519d-5ace-4062-95d6-4ee43f4a5de9";
+
+ public static readonly Guid GuidSampleVSPackageCmdSet = new Guid(GuidSampleVSPackageCmdSetString);
+ };
+}
+
+
Here are the GUIDs that
+uniquely identify your package. I have edited the first four hex digits of
+package identifier to "00000000" so that we can find it more easily later. This is
+just for purpose of convenience in our sample project. Always use randomly generated GUID
+in a real-world application. Visual Studio will generate a new GUID
+whenever you create a new VSPackage project.
+
You can also generate new GUIDs any time, for example using
+online GUID
+generator or guidgen.exe utility from Windows SDK. When these numbers are changed, your package will be different from
+Visual Studio's point of view.
+
Another important file here is source.extension.vsixmanifest.
+If you double-click on the file in Solution Explorer, the VSIX Manifest Designer
+will show up:
+
+
Not all the fields are mandatory, but I will fill all of them nevertheless:
+
+
ID - Unique product "Identity" - the ID is limited to
+ 100 characters and the recommended format is "Company.Product.Feature.Name".
+ We can leave the VSPackage's GUID here.
+
Product Name - This field is used for Toolbox Tab name,
+ so I will put "Component Owl Controls" here.
+
Author - Your name or company name -
+ "ComponentOwl.com", for example.
+
Version - This is version of the package and its
+ contents. The format is same as for assembly versions:
+ Major.Minor.Build.Revision. I will put "1.4.0.128" here.
+
Description - Speaks for itself.
+
Locale - Language for the package.
+
Supported VS Editions - Here you can specify which
+ editions of Visual Studio 2010 you would like to support. Of course, it can
+ support VS 2012/2013 as well, but for now I will just check Ultimate, Premium and
+ Professional editions.
+
Supported Framework Runtime - Minimum and maximum .NET
+ Framework Runtime versions your extension supports. Since my component will
+ support 4.0 and 4.5 runtime, I will put 4.0 and 4.5 here.
+
+
Adding Support for Visual Studio 2012/2013
+
We have specified supported Visual Studio Editions in VSIX Manifest Designer,
+through the "Visual Studio Version and Edition" dialog box:
+
+
As you can see, only Visual Studio 2010 is supported here because VSIX is new
+to 2010 and of course VS 2010 does not know about 2012/2013. We have to
+source.extensions.vsixmanifest file for manual editing. Select the file
+in Solution Explorer and press F7 (View Code):
Take a look on the Vsix/Identifier/SupportedProducts/VisualStudio
+element (highlighted in bold). Copy and paste this element and modify
+Version attribute on the second one to "11.0":
The edition tags are valid for version 11.0 because Visual Studio 2012
+template generates the same edition names.
+
Writing Package Code
+
Now we will take a look on the VSPackage code itself. Open the
+SampleVSPackage.cs
+file. I kept only the necessary code and added the ProvideToolboxItems attribute:
Our VSPackage implementation inherits from
+Microsoft.VisualStudio.Shell.Package class and is decorated by three
+attributes:
+
+
PackageRegistrationAttribute - Specifies that package
+ registration tool should look for additional attributes (will be discussed
+ later).
+
InstalledProductRegistrationAttribute - Provides
+ information for the Visual Studio splash screen and About box.
+
GuidAttribute - Provides custom GUID for the class
+ because automatic GUID is undesirable here (Visual Studio need to be able to trace our
+ package by its unique ID).
+
ProvideToolboxItemsAttribute - Specifies that the
+ package provides toolbox items. There are various uses of VSPackages, but we
+ are interested in intalling controls to Visual Studio Toolbox, hence this
+ attribute.
+
+
The strings "#110" and "#112" in
+InstalledProductRegistrationAttribute refer to keys in
+VSPackage.resx. You can open this file and edit package name and
+description there:
+
+
Now we write methods within SampleVsPackage class that work with the Toolbox:
The method names InstallToolboxItems and
+RemoveToolboxItems
+speak for themselves. Both methods look for SampleControl.dll in the same
+location as the VSPackage's assembly. They get all toolbox items from the
+assembly and either put them under "Component Owl" tab or remove them.
+
The ToolboxService class comes from
+System.Drawing.Design and we need to add reference to this asssembly in
+order to use ToolboxService.
+
Building the Package
+
Before building the SampleVsPackage project, open project
+properties, find the VSIX tab and uncheck all the options:
+
+
Finally, build the project. Just two files, SampleVsPackage.dll
+and SampleVsPackage.pdb, should be generated.
+
Registering the Package
+
Until the package can be loaded by Visual Studio, it needs to be
+registered.
+The registration is simply writing specific keys into Windows Registry.
+
To do that, find the Package Registration Utility (RegPkg.exe). It should be
+located in Visual Studio SDK directory, e.g.:
+
32-bit OS: c:\Program Files\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe
+64-bit OS: c:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe
This will write package registration information into the Windows Registry,
+hence registers the package. Similar call have to be done by your custom installer in
+order to register the package.
+
Instead of writing into registry, RegPkg.exe can gereate a REG file (several
+other formats are available) so that you can write package information into
+registry using the file. To do that, use /regfile parameter:
This creates SampleVsPackge.reg file you can use any time
+later instead of RegPkg.exe itself.
+
There are two other options for specifying how the package will be registered:
+codebase and assembly. When /codebase
+parameter is used (as in the sample above), the registry will point to the location on disk where your
+package is located (see
+
+Assembly.CodeBase property for more information).
+
Another option is the /assembly parameter - this assumbes
+that your VSPackage assembly is located in GAC (Global Assembly Cache). See
+section Installing the Control in GAC for more information.
+
You can check out the registry after the package registration:
+
+
Package Registration for Visual Studio 2012/2013
+
Regrettably, simply registering package is not enough for Visual Studio 2012/2013 to load
+it (see this
+
+blog post). Because of performance optimizations, VS developers removed
+feature that looks for changes in VS registry root and thus we need to call
+
devenv.exe /Setup
+
In order to finish package registration.
+
This call can be very time consuming since Visual Studio 2012/2013 goes through all
+extensions and looks for changes. On the other hand, I tried running devenv.exe with /Setup
+parameter on fresh install of Visual Studio 2012/2013 and it was instant. On older
+installation, however, the operation took well over a minute (it behaves just
+like Microsoft Windows, which progressively slows down during its lifetime).
+
We can speed things up by a little hack. One of the things the /Setup
+does is copying registry keys from HKLM to Visual Studio's 11.0_Config hive (or 12.0_Config, respectively). We can just write registry under this key
+instead of calling devenv.exe and avoid possibly lengthy operation.
+
The hive is located in
+HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config.
+
So let's open and edit the SampleVsPackage.reg file we have
+generated using RegPkg.exe earlier. Here is the modified version where only the
+registry root has been changed:
So in addition to standard package registration, we also write in the
+registry where Visual Studio 2012/2013 user config hive resides. This is sufficient
+for our VSPackage to load.
+
However, this is really a hack - editing of user configuration in registry
+may cause Visual Studio to not load your user settings and show up as when
+running for the first time. I tried this hack on my machine and it worked, but
+there may be some hidden glitches. If you want to follow standard procedure,
+just call "devenv.exe /Setup".
+
Loading VSPackage
+
If you did all the previous steps, your package should load when you open
+Windows Forms Designer and show Toolbox (Cotrol+Alt+X). You can notice your
+package name displaying in status bar for a while, then SampleControl should show up in the
+Toolbox under "Component Owl" tab:
+
+
Displaying Your Extension in VS About Box
+
If you want information about your extension to be visible in Visual Studio
+splash screen and About Box, implement IVsInstalledProduct
+interface:
This code causes the component to show up in the list of "Installed Products"
+in Visual Studio about box:
+
+
As for the splash screen, Visual Studio 2008 used to display extensions in
+its splash screen, but later version do not:
+
+
+
+
Troubleshooting Package Load Failures
+
You may encounter this dialog when playing with packages:
+
+
When you click "No", the package will be skipped later when loading packages.
+You can re-enable loading all packages by running
+
devenv.exe /ResetSkipPkgs
+
To debug package load problem, you can do just what the dialog says. Run
+
devenv.exe /log
+
and then take a look on the ActivityLog.xml (path is shown
+in the dialog). There you can find cause of the problem in one of the "entry"
+elements:
+
+...
+<entry>
+ <record>106</record>
+ <time>2012/10/26 06:07:36.920</time>
+ <type>Error</type>
+ <source>VisualStudio</source>
+ <description>CreateInstance failed for package [ComponentOwl.ToolboxIntegration.SampleVSPackage, SampleVSPackage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=87379c2b0cde9bc3]</description>
+ <guid>{761F0CB7-64C1-4695-91D2-6E3C26C12314}</guid>
+ <hr>80070002</hr>
+ <errorinfo>Could not load file or assembly 'file:///C:\projects\articles\2012-10-22 Visual Studio Toolbox Control Integration\ToolboxIntegration\SampleVSPackage\bin\SampleVSPackage.DLL' or one of its dependencies. The system cannot find the file specified.</errorinfo>
+</entry>
+...
+
+
In this particular case, the problem was caused by changing output path from
+"bin\SampleVSPackage.dll" to "bin\Debug\SampleVSPackage.dll"
+so the file does not longer exist at the location for which it is registered.
+The solution is to either change the location back or unregister the package
+(i.e. remove the corresponding registry entries - the GUID is provided in the
+log).
+
Past Troubles with Package Load Keys
+
The above problem with package load failure happened on Visual Studio 2005
+and 2008 because a Package Load Key (PLK) had to be provided by the VSPackage.
+The PLK is basically a hashcode computed from metadata about package (name,
+author/company, version). The PLK had to be obtained from a website provided by
+Microsoft.
+
I believe PLK caused many troubles and headaches to developers, including
+myself.
+
This is no longer relevant for Visual Studio 2010 and newer (requirement for
+PLKs removed), so we won't discuss this topic in more depth
+
Update Control Already Installed in Toolbox
+
Suppose we have already integrated SampleControl version 3.3.0.0 in the
+Visual Sudio Toolbox:
+
+
We would like to update this control to version 3.4.0.0.
+
First of all, we update assembly information of the SampleControl
+project:
+
+
If we "deploy" (copy) SampleControl.dll to the folder with
+SampleVsPackage.dll where it is registered, the SampleControl will no longer be
+visible in Toolbox, because the control in Toolbox should still be 3.3.0.0 and
+this version is no longer to be found.
+
You don't need to increment assembly version of the SampleVsPackage project,
+but at least you have to increment parameter of the ProvideToolboxItems attribute:
The package need to be re-registered (see section Registering the Package)
+which will effectively update just the "Default Items" value in the Toolbox key:
+
+
This will cause Visual Studio to update your control in the Toolbox:
+
+
Remove Control from the Toolbox
+
Now we would like to remove control from the Visual Studio Toolbox. This
+step can be done by custom uninstaller.
+
One way to do that is to simply unregister the VSPackage using
+RegPkg.exe:
+
32-bit OS: RegPkg.exe /unregister /root:SOFTWARE\Microsoft\VisualStudio\10.0 SampleVsPackage.dll
+64-bit OS: RegPkg.exe /First of all, we update assembly information of the unregisFirst of all, we update assembly information of the ter /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0 SampleVsPackage.dll
+
You can also do this manually by simply removing the registry entry of the
+corresponding package, e.g.:
On Visual Studio 2012/2013, the key need to be removed in user config registry
+hive or call "devenv.exe /Setup" after removing the registry key in HKLM. For
+more information, see section Package Registration for Visual Studio 2012/2013.
Microsoft have removed most /po
+f the drawbacks of VSI packages by introducing VSIX. The
+price is that VSIX is a little bit more complicated and Visual Studio 2008 is no
+longer supported.
+
There are two versions of VSIX Schema. Version 1.0 is what Visual Studio 2010
+understand. There is also version 2.0 for Visual Studio 2012/2013. We want a VSIX
+Package compatible with both, so we will work in Visual Studio 2010.
+
Create a new Project from Template
+
If you have Visual Studio 2010 SDK installed, you can create a new VSIX
+package project with control from a template.
+
Select "File - New - Project.." (Control+Shift+N) and
+then select the "Windows Forms Toolbox Control" or "WPF
+Toolbox Control" template:
+
+
The projects is basically a VSPackage wrapped in VSIX container after
+build. The package assembly also contain the control class named
+ToolboxControl.
+
There are three important files generated by the template:
+
+
ProvideToolboxControlAttribute.cs - This is attribute
+ for ToolboxControl class. We will discuss it later.
+
source.extension.vsixmanifest - This is manifest XML
+ file for our VSIX package. It contains all information about the package and
+ what it contains.
+
ToolboxControl.cs - This is a sample control to be
+ installed in Visual Studio Toolbox.
+
+
Create a new Project from VSPackage
+
We can also start with VSPackage like the one we have already created in
+previous section. I will create a new VSPackage project (as in previous
+chapter), name it SampleVsixPackage and configure it according
+to "Windows Forms Toolbox Control" template to show you all the differences.
+
The basic configuration of source.extension.vsixmanifest is
+the same as in previous chapter.
+
Project properties differs from VSPackage we have created earlier on the VSIX
+tab, where we have the first two check boxes checked:
+
+
Update the Manifest File
+
Double-click on the source.extension.vsixmanifest file to
+open up the VSIX Manifest Designer:
+
+
If you are not sure about some part of the form, please take a look on
+section Create VSPackage Project, where the form is described in more
+detail.
+
In addition to previous VSPackage project, I have also filled the following
+optional boxes:
+
+
License Terms - If you have EULA or other licence in
+ TXT or RTF format, you can browse for it.
+
Icon - You can browse for an icon representing the
+ extension. It should be 32x32 pixels large, PNG, BMP, JPEG or ICO image
+ format.
+
Preview Image - Thumbnail image representing the
+ extension. It should be 200x200 pixels large, PNG, BMP or JPEG image format.
+
More Info URL - URL of a website containing more
+ information about the extension.
+
Getting Started Guide - URL of a website with
+ documentation; you can also provide relative path to HTML file with the
+ local documentation.
+
+
Add Control
+
Let's create a new WPF control within the SampleVsixPackage
+project itself. I will name it SampleWpfControl to distinguish
+it from SampleControl we have created earlier.
+
To ensure our control will show up in Toolbox of Visual Studio 2012/2013, we have
+to decorate the SampleWpfControl class by
+ProvideToolboxControlAttribute:
This code is generated if you create project from template.
+
The project in Solution Explorer should look like this:
+
+
+
Adding Controls from Other Projects
+
What if we would like to use SampleControl.dll as in the VSI
+package scenario?
+
Of course, we can click "Add Content" in the VSIX Manifest designer and
+simply add "Toolbox Control" content from other project:
+
+
However, this is possible only if the SampleControl project
+itself is a package project!
+
Lucklily, since the VSIX package is still just a ZIP archive, we can take a
+look on how to add such external DLLs to it manually.
+
Setting Up VSIX Installer
+
The VSIX Installer tool (VsixInstaller.exe) is located in
+Visual Studio's binary folder:
+
32-bit OS: c:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe
+64-bit OS: c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe
+
You can hit F6 and Visual Studio will build your project to create
+SampleVsixPackage.vsix file. This is our VSIX package.
+
The VSIX Installer should be associated with the .VSIX file extension, so it is
+usually possible
+to just double-click on the file and see the VSIX installer.
+
The installation can fail in the very first step:
+
+
This problem appears if you have invalid manifest file. If this happen, open
+source.extension.vsixmanifest and fill in all missing data.
+Furthermore, you can check if the XML is valid according to
+VSIX Extension
+Schema.
+
Now we are able to rebuild and run the VSIX installer again:
+
+
Make the VSIX Package Compatible with Visual Studio 2012/2013
+
To make our VSIX package working with Visual Studio 2012 and newer, we need
+to manually update the manifest file. Select the
+source.extension.vsixmanifest file and press F7 (View Code):
The bolded text have been added. I have simply added a new
+VisualStudio element with higher version and all the editions (they are
+relevant for VS 2012 and 2013 as its own template also generates these).
+
The VSIX installer will show Visual Studio 2012 options as
+well after this update (if installed, of course):
+
+
Please note that Visual Studio 2012/2013 also works with 2.0 version of the
+schema, so if you create VSIX package in Visual Studio 2012/2013, it won't be
+compatible with 2010. The solution is hence to use 1.0 version of the schema
+and add support for newer Visual Studio as described earlier.
+
A great advantage over VSI package is that installation of Toolbox control is
+really fast with VSIX.
+
Regrettably, the control won't show up in Visual Studio 2012/2013 Toolbox in its
+default configuration. You need to enable loading-per user extensions (this
+option is enabled by default in Visual Studio 2010):
+
+
Signing the VSIX Package
+
Unlike older VSI package, there is no nag screen when the package is not
+signed. Instead, a label appears informing user that the package is not
+signed.
+
To sign a VSIX package, we need PackageSignatureManager from
+System.IO.Packaging (WindowsBase.dll). I made a simple command-line application called SignVsix (you can
+find it in sample source code) that takes three arguments (VSIX file path, PFX
+certificate path and password for the certificate):
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Packaging;
+using System.Security.Cryptography;
+using System.Security.Cryptography.X509Certificates;
+
+internal class Program
+{
+ private static void Main(string[] args)
+ {
+ // first argument - path to VSIX package
+ string paramPathPackage = args[0].Replace("\"", "");
+ // second argument - path to PFX certificate
+ string paramPathCertificate = args[1].Replace("\"", "");
+ // third argument - password for the certificate
+ string paramPassword = args[2];
+
+ // open VSIX package
+ Package package = Package.Open(paramPathPackage, FileMode.Open);
+
+ // load certificate
+ byte[] certificate = File.ReadAllBytes(paramPathCertificate);
+
+ // sign all parts of the package
+ var signatureManager = new PackageDigitalSignatureManager(package)
+ {
+ CertificateOption = CertificateEmbeddingOption.InSignaturePart
+ };
+
+ List<Uri> partsToSign = new List<Uri>();
+
+ foreach (PackagePart packagePart in package.GetParts())
+ {
+ partsToSign.Add(packagePart.Uri);
+ }
+
+ partsToSign.Add(PackUriHelper.GetRelationshipPartUri(signatureManager.SignatureOrigin));
+ partsToSign.Add(signatureManager.SignatureOrigin);
+ partsToSign.Add(PackUriHelper.GetRelationshipPartUri(new Uri("/", UriKind.RelativeOrAbsolute)));
+
+ try
+ {
+ signatureManager.Sign(partsToSign, new X509Certificate2(certificate, paramPassword));
+ }
+ catch (CryptographicException cryptographicException)
+ {
+ Console.WriteLine("Signing failed: {0}", cryptographicException.Message);
+ }
+ }
+}
+
When the file is signed, VSIX Installer shows label "Digital Signature:
+<Author Name>" on the first page:
+
+
Dissecting the VSIX Package
+
If you look on the project references, you can see reference to
+Microsoft.VisualStudio.Shell.Immutable.10. This reference points to
+Visual Studio 2010 SDK and we cannot expect this dependency present on end-user's machine. This
+library contains ProvideToolboxControlAttribute class, which is
+used by our ToolboxControl.
+
Since a software development company may want to develop many components, it would be nice to have an
+universal VSIX package which can be adjusted for any control.
+
Let's take a look on the ToolboxControl.vsix. It is simply a
+ZIP archive containing the manifest, resources, ToolboxControl binary and a
+ToolboxControl.pkgdef file. If we look through all its content,
+we easily generate our own VSIX packages on demand, even without Visual Studio.
+There should also be a programmatic way on generating VSIX packages using
+classes from System.IO.Packaging.
+
Update Toolbox Control via VSIX Package
+
If you made changes to your control and want to re-install the package, an
+error message appear:
+
+
In order to provide an update, you need to increment version number in the
+VSIX manifest:
+
+
You can also increment version number in the Package class attribute, but
+this is not necessary for the VSIX to perform update:
Of course, you can also increment version of the assembly.
+
Uninstall the VSIX Package
+
The VSIX Installer can be used to uninstall control from the Toolbox via
+/uninstall parameter followed by package ID (the constant located in
+Guids.cs: GuidList.guidSampleVsixPackagePkgString):
It is also possible to uninstall VSIX Package manually using
+Extension Manager (Tools - Extension Manager...). In Visual Studio
+2012/2013, the corresponding dialog is called Extensions and Updates
+(Tools - Extensions and Updates...).
+
+
Quiet Mode
+
Both installation and uninstallation can be performed in quiet mode by using /quiet parameter. This will suppress
+user interface of the installer, which is handy when you want to automate
+Toolbox control integration with your custom installer.
Since .NET Framework is backward-compatible, building a component on lowest
+possible framework ensures compatibility with higher versions as well.
+
I heard from several users that the component may not be displayed in Toolbox
+although it seems that the Toolbox respects the .NET compatibility and display
+.NET 2.0 component even when working in .NET 4.0 (Client Profile) project.
+
There is also a scenario where you want to support additional features from
+higher version of .NET (for example, drawing text using GDI+ in .NET 2.0 and
+drawing text using WPF in .NET 3.5 and higher). You may also want to add
+extensive Windows Forms Designer support, which is not available in Client
+Profile framework.
+
The solution to this is to build several DLLs, each with different features
+and possibly different target frameworks. Then integrate all the assemblies.
+
This does not pose a problem when DTE approach is used,
+alhtough it is better to give each version of the component unique name or place
+them in separate tabs (e.g. "Component Owl WinForms - .NET 2.0").
+
When TCI approach is used, each version of the assembly
+requires different public key token, because they have to reside in GAC
+side-by-side. Furthermore, they need a separate registry key based on the public
+key token.
+
The VSI and VSIX approaches require
+renaming the component or customizing Toolbox tab in the
+ProvideToolboxControlAttribute (see part Toolbox Control Integration using
+VSIX Packages for more information).
+
The VSPackage approach allows you to place all the versions
+in Visual Studio Toolbox under their respective tabs.
+
When manual approach is used, you can of course add each
+version of the assembly separately and also create separate tabs in the Toolbox.
The attached sample source is a Visual Studio 2010 Solution containing
+implementations of all the presented approaches. The binaries are contained
+under "bin\Release" subfolders and batch files (.CMD extension) are provided
+where appropriate.
You can find the following folders in the archive:
+
DteToolboxInstaller - A command-line application for
+installing/uninstalling assemblies in VS Toolbox using Visual Studio Automation
+Object Model (DTE). Custom tab name and VS version can be specified. The tool
+can be used in real-world application.
+
SampleControl - Windows Forms control for testing the
+integration.
+
SampleVsixPackage - VSIX package project (basically a
+VSPackage that is further packaged with the sample control), the resulting
+package can be installed by VSIX Installer that comes with Visual Studio.
+
SampleVsPackage - VSPackage that is able to install all
+control assemblies located in its own folder. Contains batch files for package
+registration/unregistration.
+
SignVsix - A command-line application for signing VSIX
+packages. Sample batch file is provided. Valid PFX certificate need to be
+provided by the user.
+
TciToolboxInstaller - A command-line application for
+installing/uninstalling assemblies in VS Toolbox using Toolbox Control Installer
+package (but does not depend on it). Custom tab name and VS version can be
+specified. The tool can be used in real-world application.
+
VSI - Basic setting for creating VSI package and a sample
+VSI package created from the files. Batch file for signing the VSI package is
+provided.
Still, the Express edition is much better than the regular ListView included with Visual Studio
+
100% free
+
Designed as a replacement for the regular .NET list view control.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005 (and newer), with full designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
Uses current Windows theme (including Vista/Windows 7 look)
+
Written in pure managed C# code. It is fast, light-weight and optimized.
+
Easy XCOPY deployment, single DLL file with small size when compressed.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
Tested in the real world by thousands of users
+
+
+
Why use Better ListView Express?
+
+
There is every reason to go for Better ListView Express, unless you need even more features available in the full version. It looks better than the regular list view, has more features, less limitations, no known bugs, is free, and you can start using it immediately. Just look at the comparison chart!
+
+
Your projects will look better and more professional. You will look better and more professional. You will have more options. You will have more features. You will have less limitations. AND IT'S FREE!
+
+
There is very little to learn, it works the same way as the regular list view, just all classes, structures, enums etc. have a "Better" prefix.
+
+
But! Before downloading the Express edition, consider downloading the full version instead. It comes with fully functional trial and has lots of additional extremely useful extra features and improvements.
+
+
+
Feature highlights
+
+
+It's an odd thing when you're inspired by a form component, but Component Owl
+with their Better ListView has done it. Love its native feel.
+
Daniel N, USA
+
+
Improved Groups
+
+Groups in Better ListView Express are much more powerful, flexible and easier to use than in the regular listview. Groups are also focusable and support images.
+
+
+
+
Images in column headers, sub-items, groups
+
+You can use images in column headers, sub-items, items, groups. Custom image sizes are supported. Regular listview for .NET included with Visual Studio supports only one image per item, and doesn't support sub-item images. Better ListView removes these limitations and has excellent image support.
+
+
+
+
Background image support
+
+Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
+
+
+
+
Checkboxes in all views
+
+You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
+
+
+
+
Uses current Windows theme
+
+Instead of implementing custom, un-native look and feel, Better ListView Express always automatically fully uses the current system theme. It supports Aero as well. Better ListView Express always looks great and feels right to the user. More about Better ListView native theme support.
+
+
XML and Binary serialization
+
+All Better ListView Express objects can be serialized to XML or binary form. This allows you to easily implement data persistence.
+
+
Double-buffered and flicker free
+
+Better ListView Express is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView Express. Better ListView Express is optimized for 100k+ items.
+
+
Owner drawing
+
+Better ListView Express allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView Express without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
+
+
+
+
Label-edit for sub-items
+
+Take advantage of the inbuilt label editing support, which includes not just textbox edit, but also combobox edit and date picker edit.
+
+
+
+
Embedded controls for custom label edit
+
+Not only you can use the inbuilt label-editing controls, you can also create your own controls to edit items and sub-items.
+
+
+
+
Advanced hit-test with detailed information
+The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
+
+
+
+
Inbuilt sorting
+
+You do not need to code your own item comparers any more! Better ListView has inbuilt list view sorting that works out of the box. If custom comparer is needed, you can inherit from the Better ListView comparer to save development time. The full version also supports multi-column sorting and other advanced features.
+
+
Automatic layout
+
+Better ListView Express can automatically size items and images using intelligent algorithms. Whatever you put into Better ListView Express, the presentation will always look great.
+
+
What users and press say about Better ListView
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+
DevProConnections.com Review
+
+
+Better ListView is a must for a toolbox of any serious .NET developer.
+
Better ListView is a list view control for .NET Windows Forms
+
Designed as a replacement for the regular .NET list view control.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
Better ListView has more features and flexibility, always uses the current system theme (including Aero support), and removes limitations of the regular .NET list view control.
+
Minimum learning needed. Better ListView can be used just like the regular list view.
+
Written in pure managed C# code. It is fast, light-weight and optimized for 10k+ items.
+
Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
Tested in the real world by thousands of users
+
+
+
+
+
Extra features summary
+
+Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag & drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
+
+
+Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.
+
Göran Alfvén, Sweden
+
+
+The control is very easy and intuitive to use and is well documented.
+
DevProConnections.com Review
+
+
+Better List View is awesome.
+
Daniel N
+
+
Hierarchical items
+
+You can create tree-like structures in Better ListView; inbuilt drag & drop hierarchical reordering of items.
+
+
Improved grouping
+
+Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
+
+
Save/load contents with 1 line of code
+
+You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
+
+
Double-buffered and flicker free
+
+Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
+
+
Column header images
+
+You can use images in column headers. Custom image sizes are supported.
+
+
+
+
Sub-item images
+
+You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
+
+
Image-List and Image Support
+
+Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
+
+
Custom list view Image size
+
+You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
+
+
Drag & drop with insertion mark
+
+Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
+
+
+
+
List view item reordering
+
+Better ListView has inbuilt item reordering and item drag & drop inserting at the position specified by user. Drag & drop preview is shown using an insertion mark.
+
+
Column-header reordering
+
+Better ListView has inbuilt easy drag & drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
+
+
+
+
Auto-scroll for column header reordering and item reordering
+
+Better ListView has inbuilt auto-scrolling for column header and item reordering.
+
+
Column headers can be shown in all views
+
+Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
+
+
+
+
Thumbnails view mode
+
+Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
+
+
Image shadows, borders and padding
+All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
+
+Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
+
+
+
+
Multi-column sorting
+
+You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
+
+
+
+
Inbuilt sorting and natural sorting
+
+Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
+
+
Richer event data
+
+Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
+
+
Checkboxes in all views
+
+You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
+
+
+
+
Three state checkboxes
+Three state checkboxes are supported in Better ListView:
+
+
+
+
Hide or show checkboxes of specific ListView Items
+
+You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
+
+
+
+
Powerful list view tooltips
+
+You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
+
+
+
+
Uses current Windows theme
+
+Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
+
+
XML and binary serialization of everything
+
+Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
+
+
Owner drawing
+
+Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
+
+
+
+
Multi-line items
+
+Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
+
+
+
+
Background image support
+
+Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
+
+
+
+
Context menu for column headers, list items, and empty area
+
+Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
+
+
+
+
Advanced hit-test with detailed information
+The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
+
+
+
+
Customizable search-by-typing
+
+Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
+
+
Display text when the list view is empty
+You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
+
+
+
+
Embed controls for item editing
+Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
+
+
+
+
ListView item text formatting
+
+Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
+
+
Focusable ListView sub-items and groups
+
+Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
+
+
+You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
+
+
+
+
+It's an odd thing when you're inspired by a form component, but Component Owl
+with their Better ListView has done it. Love its native feel.
+
Daniel N, USA
+
+
More advantages of our improved list view component:
+
+
Developer friendly: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. Save time and ship sooner.
+
Better ListView has improved usability and fixed behavior. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look & feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. Using Better ListView is pleasant for users. Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.
+
Guaranteed support and continued development: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular Swift To-Do List and ImagingShop). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.
+
Tested in real world applications by thousands of users: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is extremely stable.
+
Better ListView does not inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.
+
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+
.NET Framework 2.0 / 3.0 / 3.5 / 4.0 (make sure it is
+ not a "Client Profile" or "Compact Framework" - these are not
+ supported)
+
+
+
Visual C# or Visual Basic
+
+
+
+Step-by-step Tutorial
+
+
+
Start with a new "Windows Forms Application"
+ project. A designer with empty Form appears. Display the
+ Toolbox window (View -
+ Toolbox):
+
+
+
+
The Toolbox should contain a new tab called
+ "ComponentOwl" containing all the installed component
+ from ComponentOwl, including Better ListView.
+
+
+
Express editions of ComponentOwl Controls are listed in separate
+ tab called "ComponentOwl (Express Controls)".
+
+
If you chose not to integrate component in
+ Visual Studio during installation or the component have not been
+ successfully integrated, please follow the next steps.
+
+
Right-click on empty area of the Toolbox window and select
+ "Choose Items...":
+
+
+
+
In the "Choose Toolbox Items" dialog, select
+ the ".NET Framework Components" tab. If the comonent
+ has been properly installed, it will be already listed here. If you find
+ it, make sure the newest version is checked (e.g. 2.5.2.0 instead of
+ 1.0.0.0) and click "OK":
+
+
+
+
If you need other than installed version (e.g. DLL to match for
+ specific .NET Framework version) click on the
+ "Browse..." button:
+
+
+
+
Browse for the betterlistview.dll file containing the
+ component.
+
+
+
If you use Better ListView Express edition,
+ locate component named BetterListViewExpress or DLL named
+ betterlistviewexpress.dll.
+
+
The location depends on where you installed the product. The default
+ location is:
You can choose the file right within
+ "Redistributable" folder. This is .NET 2.0 component
+ compatible with .NET Framework 2.0 or higher. If you want binary for a
+ specific .NET version, choose the file from ".NET Framework
+ Specific" folder:
+
+
+
+
Make sure the check box next to
+ "BetterListView" is checked and click
+ "OK":
+
+
+
+
Now the component should appear in your Toolbox:
+
+
+
+
Select the component and place it on designer surface:
+
+
+
+
Now you can design Better ListView the same way as any other
+ control:
+
+
+
+
+
+Installation
+ Troubleshooting
+
+
+
If the component does not appear in Toolbox, make sure that your
+ target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5
+ or 4.0. The Compact Framework or Client Profile are not supported.
+
+
You can also try the "Reset Toolbox" option
+ from the Toolbox context menu, restart Visual Studio and try to add the
+ control again.
+
+
Sometimes even the Toolbox can get corrupted (known issue on Visual
+ Studio 2010) and its cache needs to be cleared. Simply remove all
+ ".tbd" files from this folder:
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+
+
Make sure the Visual Studio is not running when removing the files.
+ The Toolbox should reload its default items when opened.
+
+
+
+
+
+
+
+Migrating from .NET ListView
+
+
+
We did our best to make Better ListView as similar to regular .NET
+ ListView as possible. Better ListView, however, is not a ListView-derived
+ control - it is completely autonomous WinForms control. The following
+ rules of thumb will help you to migrate from ListView to Better
+ ListView:
+
+
+
+
Most structures are named equally, only with
+ Better- prefix (e.g.
+ BetterListViewItem instead of
+ ListViewItem).
+
+
+
Better ListView does not use the same
+ structures and classes as .NET ListView (e.g. use
+ ComponentOwl.BetterListView.BetterListViewView instead of
+ System.Windows.Forms.View).
+
+
+
Many features and structures of Better ListView are richer (e.g.
+ insertion mark, Drag and Drop functionality), so they contain extra
+ overrides for constructors, methods and properties - sometimes they
+ are used differently and behave little bit differently; look in the
+ documentation first to avoid confusion.
+
+
+
To compare usage of .NET ListView and Better ListView, consider the
+ following code using the regular .NET
+ ListView:
Dim listView As New BetterListView()
+
+Dim item As New BetterListViewItem("new item")
+
+listView.Items.Add(item)
+
+listView.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))
+
+
+
+Learning resources and getting
+ support
+
+
+
The documentation and learning resources include:
+
+
+
+
HTML documentation with over 30 chapters
+ (the Quick Start guide you are reading right now is the second
+ chapter)
+
+
+
Sample projects in C# and VB.NET
+
+
+
Samples explorer (which includes source code snippets as
+ well)
+
+
+
Class reference (technical documentation)
+
+
+
You can find all these resources in Start Menu - Better
+ ListView.
What's New in Better ListView Express since version 3.14.0
+
+
+
+
+
+
+
+
+
+
Changes in version 3.14.0 (Apr 08, 2015)
+
* Fixed scrolling when all items are unselectable
+
+
+
+
+
+
Changes in version 3.9.1 (May 19, 2014)
+
* Fixed disappearing items after scrolling and item reordering in LargeIcon view with multi-line items
+
+
+
+
+
+
Changes in version 3.9.0 (Apr 22, 2014)
+
* Added integration with Visual Studio 2013
* Added custom date format support in BetterListViewDateTimePickerEmbeddedControl
* Added ItemReordered event
* Fixed FindItemsWithText method call when working with invisible items
* Fixed saving form after editing tooltips in Windows Forms Designer
+
+
+
+
+
+
Changes in version 3.8.3 (Feb 03, 2014)
+
* Fixed sorting of items with missing sub-items or Key set to null
+
+
+
+
+
+
Changes in version 3.8.2 (Oct 21, 2013)
+
* Fixed pixel precision bug in column selection
* Fixed proper scrolling on combined items using EnsureVisible method
* Fixed drawing item selection on MouseUp in some cases (click directly on text of previously selected item in Details view)
+
+
+
+
+
+
Changes in version 3.8.1 (Sep 20, 2013)
+
* Fixed search highlight in other than Details view
* Improved responsiveness (optimized control refreshing on control state transitions)
* Fixed BetterListViewColumnHeader.DisplayIndex property value not being updated at the time of ColumnHeaderReordered event
* Fixed bug in hit test invalidation optimization causing slower redrawing when mouse moves over large control with many items and columns
+
+
+
+
+
+
Changes in version 3.7.6 (Jul 06, 2013)
+
* Fixed item deselection when clicking on client area
+
+
+
+
+
+
Changes in version 3.7.5 (Jun 24, 2013)
+
* Fixed item selection by clicking on group header
+
+
+
+
+
+
Changes in version 3.7.4 (Jun 05, 2013)
+
* Removed beep when no item is found though single keypress (keyboard search)
* Fixed keyboard search
+
+
+
+
+
+
Changes in version 3.7.3 (May 30, 2013)
+
* Fixed keyboard search with 'Substring' setting and single keystroke
* Fixed rare but possible NullRefereceException in OnMouseUp method
+
+
+
+
+
+
Changes in version 3.7.2 (Apr 10, 2013)
+
* SuspendSelectionChanged renamed to SuppressSelectionChanged
* Fixed selection display when FullRowSelect is false in Details view
* Fixed grid lines display when HeaderStyle is None in Details view
* Fixed closing floating window in Samples Explorer
+
+
+
+
+
+
Changes in version 3.7.1 (Mar 28, 2013)
+
* Fixed Visual Studio Toolbox integration on Windows XP
+
+
+
+
+
+
Changes in version 3.7.0 (Mar 19, 2013)
+
* Added HScrollHeight, VScrollWidth properties
+
+
+
+
+
+
Changes in version 3.6.1 (Mar 01, 2013)
+
* Fixed unnecessary redrawing during MouseMove
+
+
+
+
+
+
Changes in version 3.6.0 (Feb 28, 2013)
+
* Fixed possible exception when invoking context menu on an item by mouse
* Fixed Samples Explorer "View Source" buttons being disabled
* Fixed public constructor parameters being obfuscated
+
+
+
+
+
+
Changes in version 3.5.0 (Jan 28, 2013)
+
* Added owner drawing support for drag selection
* Added data binding customization
+
+
+
+
+
+
Changes in version 3.4.3 (Jan 18, 2013)
+
* Fixed hidden Embedded Controls feature
+
+
+
+
+
+
Changes in version 3.4.2 (Jan 12, 2013)
+
* Column auto resizing can be done separately for column header, column content or both (BetterListViewColumnHeaderAutoResizeStyle changed to flags enum)
* Fixed DoubleClick and ItemActivate not raised when the redrawing takes too much time between successive clicks
* Fixed binding DataTable in the Data Binding sample
* Fixed unnecessary refreshes during binding a table with multiple columns
+
+
+
+
+
+
Changes in version 3.4.1 (Dec 20, 2012)
+
* Added possibility of changing label being edited by setting Label property in BeforeLabelEdit and AfterLabelEditCancel event data
* Improved Visual Studio Toolbox integration for more versions of .NET Framework, including Client Profile
* Fixed possible NullReferenceException during clicking on column headers (negative mouse cursor coordinates probably due to mouse movement)
* Fixed LabelEdit property not serializing to designer generated code
* Fixed IndexOf() method on collections to return -1 if an element is not contained in the collection
* Fixed case where clickable/sortable/unsortable column is clicked and mouse cursor moves quickly away
* Fixed column auto resizing to account for groups
* Fixed not allowing to put duplicate references in SelectedItems.Set(IEnumerable) or SelectedItems.AddRange(IEnumerable)
+
+
+
+
+
+
Changes in version 3.3.2 (Dec 08, 2012)
+
* Fixed moving mouse cursor over an item that is partially scrolled out so that the text boundaries have negative top coordinate
* Fixed ItemActivate not raised on slow computers when item is double-clicked and mouse cursor moved quickly away
+
+
+
+
+
+
Changes in version 3.3.1 (Dec 06, 2012)
+
* Improved grid lines appearance
* Fixed possible improper behavior on slower computers (or lagging code because of too much drawing etc.)
* Fixed item not selected clicked and mouse cursor is immediately moved away
* Fixed drag selection commited when item is almost double-clicked (second mouse button release not done) and then mouse is moved before button is released
+
+
+
+
+
+
Changes in version 3.3.0 (Nov 30, 2012)
+
* Added FIPS-compliance (improved security and compatibility)
* Improved Samples Explorer
* Fixed commencing mouse drag selecting on double-click and mouse move in quick succession
* Fixed AutoResizeColumns updating just the last column
* Fixed column header sort glyph placement when the column is sorted and no items are present in the list
+
+
+
+
+
+
Changes in version 3.2.2 (Oct 09, 2012)
+
* Added support for TypeConverters when adding custom objects to collections
* Fixed reordering item in an empty group
+
+
+
+
+
+
Changes in version 3.2.1 (Sep 18, 2012)
+
* Added column reordering
* Allowed setting Font property to null on column headers, groups, items and sub-items
* Fixed cycling between items during keyboard search
* Fixed code generation for SearchSettings property
* Fixed NullReferenceException when edited sub-item is switched during label editing
* Fixed multi-line text wrapping when BetterListViewItem.CheckBoxAppearance is set to None
* Fixed sorted column background being drawn in other than Details view
* Fixed unsufficient vertical scroll bar maximum when column headers are added in first initialization between BeginUpdate()/EndUpdate()
* Fixed double-click on column containing hidden check box
+
+
+
+
+
+
Changes in version 3.2.0 (Aug 27, 2012)
+
* Added HeaderStyle property
* Added BetterListViewColumnHeaderStyle.None enum value (indicates that column header is not displayed, but corresponding sub-items are)
* Improved mouse and keyboard selections to behave more like Windows Explorer
* Control+Shift modifier keys behave the same way as Control modifier key alone in Multi-column Sorting
* Hidden ShowItemExpandButtons property in Express edition
* Fixed possible multiselection using Control+click when MultiSelect is false
Better ListView is a list view control for .NET Windows Forms
+
Designed as a replacement for the regular .NET list view control.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
Better ListView has more features and flexibility, always uses the current system theme (including Aero support), and removes limitations of the regular .NET list view control.
+
Minimum learning needed. Better ListView can be used just like the regular list view.
+
Written in pure managed C# code. It is fast, light-weight and optimized for 10k+ items.
+
Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
Tested in the real world by thousands of users
+
+
+
+
+
Extra features summary
+
+Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag & drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
+
+
+Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.
+
Göran Alfvén, Sweden
+
+
+The control is very easy and intuitive to use and is well documented.
+
DevProConnections.com Review
+
+
+Better List View is awesome.
+
Daniel N
+
+
Hierarchical items
+
+You can create tree-like structures in Better ListView; inbuilt drag & drop hierarchical reordering of items.
+
+
Improved grouping
+
+Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
+
+
Save/load contents with 1 line of code
+
+You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
+
+
Double-buffered and flicker free
+
+Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
+
+
Column header images
+
+You can use images in column headers. Custom image sizes are supported.
+
+
+
+
Sub-item images
+
+You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
+
+
Image-List and Image Support
+
+Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
+
+
Custom list view Image size
+
+You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
+
+
Drag & drop with insertion mark
+
+Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
+
+
+
+
List view item reordering
+
+Better ListView has inbuilt item reordering and item drag & drop inserting at the position specified by user. Drag & drop preview is shown using an insertion mark.
+
+
Column-header reordering
+
+Better ListView has inbuilt easy drag & drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
+
+
+
+
Auto-scroll for column header reordering and item reordering
+
+Better ListView has inbuilt auto-scrolling for column header and item reordering.
+
+
Column headers can be shown in all views
+
+Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
+
+
+
+
Thumbnails view mode
+
+Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
+
+
Image shadows, borders and padding
+All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
+
+Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
+
+
+
+
Multi-column sorting
+
+You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
+
+
+
+
Inbuilt sorting and natural sorting
+
+Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
+
+
Richer event data
+
+Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
+
+
Checkboxes in all views
+
+You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
+
+
+
+
Three state checkboxes
+Three state checkboxes are supported in Better ListView:
+
+
+
+
Hide or show checkboxes of specific ListView Items
+
+You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
+
+
+
+
Powerful list view tooltips
+
+You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
+
+
+
+
Uses current Windows theme
+
+Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
+
+
XML and binary serialization of everything
+
+Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
+
+
Owner drawing
+
+Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
+
+
+
+
Multi-line items
+
+Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
+
+
+
+
Background image support
+
+Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
+
+
+
+
Context menu for column headers, list items, and empty area
+
+Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
+
+
+
+
Advanced hit-test with detailed information
+The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
+
+
+
+
Customizable search-by-typing
+
+Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
+
+
Display text when the list view is empty
+You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
+
+
+
+
Embed controls for item editing
+Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
+
+
+
+
ListView item text formatting
+
+Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
+
+
Focusable ListView sub-items and groups
+
+Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
+
+
+You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
+
+
+
+
+It's an odd thing when you're inspired by a form component, but Component Owl
+with their Better ListView has done it. Love its native feel.
+
Daniel N, USA
+
+
More advantages of our improved list view component:
+
+
Developer friendly: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. Save time and ship sooner.
+
Better ListView has improved usability and fixed behavior. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look & feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. Using Better ListView is pleasant for users. Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.
+
Guaranteed support and continued development: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular Swift To-Do List and ImagingShop). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.
+
Tested in real world applications by thousands of users: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is extremely stable.
+
Better ListView does not inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.
+
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+
Better ListView is a list view control for .NET Windows Forms
+
Designed as a replacement for the regular .NET list view control.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
Better ListView has more features and flexibility, always uses the current system theme (including Aero support), and removes limitations of the regular .NET list view control.
+
Minimum learning needed. Better ListView can be used just like the regular list view.
+
Written in pure managed C# code. It is fast, light-weight and optimized for 10k+ items.
+
Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
Tested in the real world by thousands of users
+
+
+
+
+
Extra features summary
+
+Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag & drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
+
+
+Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.
+
Göran Alfvén, Sweden
+
+
+The control is very easy and intuitive to use and is well documented.
+
DevProConnections.com Review
+
+
+Better List View is awesome.
+
Daniel N
+
+
Hierarchical items
+
+You can create tree-like structures in Better ListView; inbuilt drag & drop hierarchical reordering of items.
+
+
Improved grouping
+
+Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
+
+
Save/load contents with 1 line of code
+
+You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
+
+
Double-buffered and flicker free
+
+Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
+
+
Column header images
+
+You can use images in column headers. Custom image sizes are supported.
+
+
+
+
Sub-item images
+
+You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
+
+
Image-List and Image Support
+
+Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
+
+
Custom list view Image size
+
+You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
+
+
Drag & drop with insertion mark
+
+Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
+
+
+
+
List view item reordering
+
+Better ListView has inbuilt item reordering and item drag & drop inserting at the position specified by user. Drag & drop preview is shown using an insertion mark.
+
+
Column-header reordering
+
+Better ListView has inbuilt easy drag & drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
+
+
+
+
Auto-scroll for column header reordering and item reordering
+
+Better ListView has inbuilt auto-scrolling for column header and item reordering.
+
+
Column headers can be shown in all views
+
+Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
+
+
+
+
Thumbnails view mode
+
+Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
+
+
Image shadows, borders and padding
+All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
+
+Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
+
+
+
+
Multi-column sorting
+
+You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
+
+
+
+
Inbuilt sorting and natural sorting
+
+Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
+
+
Richer event data
+
+Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
+
+
Checkboxes in all views
+
+You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
+
+
+
+
Three state checkboxes
+Three state checkboxes are supported in Better ListView:
+
+
+
+
Hide or show checkboxes of specific ListView Items
+
+You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
+
+
+
+
Powerful list view tooltips
+
+You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
+
+
+
+
Uses current Windows theme
+
+Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
+
+
XML and binary serialization of everything
+
+Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
+
+
Owner drawing
+
+Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
+
+
+
+
Multi-line items
+
+Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
+
+
+
+
Background image support
+
+Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
+
+
+
+
Context menu for column headers, list items, and empty area
+
+Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
+
+
+
+
Advanced hit-test with detailed information
+The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
+
+
+
+
Customizable search-by-typing
+
+Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
+
+
Display text when the list view is empty
+You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
+
+
+
+
Embed controls for item editing
+Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
+
+
+
+
ListView item text formatting
+
+Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
+
+
Focusable ListView sub-items and groups
+
+Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
+
+
+You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
+
+
+
+
+It's an odd thing when you're inspired by a form component, but Component Owl
+with their Better ListView has done it. Love its native feel.
+
Daniel N, USA
+
+
More advantages of our improved list view component:
+
+
Developer friendly: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. Save time and ship sooner.
+
Better ListView has improved usability and fixed behavior. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look & feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. Using Better ListView is pleasant for users. Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.
+
Guaranteed support and continued development: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular Swift To-Do List and ImagingShop). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.
+
Tested in real world applications by thousands of users: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is extremely stable.
+
Better ListView does not inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.
+
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+
The tables below explain the main differences between regular .NET list view and Better ListView. However, it would be a mistake to look on Better ListView just as an improved or fixed listview - it can do so much more. The Overview and our blog highlights many of these extra features and possibilities.
+
+
Better behavior and fixed issues:
+
+
+
+
Regular .NET ListView Control
+
Better ListView control
+
+
+
Some events fire twice bug
+
Fixed
+
+
+
Selection behavior different from Windows Explorer
+
Fixed; Behaves as expected
+
+
+
Drag & Drop behavior different from Windows Explorer
+
Fixed; Behaves as expected
+
+
+
Checkboxes do not stay in the first column when the first column is reordered
+
Fixed; Behaves as expected
+
+
+
Non-standard checkboxes behavior (e.g. when using spacebar)
+
Fixed
+
+
+
Non-standard look, incompatible with system themes
+
Fixed; Always uses system theme. Looks great on all Windows versions. Works with Windows 7 themes and Aero
+
+
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+
DevProConnections.com Review
+
+
Removed limitations:
+
+
+
+
Regular .NET ListView Control
+
Better ListView control
+
+
+
Just one image per item
+
Enhanced; Each sub-item can have image
+
+
+
No group header customization
+
Added, each group header is fully customizable
+
+
+
ImageList must be used to display images
+
Both ImageList and Image instances can be used
+
+
+
Simple sorting only
+
Multi-column sorting; Users can use Shift+Click to add additional columns to the sort
+
+
+
Three-state checkboxes not supported
+
Support for both two-state and three-state check boxes
+
+
+
Very limited event data
+
Enhanced; Many events have rich event data with useful information
+
+
+
Only 1 context menu for whole ListView
+
Up to 3 separate context menus: One for column headers, one for items, and one for empty area
+
+
+
Columns can be shown only in “Details” layout
+
Columns can be shown in all layouts
+
+
+
Only “SmallIcon” and “LargeIcon” size supported
+
Images can be of any size
+
+
+
Image size is static
+
Images are scaled and centered smoothly when necessary while keeping their respective aspect ratios
+
+
+
Column header images are not supported
+
Both ImageList and custom Image instances can be set for column headers
+
+
+
Custom comparer for sorting has to be implemented from scratch
+
Custom comparer can be inherited from BetterListView’s default comparer to extend its functionality; Any custom IComparer is supported as well
+
+
+
Sub-item images very limited; Usable only via WinAPI with limitations in size and color depth
+
Images for sub-item fully supported (both ImageList and custom Image instances)
+
+
+
Check boxes do not have animation effect like the standard control
+
Check boxes are animated when used with mouse or keyboard the same way as the CheckBox control
+
+
+
Searching with keyboard only on first column and limited to string prefixes
+
Keyboard searching can be used on columns of choice and the searching behavior can be further adjusted (any substring, character-based or word-based search)
+
+
+
Only simple item tooltips supported
+
Automatic and customizable tooltips on items, sub-items and columns are supported
+
+
+
Can scroll to just one item
+
One or several items can be specified to be scrolled into view
+
+
+
Vista-look only with WinAPI extension
+
Visual elements are used by default
+
+
+
No Drag & Drop item highlighting
+
Items under cursor are properly highlighted during dragging; Highlighting can be switched off for selected items
+
+
+
+
+The control is very easy and intuitive to use and is well documented.
+
DevProConnections.com Review
+
+
Other extra features:
+
+
+
+
Regular .NET ListView Control
+
Better ListView control
+
+
+
No thumbnails view
+
Added support; can be used for viewing thumbnails of photos or other images
+
+
+
No inbuilt saving/loading
+
Added support; save/load contents to file or string (XML or binary)
+The enhancements I found most useful for my own projects were the automatic layout, context menus, improved drag and drop, item searching, and sorting options. Thanks to both the source code–included demos, the online documentation, and the obvious property names of the control's "better" features, I was able to put the component to use faster than it took me to install the setup package.
+
.NET Framework 4.5 / 4.0 / 3.5 / 3.0 / 2.0 (Compact
+ Framework is not supported)
+
+
+
Visual C# or Visual Basic
+
+
+
+Step-by-step Tutorial
+
+
+
Start with a new "Windows Forms Application"
+ project. A designer with empty Form appears. Display the
+ Toolbox window (View -
+ Toolbox):
+
+
+
+
The Toolbox should contain a new tab called
+ "ComponentOwl" containing all the installed component
+ from ComponentOwl, including Better ListView.
+
+
+
+
If you chose not to integrate component in
+ Visual Studio during installation or the component have not been
+ successfully integrated, please follow the next steps.
+
+
Right-click on empty area of the Toolbox window and select
+ "Choose Items...":
+
+
+
+
In the "Choose Toolbox Items" dialog, select
+ the ".NET Framework Components" tab. If the comonent
+ has been properly installed, it will be already listed here. If you find
+ it, make sure the newest version is checked (e.g. 2.5.2.0 instead of
+ 1.0.0.0) and click "OK":
+
+
+
+
If you need other than installed version (e.g. DLL to match for
+ specific .NET Framework version) click on the
+ "Browse..." button:
+
+
+
+
Browse for the betterlistview.dll file containing the
+ component.
+
+
+
+
The location depends on where you installed the product. The default
+ location is:
You can choose the file right within
+ "Redistributable" folder. This is .NET 2.0 component
+ compatible with .NET Framework 2.0 or higher. If you want binary for a
+ specific .NET version or Client Profile, choose the file from
+ ".NET Framework Specific" folder:
+
+
+
+
Make sure the check box next to
+ "BetterListView" is checked and click
+ "OK":
+
+
+
+
Now the component should appear in your Toolbox:
+
+
+
+
Select the component and place it on designer surface:
+
+
+
+
Now you can design Better ListView the same way as any other
+ control:
+
+
+
+
+
+Installation
+ Troubleshooting
+
+
+
If the component does not appear in Toolbox, make sure that your
+ target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5
+ or 4.0. The Compact Framework is not supported.
+
+
You can also try the "Reset Toolbox" option
+ from the Toolbox context menu, restart Visual Studio and try to add the
+ control again.
+
+
Sometimes even the Toolbox can get corrupted (known issue on Visual
+ Studio 2010) and its cache needs to be cleared. Simply remove all
+ ".tbd" files from this folder:
Internet connection is required to activate Better ListView. If
+ you need to activate the product off-line, please contact
+ us.
+
+
When the Better ListView is activated, it uses the standard
+ licensing scheme of .NET. When a form is created or opened in
+ Windows Forms Designer, a
+ licenses.licx file is updated in your project and the
+ trial version notification disappears.
+
+
+
+Offline Activation
+
+
+
If the activation is blocked by a firewall or proxy server, you can
+ activate Better ListView offline.
+
+
First, call the following static method from code:
+
+
BetterListView.ShowOfflineActivationDialog()
+
+
A dialog appears containing your computer ID:
+
+
+
+
Please copy this code to clipboard (Control+C) and send us the code
+ along with your serial number you obtained when
+ purchased the product to support@componentowl.com.
+
+
The serial number is a 16-character code the identifies your
+ purchased product, e.g.:
+
+
+
5KTPNX6QNJBZNJTL
The computer ID is
+ rather longer code that is unique to your machine:
+
+
6780f65cb1b86f9a10dacc662906c3d371ab4abc
+
+
With this information, we will generate a license file and send it
+ to back to you via e-mail.
+
+
You can find a file license-blv.dat in the e-mail
+ attachment we send in reply. Please copy this file in the following path
+ (and create the folder Component Owl if it does not
+ exist):
+
+
Windows 7, 8, Vista:
+
+
c:\ProgramData\Component Owl\
+
+
Windows XP:
+
+
c:\Documents and Settings\All Users\Application Data\Component Owl\
+
+
Now just rebuild the project referencing Better ListView and you are
+ done.
+
+
Please note the license works for specific
+ product and specific computer. It won't
+ work on other machines or with other Component Owl's products. You need to
+ activate Better ListView for each machine on which you want to build
+ projects.
+
+
+
Updating to Newer Version of Better ListView
+
+
+
If a new version of Better ListView is released, to update to newer
+ version, simply download
+ and install the new version. The installer will prompt for updating to a
+ new version.
+
+
The DLL with the component (betterlistview.dll) is
+ installed usually in Program Files folder, so if you
+ use copies of the library on other locations on your disk, replace the old
+ copies with the new version.
+
+
The licenses.licx file in your project may also
+ point to an older version of Better ListView. To update
+ licenses.licx open some form with Better ListView in
+ Windows Forms Designer and compile. A new line will
+ be added to the licenses.licx for the new version of
+ the Better ListView. You can delete the line with the reference to older
+ version, e.g.:
if 2.7.0.0 is the updated version of Better ListView.
+ You can do the update of licenses.licx file with text
+ editor within Visual Studio, if you know the new
+ version number.
+
+
+
+
If you use Better ListView in separate project, you need to copy
+ licenses.licx file to the main project as
+ well.
+
+
+Migrating from .NET ListView
+
+
+
We did our best to make Better ListView as similar to regular .NET
+ ListView as possible while having all its extra features. Better ListView,
+ however, is not a ListView-derived control - it is completely autonomous
+ WinForms control. The following rules of thumb will help you to migrate
+ from ListView to Better ListView:
+
+
+
+
Most structures are named equally, only with
+ Better- prefix (e.g.
+ BetterListViewItem instead of
+ ListViewItem).
+
+
+
Better ListView does not use the same
+ structures and classes as .NET ListView (e.g. use
+ ComponentOwl.BetterListView.BetterListViewView instead of
+ System.Windows.Forms.View).
+
+
+
Many features and structures of Better ListView are richer (e.g.
+ insertion mark, Drag and Drop functionality). The types contain extra
+ overrides for constructors, methods and properties. They should be
+ sometimes used differently and they behave little bit differently;
+ look in the documentation first to avoid confusion.
+
+
+
To compare usage of .NET ListView and Better ListView, consider the
+ following code using Better ListView instead the regular .NET
+ ListView:
Dim listView As New BetterListView()
+
+Dim item As New BetterListViewItem("new item")
+
+listView.Items.Add(item)
+
+listView.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))
+
+
+
+Learning resources and getting
+ support
+
+
+
The documentation and learning resources include:
+
+
+
+
HTML documentation with about 30 chapters
+ (the Quick Start guide you are reading right now is the second
+ chapter)
+
+
+
Sample projects in C# and VB.NET
+
+
+
Samples Explorer
+
+
+
Class Reference (technical documentation)
+
+
+
You can find all these resources in Start Menu -
+ ComponentOwl - Better ListView.
* Fixed drag selections (not all intersecting items were always selected)
* Fixed sub-item focus rectangle display in Details view when FullRowSelect is false
* Fixed sub-item background display in Details view when FullRowSelect is false
* Fixed text highlighting not updating properly after automatic column resizing
+
+
+
+
+
+
Changes in version 3.12.0 (Sep 13, 2014)
+
* Added column unsorting by middle mouse button
* Fixed hit test on items in List view
+
+
+
+
+
+
Changes in version 3.11.0 (Aug 06, 2014)
+
* Added overlay image alignments support for columns and items in Detail view
* Fixed dragging empty selection when MultiSelect=False and user dragged item with Control key pressed
+
+
+
+
+
+
Changes in version 3.10.0 (Jul 06, 2014)
+
* Added sub-item check boxes and radio buttons support
* Added support for custom disabled check boxes and radio buttons
* Fixed ObjectDisposedException being raised when closing Form right after clicking an item
* Fixed RemoveSearchHighlight to work in item hierarchy
* Fixed drawing of group header when the group is focused by keyboard
+
+
+
+
+
+
Changes in version 3.9.1 (May 19, 2014)
+
* Fixed disappearing items after scrolling and item reordering in LargeIcon view with multi-line items
+
+
+
+
+
+
Changes in version 3.9.0 (Apr 22, 2014)
+
* Added integration with Visual Studio 2013
* Added custom date format support in BetterListViewDateTimePickerEmbeddedControl
* Added ItemReordered event
* Fixed FindItemsWithText method call when working with invisible items
* Fixed saving form after editing tooltips in Windows Forms Designer
+
+
+
+
+
+
Changes in version 3.8.3 (Feb 03, 2014)
+
* Fixed sorting of items with missing sub-items or Key set to null
+
+
+
+
+
+
Changes in version 3.8.2 (Oct 21, 2013)
+
* Fixed pixel precision bug in column selection
* Fixed proper scrolling on combined items using EnsureVisible method
* Fixed drawing item selection on MouseUp in some cases (click directly on text of previously selected item in Details view)
+
+
+
+
+
+
Changes in version 3.8.1 (Sep 20, 2013)
+
* Fixed search highlight in other than Details view
* Improved responsiveness (optimized control refreshing on control state transitions)
* Fixed BetterListViewColumnHeader.DisplayIndex property value not being updated at the time of ColumnHeaderReordered event
* Fixed bug in hit test invalidation optimization causing slower redrawing when mouse moves over large control with many items and columns
+
+
+
+
+
+
Changes in version 3.7.6 (Jul 06, 2013)
+
* Fixed item deselection when clicking on client area
+
+
+
+
+
+
Changes in version 3.7.5 (Jun 24, 2013)
+
* Fixed item selection by clicking on group header
+
+
+
+
+
+
Changes in version 3.7.4 (Jun 05, 2013)
+
* Removed beep when no item is found though single keypress (keyboard search)
* Fixed keyboard search
+
+
+
+
+
+
Changes in version 3.7.3 (May 30, 2013)
+
* Fixed keyboard search with 'Substring' setting and single keystroke
* Fixed rare but possible NullRefereceException in OnMouseUp method
+
+
+
+
+
+
Changes in version 3.7.2 (Apr 10, 2013)
+
* SuspendSelectionChanged renamed to SuppressSelectionChanged
* Fixed selection display when FullRowSelect is false in Details view
* Fixed grid lines display when HeaderStyle is None in Details view
* Fixed closing floating window in Samples Explorer
+
+
+
+
+
+
Changes in version 3.7.1 (Mar 28, 2013)
+
* Fixed Visual Studio Toolbox integration on Windows XP
+
+
+
+
+
+
Changes in version 3.7.0 (Mar 19, 2013)
+
* Added HScrollHeight, VScrollWidth properties
+
+
+
+
+
+
Changes in version 3.6.1 (Mar 01, 2013)
+
* Fixed unnecessary redrawing during MouseMove
+
+
+
+
+
+
Changes in version 3.6.0 (Feb 28, 2013)
+
* Fixed possible exception when invoking context menu on an item by mouse
* Fixed multi-line text when TextTrimming is set to None
* Fixed public constructor parameters being obfuscated
+
+
+
+
+
+
Changes in version 3.5.0 (Jan 28, 2013)
+
* Added owner drawing support for drag selection
* Added data binding customization
* Added separate product activation utility
* Fixed unhandled exception on web request timeout when activating over web proxy
+
+
+
+
+
+
Changes in version 3.4.2 (Jan 12, 2013)
+
* Added separate column auto resizing for column header, column content or both (BetterListViewColumnHeaderAutoResizeStyle changed to flags enum)
* Fixed DoubleClick and ItemActivate not raised when the redrawing takes too much time between successive clicks
* Fixed Combined Items
* Fixed check boxes and expand buttons of children in combined items being inactive
* Fixed combined item not being properly measured when its child has been made invisible
* Fixed insertion mark display on combined items
* Fixed online activation from behind a web proxy
* Fixed binding DataTable in the Data Binding sample
* Fixed unnecessary refreshes during binding a table with multiple columns
+
+
+
+
+
+
Changes in version 3.4.1 (Dec 20, 2012)
+
* Added possibility of changing label being edited by setting Label property in BeforeLabelEdit and AfterLabelEditCancel event data
* Improved Visual Studio Toolbox integration for more versions of .NET Framework, including Client Profile
* Fixed possible NullReferenceException during clicking on column headers (negative mouse cursor coordinates probably due to mouse movement)
* Fixed IndexOf() method on collections to return -1 if an element is not contained in the collection
* Fixed case where clickable/sortable/unsortable column is clicked and mouse cursor moves quickly away
* Fixed column auto resizing to account for groups and hierarchical items
* Fixed not allowing to put duplicate references in SelectedItems.Set(IEnumerable) or SelectedItems.AddRange(IEnumerable)
+
+
+
+
+
+
Changes in version 3.3.2 (Dec 08, 2012)
+
* Fixed moving mouse cursor over an item that is partially scrolled out so that the text boundaries have negative top coordinate
* Fixed ItemActivate not raised on slow computers when item is double-clicked and mouse cursor moved quickly away
+
+
+
+
+
+
Changes in version 3.3.1 (Dec 06, 2012)
+
* Added ColumnReorder event next to existing ColumnReordered event to allow cancelling column reordering
* Added keyboard-invoked context menu placements (ContextMenuStripPlacement property)
* Improved context menu placement: Keyboard-invoked context menu is displayed under the first visible selected item
* Improved grid lines appearance
* Improved item parts alignment when expand buttons are present
* Fixed possible improper behavior on slower computers (or lagging code because of too much drawing etc.)
* Fixed item not selected clicked and mouse cursor is immediately moved away
* Fixed drag selection commited when item is almost double-clicked (second mouse button release not done) and then mouse is moved before button is released
* Fixed DoubleClick event raised after any amount of time when item is reordered with incomplete double-click (second mouse button release not done) and then other item is clicked
+
+
+
+
+
+
Changes in version 3.3.0 (Nov 30, 2012)
+
* Added FIPS-compliance (improved security and compatibility)
* Improved horizontal multi-line text alignment
* Improved Samples Explorer
* Properties VisibleColumns, VisibleGroups, VisibleItems hidden from Properties window in the WinForms Designer
* Fixed commencing mouse drag selecting on double-click and mouse move in quick succession
* Fixed scrolling to parent item vertically when only child item have been selected
* Fixed AutoResizeColumns updating just the last column
* Fixed column header sort glyph placement when the column is sorted and no items are present in the list
* Fixed image border color not changing when ImageBorderColor layout property changed
+
+
+
+
+
+
Changes in version 3.2.2 (Oct 09, 2012)
+
* Added support for TypeConverters when adding custom objects to collections
* Improved horizontal scrolling on items within item hierarchy
* Fixed reordering item in an empty or collapsed group
+
+
+
+
+
+
Changes in version 3.2.1 (Sep 18, 2012)
+
* Allowed setting Font property to null on column headers, groups, items and sub-items
* Fixed cycling between items during keyboard search
* Fixed code generation for SearchSettings property
* Fixed NullReferenceException when edited sub-item is switched during label editing
* Fixed multi-line text wrapping when BetterListViewItem.CheckBoxAppearance is set to None
* Fixed sorted column background being drawn in other than Details view
* Fixed unsufficient vertical scroll bar maximum when column headers are added in first initialization between BeginUpdate()/EndUpdate()
* Fixed double-click on column containing hidden check box
+
+
+
+
+
+
Changes in version 3.2.0 (Aug 27, 2012)
+
* Added HeaderStyle property
* Added BetterListViewColumnHeaderStyle.None enum value (indicates that column header is not displayed, but corresponding sub-items are)
* Added BetterListViewColumnHeaderStyle.Hidden enum value (indicates that column header is hidden, including sub-items)
* Improved mouse and keyboard selections to behave more like Windows Explorer
* Merged BetterListViewColumnHeaderStyle.Hidden enum value and BetterListViewColumnHeader.Value
* Control+Shift modifier keys behave the same way as Control modifier key alone in Multi-column Sorting
* Hidden ShowItemExpandButtons property in Express edition
* Fixed possible multiselection using Control+click when MultiSelect is false
+
+
+
+
+
+
Changes in version 3.1.1 (Aug 07, 2012)
+
* Fixed selected child items not removed from SelectedItems collection after BetterListView.Items.Clear() call
* Fixed designer not supporting some BetterListViewColumnHeaderStyle enum values well
+
+
+
+
+
+
Changes in version 3.1.0 (Aug 03, 2012)
+
* Added BetterListViewDropPart.On
* Added BetterListViewLabelEditCancelEventArgs, BetterListViewLabelEditCancelEventHandler for BeforeLabelEdit, AfterLabelEditCancel events
* Added OnDrawInsertionMark method, DrawInsertionMark event
* Added BetterListViewInsertionLocation.Offset property
* Added CollapsedItemUnselection property (child item unselection behaviors when parent item is collapsed)
* Added CheckBoxesAlign property to make parent items without check boxes more distinguishable in hierarchy
* Added BetterListViewLabelEditActivation.ClickThrough label editing option
* BetterListViewCheckItemReorderEventArgs now inherits from DragEventArgs to provide more information relevant to Drag and Drop
* Added BetterListViewCheckItemReorderEventArgs.InvalidationReasons property to allow working with different reasons for item reorder invalidation
* Added BetterListViewColumnHeaderStyle.Unsortable enum value
* Added BetterListViewHitTestInfo.ColumnArea enum value
* Added unsorting individual columns using Control modifier key when multi-column sorting is active
* Improved performance of hierarchical items
* When parent item is collapsed and any of its children selected, the parent itself gets selected
* Changed EnsureVisible(BetterListViewItemCollection) to EnsureVisible(ICollection); this avoids unnecessary wrapping of collections
* A new BufferedGraphicsContext is created instead of using BufferedGraphicsManager.Current to avoid possible clash with other 3rd party controls using double-buffering in the same context
* GetItemAt, GetSubItemAt, GetColumnHeaderAt, GetGroupAt methods can be called even when the control is in updation state (though the fresh information is not ensured) - for example, this enables using GetDropInfo method inside ItemReorder event handler
* Removed CancelEdit from AfterLabelEdit event data, AfterLabelEditCancel should be used instead
* Fixed changing selection from user code within ItemDrop event handler
* Fixed BetterListViewItemReorderEventArgs.Locations can contain wrong values and missing child item indices
* Fixed sorting items with hierarchy when some item contains more child items than there are top-level items
* Fixed begining label editing when a single item is deselected using mouse and Control modifier key is pressed
* Fixed updating last selected element when selection is changed programmatically
* Fixed flickering when scrolling by moving selection using arrow keys
* Fixed measurement of items not resetting when expand button is displayed by adding child items
* Fixed not allowing to reorder item after last child item, but on higher level
* Fixed BetterListViewItemEnumerator
* Fixed items not positioned properly when ShowDefaultGroupHeader property value is changed
BREAKING CHANGES:
* UnselectCollapsedItems property renamed to CollapsedItemUnselection
+
+
+
+
+
+
Changes in version 3.0.0 (Jul 10, 2012)
+
* Added support for Client Profile versions of .NET Framework
* Added accessibility support
* Improved detecting clicking on empty space in multi-line text
* Improved display of check box in cut state
* Improved serialization and ToString methods using invariant culture whenever appropriate
* Improved BetterListViewNaturalItemComparer to handle arbitrarily large numbers
* When AutoResizeColumn is called between BeginUpdate() and EndUpdate(), the resizing is postponed until the EndUpdate() call
* Changed type of ImageSize layout property
* Renamed BetterListViewLayoutItems.ImageSizes property to BetterListViewLayoutItems.SubItemImageSizes
* Removed 'sealed' modifier from BetterListViewSubItem class to allow inheritance
* Removed restoring selection when ItemReorderMode is set to Custom
* Fixed moving selection on group headers using left/right arrow keys in List view
* Fixed BetterListViewItem.CustomHeight property not taken into account in EqualsContent and Clone methods
* Fixed BetterListViewSubItemCollection
* Fixed custom collection always containing a single sub-item when created
* Fixed cloning
* Fixed unselecting item when clicked outside items and MultiSelect = false
* Fixed selecting items ranging from and item to nearest group header above it
* Fixed serialization of an empty list
* Fixed display of right-aligned text when image is displayed after the text (columns, groups, items/sub-items)
* Fixed display of group header splitter line when the text is centered or right-aligned
* Fixed display of item selection in Details view when FullRowSelect is set to false
* Fixed cloning of BetterListViewItem.CheckState property
* Fixed first sub-item image disappearing when sub-item ImageKey property is set to null
* Fixed measurement of default group header
BREAKING CHANGES
* Replaced BetterListViewItem.ShowCheckBox by BetterListViewItem.CheckBoxAppearance
* Replaced BetterListViewItem.AllowDropHighlight by BetterListViewItem.CustomDropDisplayExternal and BetterListViewItem.CustomDropDisplayInternal
* Changed type of ImageSize layout property
* Renamed BetterListViewLayoutItems.ImageSizes property to BetterListViewLayoutItems.SubItemImageSizes
+
+
+
+
+
+
Changes in version 2.9.1 (May 03, 2012)
+
* Added GetDropInfo method
* Fixed some Drag and Drop flaws
+
+
+
+
+
+
Changes in version 2.9.0 (Apr 19, 2012)
+
* Added AlignHorizontalImage, AlignVerticalImage properties in BetterListViewItem, BetterListViewSubItem and BetterListViewColumnHeader
* Added HeaderAlignmentHorizontalImage, HeaderAlignmentVerticalImage in BetterListViewGroup
* Added GetDropInfo method to determine drop/insertion location during Drag and Drop from user code
* Enabled group focusing by right mouse button
* Improved text clipping
* Fixed EqualsContent and CopyTo methods of Better ListView element classes (missing AlignVertical/HeaderAlignmentVertical property)
* Fixed vertical image alignment in Tile view
* Fixed display of vertically centered text in LargeIcon and Thumbnail view
* Fixed NullReferenceException when InsertionMark with empty insertion location is set
+
+
+
+
+
+
Changes in version 2.8.0 (Apr 10, 2012)
+
* Added SubItemFocusBehavior property
* Fixed problem when windows theme is changed to Aero in run-time
* Fixed keeping state of the control when focus is lost
* Fixed rasing SelectedItemsChanged even when drag selection ended by losing focus or mouse capture change
* Fixed horizontal scroll bar having SmallChange value too small when no items are visible (only groups)
* Fixed column headers not refreshing properly on custom scrolling in updating mode
* Fixed auto scrolling triggered during drag selecting when owner form has been minimized
+
+
+
+
+
+
Changes in version 2.7.5 (Apr 03, 2012)
+
* Added automatic removal of items from the list when removed from a group
* Fixed BetterListViewItem.IsExpanded always 'true' in cloned items
* Fixed improper alignment of items when a new item with children is added to flat list
* Fixed combined item not showing combined selection when added during control initialization
+
+
+
+
+
+
Changes in version 2.7.4 (Mar 28, 2012)
+
* Fixed refreshing scrolled item when BetterListViewItem.Image property is changed
+
+
+
+
+
+
Changes in version 2.7.3 (Mar 26, 2012)
+
* Fixed item redrawing when selection is changed
* Fixed label editing in SmallIcon and List view
+
+
+
+
+
+
Changes in version 2.7.2 (Mar 23, 2012)
+
* Fixed BetterListViewItem.Bounds and BetterListViewItem.GetBounds() returning null
+
+
+
+
+
+
Changes in version 2.7.1 (Mar 22, 2012)
+
* Removed unnecessary redrawing in mouse events (caused by EnsureVisible)
* Fixed optimized redrawing in some cases when focus is changed
* Removed unnecessary spacing for expand buttons when ShowItemExpandButtons is set to false
* Optimized redrawing when changing item focus or selection
* Fixed possible ItemActivate after drag selection or vice verse
* Fixed text wrap when the text contains ampersand symbols
* Fixed activation through web proxy
* Workaround for .NET performance issuewhen displaying automatic tooltips with very long text
+
+
+
+
+
+
Changes in version 2.6.0 (Mar 13, 2012)
+
* Added support for ElementOuterPadding layout property in Details view
* Changed BetterListViewFocusedItemChangedEventArgs properties FocusedSubItemOld, FocusedSubItemNew to FocusedColumnIndexOld, FocusedColumnIndexNew to avoid referencing a non-existing sub-item (when the last sub-item is focused and removed)
* Resolved some issues caused by obfuscation
+
+
+
+
+
+
Changes in version 2.5.8 (Mar 01, 2012)
+
2.5.8.0
* Enabled Better ListView to be used from C++/CLI (resolved obfuscation issues)
+
+
+
+
+
+
Changes in version 2.5.7 (Feb 26, 2012)
+
* Fixed problem when setting ImageKey to data-bound items
+
+
+
+
+
+
Changes in version 2.5.6 (Feb 22, 2012)
+
* Improved automatic tooltips for Details view with columns
* Fixed column not resizing when double-clicked on the resizing area
* Fixed control not refreshing properly when Enabled property is changed on parent control
* Fixed nested RefreshView call causing column headers to break in some cases
* Fixed scrolling about 1 pixel after label editing (vertically scrolled) last item in Details view
* Fixed possible NullReferenceException when clicking on item check box
* Fixed group font problem when 'Segoe UI Regular' font is not installed
+
+
+
+
+
+
Changes in version 2.5.5 (Feb 08, 2012)
+
* Fixed updating control while having zero dimensions
* Fixed ItemActivate not raised when MultiSelect is false
+
+
+
+
+
+
Changes in version 2.5.4 (Feb 06, 2012)
+
* Added BetterListViewLabelEditActivation.Immediate
* Added sample for BetterListViewItem.Visible property
* Standard label editing can be invoked by clicking outside of text area
* Single-click labele editing can be invoked by clicking on item/sub-item text even if the item is not selected
* Fixed Invalidate method of BetterListViewColumnHeader, BetterListViewItem, BetterListViewGroup
* Fixed default button of the Form pressing after text label editing
* Fixed group headers not updating when MinimumSize property of the group layout changed
* Fixed possible entering inconsistent state when the control has zero dimensions
+
+
+
+
+
+
Changes in version 2.5.3 (Feb 03, 2012)
+
2.5.3.0
* Fixed problem when all items in a group set invisible (BetterListViewItem.Visible set to false)
* Fixed problem when sub-items of an item are clear while some sub-item is focused
+
+
+
+
+
+
Changes in version 2.5.2 (Feb 02, 2012)
+
* Added BetterListViewItem.Visible property
* Added ToString(bool) method in some collection classes to allow printing out list of individual items
* More detailed information returned in ToString methods of Better ListView elements
* Improved group header font fallback
* HitTest returns BetterListViewHitTestInfo.Empty when the control is updating
* When ContextMenuStrip is available, it can be used instead of ContextMenuStripItems
* BufferedGraphicsContext for control double-buffering is obtained from BufferedGraphicsManager instead of creating new
* Fixed changing component names in Visual Studio Component Designer (column headers, items, sub-items and groups)
* Fixed calling EnsureVisible when the control is updating (scrolling postponed util EndUpdate is called)
* Fixed selected item kept in SelectedItems collection when replaced using indexer (e.g. BetterListView.Items[1] = newItem)
* Fixed problem when clicking on column header and quickly moving mouse pointer outside client area
* Fixed return value of BetterListViewAddress.ToString
* Fixed Document Outline window blinking in Windows Forms Designer when BetterListViewItem is selected and Properties window opened at the same time
* Fixed group header text disappearing when changed in runtime
* Fixed group image not always updating when is of same size and set in runtime
* Fixed Dispose method when Array is bound to Better ListView
* Fixed ForeColorGroups property serializing to designer code even when having default value
* Fixed background image aligned to bottom/right side being shown under scroll bars
+
+
+
+
+
+
Changes in version 2.5.1 (Jan 19, 2012)
+
* Extended background of combined items (both parent and child items)
* Fixed link in documentation (chapter "Hit Test")
+
+
+
+
+
+
Changes in version 2.5.0 (Jan 18, 2012)
+
* Added ShowDefaultGroupHeader property
* Added GroupHeaderBehavior property
* Added BetterListViewItem.AllowSelectChildItems property
* Added BetterListViewItem.Selectable property
* Added BetterListViewItem.SelectableItem property
* Added BetterListViewItem.LastAvailableChildItem property
* Added BetterListViewSearchOptions.SelectableItemsOnly to allow searching through selectable items only
* Displayable and selectable item is recognized with hit test (the two can be different because of BetterListViewItem.AllowSelectChildItems)
* When AutoSizeImages is true (the default) in item layouts corresponding to Details view, the space for image is made only when the item actually has an image
* Default font of the group does not get unnecessarily serialized to designer generated code
* Removed unused property ShowFocusRectangle
* Fixed possibly obtaining default group instance through BottomGroup or TopGroup properties
* Fixed FindItemsWithText method accepting wrong type of item index
* Fixed content not scrolling horizontally in List view
* Fixed not keeping focused sub-item in same column after Page Down, Home and End (Details view)
* Fixed group font not creating when 'Segoe UI' is not installed (font fallback is used to 'Trebuchet MS' or to default font of the control)
Breaking Changes:
* Item property of BetterListViewHitTestInfo split to ItemDisplay and ItemSelection
* When label edit is cancelled by the control (e.g. by losing focus), the default action is not accepting the edited data - this can be set by LabelEditDefaultAccept property to false
+
+
+
+
+
+
Changes in version 2.4.2 (Jan 05, 2012)
+
* Fixed vertical scroll bar not showing up
* Fixed accessing disposed back buffer Graphics object after removing control from designer surface
* Fixed links to Index in Better ListView Express Documentation
* Fixed project file of Visual Basic samples for Express edition
+
+
+
+
+
+
Changes in version 2.4.1 (Dec 28, 2011)
+
* Faster initialization when BeginUpdate/EndUpdate not used and the control does not have parent / is invisible
* Fixed scrolling horizontally when columns exceed width of client area in other views than Details
+
+
+
+
+
+
Changes in version 2.4.0 (Dec 21, 2011)
+
* Added FocusedItemChanged event
* Added Center layout property to allow change of item centering in Thumbnails and LargeIcon views
* Added hotkey prefix display support
* Every column have its own resizing style (BetterListViewColumnHeader.SmoothResize)
* When a group is clicked, only the group header is scrolled into view (not the entire group)
* Improved performance of multi-line items
* Fixed rendering multiline text with custom newlines
* Fixed group item enumerator
Breaking Changes:
* BetterListView.SmoothColumnResize property moved to BetterListViewColumnHeader.SmoothResize
+
+
+
+
+
+
Changes in version 2.3.3 (Dec 01, 2011)
+
* Added ViewChanged event
* Added CheckedItemsChanged event
* Added scrolling to group when clicked
* Fixed raising CheckItemReorder event raised every time (not only when ItemReorderMode is set to Custom)
* Fixed displaying items when ShowGroups is false and the items are contained in some group in other control
* Fixed problem when setting Image property of sub-item to null after changing view where the sub-item has empty image size
* Fixed behavior of the BetterListViewItem.Checked property setter
* Fixed ItemChecked event raising when Checked or CheckState property of BetterListViewItem changed from user code
* Fixed vertical scroll bar disappearing in Details view when the control was too wide
* Fixed not scrolling to leftmost part of an item in Details view when changing selection
* Fixed rasing SelectedItemsChanged and ItemSelectionChanged events on disposing Better ListView containing selected items
Breaking Changes:
* Use CheckedItemsChanged event for handling check state changes of multiple items
* properties CurrentValue, NewValue of ItemCheckedEventArgs renamed to OldCheckState, NewCheckState
+
+
+
+
+
+
Changes in version 2.3.2 (Nov 24, 2011)
+
* Added support for newline characters in text (multi-line text)
* Added BetterListViewSubItemBounds.BoundsImageFrame
* Extended BetterListViewItemComparer
* CheckItemReorder event is raised even when ItemReorderMode is set to Enabled (not only Custom)
* Columns, items and groups get automatically removed from Better ListView when the control is disposed
* Optimized changing images in runtime
* Extended documentation (Multi-line Items, Selecting and Checking Items, Sorting Items)
* Fixed IsAnythingSelected property
* Fixed SelectedIndices collection not containing updated indices after sorting items
* Fixed possible problem when sub-item is replaced by the user in IBetterListViewEmbeddedControl.SetData method during label edit operation
Breaking Changes:
* Renamed BetterListViewItemActivateItemActivationSource to BetterListViewItemActivationSource
* For owner drawing in empty image area of custom size, use BetterListViewSubItemBounds.BoundsImageFrameBounds instead of BetterListViewSubItemBounds.BoundsImage
+
+
+
+
+
+
Changes in version 2.3.1 (Nov 16, 2011)
+
* Added HideSelectionMode property
* Fixed sub-item with TextWrapping.Space wrapping text to more lines than specified by MaximumTextLines layout property
+
+
+
+
+
+
Changes in version 2.3.0 (Nov 15, 2011)
+
* Added BetterListViewItem.TextWrapping (BetterListViewSubItem.TextWrapping) property
* Added vertical text alignment for columns, items, sub-items and groups
* Added BetterListViewDrawItemEventArgs.DrawEnabled and BetterListViewDrawItemEventArgs.DrawFocused properties
* Added comparation operators to BetterListViewAddress
* When items are selected from user code, new selections with Shift or Control+Shift keys are made from the item with lowest index (address) value
* Sub-item text aligned on top in Details view
* Revised and extended documentation
* Fixed item text not displaying properly on items in Thumbnails view
* Fixed item images not refreshing when another ImageList is set with same image sizes
* Fixed problem when modifying tree hierarchy in runtime
Breaking Changes:
* BetterListViewColumnHeader.Align renamed to BetterListViewColumnHeader.AlignHorizontal
* BetterListViewGroup.HeaderAlignment renamed to BetterListViewGroup.HeaderAlignmentHorizontal
* BetterListViewItem.Align renamed to BetterListViewItem.AlignHorizontal
* BetterListViewSubItem.Align renamed to BetterListViewSubItem.AlignHorizontal
* TextAlignment changed to TextAlignmentHorizontal
+
+
+
+
+
+
Changes in version 2.2.0 (Nov 08, 2011)
+
* DefaultTextAlignment, DefaultTextTrimming layout properties made editable
* Expand button is hidden on empty groups
* Revised Better ListView Documentation
* Fixed ArgumentOutOfRange exception when hierarchical items are re-measured in specific order
* Fixed displaying images when using ImageList
* Fixed adding columns and items in design-time
* Fixed selections with Control-Shift pressed
* Fixed problem when collapsing group emptied by item reordering
* Fixed problem when reordering columns when there is a bound data source
* Minor fixes in Samples Explorer
Breaking Changes:
* LayoutOptions property has been replaced by layout propery AutoSizeImages (e.g. LayoutItemsCurrent.AutoSizeImages)
+
+
+
+
+
+
Changes in version 2.1.3 (Oct 31, 2011)
+
* Fixed item not refreshing after sub-items added/removed
* Fixed item not refreshing after child items added/removed
+
+
+
+
+
+
Changes in version 2.1.2 (Oct 27, 2011)
+
* Fixed ordering of items in SelectedItems collection when child items are selected
* Fixed extra space in column headers when images are displayed just in some of the column headers
+
+
+
+
+
+
Changes in version 2.1.1 (Oct 21, 2011)
+
* Improved natural item comparer to support longer numbers
* Fixed adding item to end of the list when reordering items into different group
* Fixed items not updating when column is auto-resized or data source changed
* Fixed blank space for image not appearing on custom image layout
+
+
+
+
+
+
Changes in version 2.1.0 (Oct 14, 2011)
+
* Added 'static' column resizing option
* Added optional automatic item resizing in Details view when columns are not visible
* Added special collections for selected items and indices
* Added special collections for checked item indices
* Added SelectedItemsChanged event
* Added methods FindNearestItem and BetterListViewItem.FindNearestItem
* Added automatic insertion of items into Better ListView, when added to group or group into Better ListView
* Added new C# and Visual Basic samples
* Added 'EqualsContent' method for 'by value' comparison of elements and collections
* Optimized performance of expand/collapse operations on items and groups
* Optimized performance of modifying item collection
* ItemSelectionChanged event is raised per-item as in the .NET ListView
* Date/time format set to Short by default in DateTimePicker embedded control
* BetterListViewView enum made compatible with System.Windows.Forms.View
* Revised and corrected XML documentation
* Corrected access modifier of InnerList property of collections from public to private
* Default column width increased to 128 pixels (was 60 pixels)
* Fixed column header backround display when vertical scroll bar is visible
* Fixed group header display when column headers are wider than client area and horizontally scrolling
* Fixed possible initialization of sub-item, column or group with null text
* Fixed BetterListViewItem.Selected setter
* Fixed BetterListViewItemIndexComparer taking item hierarchy into account
* Fixed BetterListViewItem.Level getter
* Fixed making selection with Shift+arrow after items have been removed from the list
* Fixed editing sub-item collection in Windows Forms Designer
* Fixed not sorting when ItemComparer is set and sorting is suspended
* Fixed property ColorInsertionMark not having effect on insertion mark color
* Behavior of ItemSelectionChanged event has been adjusted according to original .NET ListView
* Removed setter of CheckedIndices, CheckedItems, SelectedIndices and SelectedItems
* BetterListItem constructor with parameters (string, string) have different meaning, use (string[]) instead
* BetterListViewColumnHeader constructor with paramter (int) refers to ImageIndex property, not Width property
* Property IsSelected of BetterListViewItem renamed to Selected
* Value comparisons of implementations of Equals and IEquatable.Equals moved to 'EqualsContent' method
+
+
+
+
+
+
Changes in version 2.0.3.2 (Aug 28, 2011)
+
* Fixed re-installation of betterlistview.dll in GAC
* Fixed refreshing control when Font property set
* Fixed measurement of fonts with overhang glyphs (italics)
+
+
+
+
+
+
Changes in version 2.0.2 (Aug 09, 2011)
+
* Added 'File Explorer' in samples
* Implemented CopyTo() method in element classes to allow for proper cloning of derived objects
* Fixed column header display when scrolling in List view
* Fixed SelectedItems property for selecting child items
* Fixed selecting item when item collection changed between MouseDown and MouseUp events (e.g. during DoubleClick)
+
+
+
+
+
+
Changes in version 2.0.1 (Aug 04, 2011)
+
* Added column hiding feature (Visible property)
* Optimized column resizing and sorting with many items
* Fixed label editing when MultiSelect is false
* Fixed reordering item into another item in another group as a child
* Fixed setting focused item after Drag and Drop, item reordering or position binding when the control is in update state
+
+
+
+
+
+
Changes in version 2.0 (Jul 31, 2011)
+
* Added groups support
* Added hierarchical item support
* Added multi-line item support
* Added data binding
* Added DateTimePicker label editing
control
* Added ItemWidth and ItemHeight layout
properties to customize item size
* Added adjustable padding for each element part, element and whole layout
* Added type conversions between BetterListViewEmptyText and String
* Added type conversions between BetterListViewToolTipInfo and String
* Added TileSize property (item sizes in any other views - including the Tile view - can be set via layout settings)
* Added Horizontal grid lines (can be visible even when columns are hidden)
* Added GetItemNearest methods to get item nearest to the specified location
* Added 'virtual' sorting (SortVirtual property)
* Added AfterLabledEditCancel event to allow cancelling label editing after the value has been commited by the user
* Added CLS-compliance
* Added missing XML comments
* Content can saved/loaded to/from binary/XML format
* Objects can be added to Better ListView collections, the control will auto-convert them
* Extended item reordering capabilities
* Extended insertion mark display options (enabled/disabled state, level in item hierarchy)
* Sub-items and groups can be focused and the focus information can be retrieved for each element type
* Items can be enumerated regardless of item hierarchy through IEnumerable implemented by BetterListView, BetterListViewItem and BetterListViewGroup
* Maximum allowed lines of text can be set for items
* Changed type of some item collections
from ReadOnlyCollection to BetterListViewItemCollection (SelectedItems, CheckedItems etc.)
* Extended sorting capabilities (range sorting, sorting up to specific items)
* Nonclickable columns can be reordered
* AllowColumnResize functionality moved to property BetterListViewColumnHeader.AllowResize (per-column basis)
* Default view changed to 'Details'
* FullRowSelect property is 'true' by default
* Improved performance of thumbnail images display
* Improved performance when working with sorted list
* Improved performance of Contains and RemoveRange methods in element collections
* Synchronized BeginUpdate/EndUpdate methods for thread safety
* Column header area is not displayed when there are no column headers to save space
* Vertically centered item content in Details view
* Fixed cancelling label edit when calling BetterListView.Focus() in AferLabelEdit, AfterLabelEditEmbeddedControl event handlers
* ISerializable and IXmlSerializable implementation in elements and collection classes made explicit
* Fixed locked label edit state when right-clicking on Better ListView while label editing
* Fixed incorrect behavior of InsertRange method in element collections
* Fixed possible bug when deserializing items with sub-items using BinaryFormatter
* Fixed possible bug when using sub-item collection of deserialized item
* Fixed switched visual style elements of middle and right column headers (might become visible in custom themes)
* Fixed hit test for column headers which are both nonclickable and nonresizable
* Fixed not displaying hot state of
elements when another control captured mouse
* Fixed occasional flicker when checking a hot or focused item
* Fixed hot state of item check box when checked by mouse (only item being checked can display check box in hot state)
* Fixed EnsureVisible(Rectangle) when client size is smaller than the specified area
* Fixed searching with prefix preference and without search limit
* Fixed AutoResizeColumns not using BeginUpdate/EndUpdate method, thus causing visible redrawing
* Fixed possible flicker or hanging in update state when refreshing or exception thrown in mouse and keyboard event handlers
* Fixed not refreshing control when BackgroundImageLayout property changed
+
+
+
+
+
+
Changes in version 1.521 (Apr 04, 2011)
+
* Fixed Visual Studio 2008 toolbox auto-loading
* Fixed ArgumentException occuring in LargeIcon View in some rare cases
* Drag selection is now allowed even when the control does not contain any items
+
+
+
+
+
+
Changes in version 1.52 (Mar 29, 2011)
+
* Added SuspendSort(), ResumeSort(), IsSortSuspended members for controlling sorting while updating control
* Added immediate drop down when using combo box embedded control (enabled by default)
* Added separate measurement of sub-item images
* Added sorting items through BetterListView.Sort() when no column are displayed
Immediate label editing on SingleClick activation
* Method HitTest() without arguments made public
* Method ReorderColumns(int, int, bool) made public
* Fixed label editing sub-items when LabelEditItems was set to None
* Fixed removing embedded control when scrolling during label-editing
* Fixed hiding label edit control when Better ListView loses focus
* Fixed setting proper cursor during Drag and Drop operation immediately when AllowDrop is set to false
* Fixed raising ColumnWidthChanged event only when column width actually changes
* Fixed adjusting rendering with visual styles when theme has changed in run-time
* Fixed breaking of text that contains CR or LF characters alone
* Fixed item text color when BetterListViewItem.IsCut is set to true
* Fixed column headers being too high in rare cases
* Fixed black area flashing when calling Refresh() while resizing control and SetRedraw was called to suppress redrawing
* Fixed display of ampersand (&) characters within "empty text", items, column headers
+
+
+
+
+
+
Changes in version 1.51 (Mar 07, 2011)
+
* Added support for offline activation
* Enhanced designer support
* Fixed the Refresh method
* Fixed minor designer support issue
+
+
+
+
+
+
Changes in version 1.50 (Feb 14, 2011)
+
* New samples and new samples launcher
* Added Thumbnails view
* Added support for image borders
* Extended owner-drawing capabilities
* Extended label editing capabilities
* Changed type of BetterListViewDrawColumnHeaderBackgroundEventArgs.ColumnHeaderBounds from Rectangle to BetterListViewColumnHeaderBounds (more options available)
* Fixed behaviour of layouts in special cases
* Fixed SelectedIndexChanged event raising before Better ListView state has changed
* Fixed light borders of downsampled images
* Fixed redraw bug when calling some of the RemoveRange() overrides
The setup package that you can download from our website contains more than 20 sample projects with full source code that demonstrate various features. In addition to that, you can also use the following:
Hi, my name is Jiri Novotny and I'm the founder of Dextronet.com, a software company that operates ComponentOwl.com. Me and my team think of ourselves as independent software vendors (or ISVs).
+
+
Surprise surprise - as it is with most independent components today, we did not originally actually intended to create Better ListView.
+
+
Our flagship product is Swift To-Do List, a desktop task management software. The old version of Swift To-Do List has been written in Visual Basic 6 which has many limitations, so we've decided to make a total rewrite in VB.NET and C#. The development started in July 2009.
+
+
Because Swift To-Do List is highly list-centric product (as the name suggests :-), it soon become apparent that we will need excellent ListView control. The ListView control included in .NET just didn't cut it. Not only its features are very limited, but there are braincracking bugs and strange behavior in lots of cases. In fact, the default .NET ListView was so bad, that I've oftentimes wished I could just use the ListView included in VB6 – it has at least behaved mostly correctly.
+
+
So, because we couldn't use the default .NET ListView, I began searching for a replacement ListView control. My requirements were actually not very demanding - I wanted a ListView control that looked and behaved similarly as the one used in Windows Explorer.
+
+
Unfortunately, I've soon discovered that in reality, I want lots of things that are not taken for granted in any ListView control that I've found. My requirements for a usable .NET ListView control are:
+
+
+
It must either inherit from native ListView or mimick it perfectly
+
It must use system theme seamlessly and not have some weird inconsistent custom look
+
It must support sub-item images flawlessly
+
It must have excellent drag & drop support for item reordering
+
It must have perfect implementation of selection and drag-selection
+
It must support 3 different context menus: For items, column headers, and empty space
+
Multi-column sort
+
Must not be part of some huge control pack that I need to bundle with my app
+
Must be light-weight, fast and optimized
+
Must have all bugs and strange behavior of .NET ListView fixed
+
+
+
There was also lot of nice-to-have things that I've looked for, like:
+
+
Watermark text that is shown when the ListView is empty
+
Column reordering with auto-scrolling
+
100% managed code
+
Better hit-test
+
+
+
I did not want to use any DataGrid-based control, as it can't really replace ListView control – it is much harder to manipulate for the user in most cases, and it doesn't support many things that ListView does.
+
+
Swift To-Do List is a mass-market product, so it needed a ListView control that behaved as expected in all cases, no exceptions. The ListView control used in Windows Explorer is a great model: Because every user knows how to work with Windows Explorer ListView already, you can leverage that knowledge in your own applications. Your applications will be truly easy to use and learn.
+
+
I've looked over dozen of ListView controls – and I'm not afraid to name them, because they just don't meet the above criteria. The controls I looked over included ListView from SoftGroup, three different open source ListView controls from CodeProject, ListView from Lidor systems, Grid and TreeView-Grid hybrid from DevExpres, WinListView from Infragistics, I've also looked at all ListView controls to be found at CodeGuru and more – basically everything that I could Google and everything from all well-known (or not so well known) component providers.
+
+
I was disappointed with every single of these controls. Not one of them met my criteria.
+
+
Believe me, I wanted to find the perfect ListView control – after all, I desperately needed it so we could use it in our own product. But what I've found during my extensive research? Nothing. Null. Nilch. Nada. Zero. My heart was broken. The dreams of our awesome Swift To-Do List 7 product started to shatter, because we needed an adequate ListView control first. When it comes to user experience, we simply couldn't settle for anything less than great.
+
+
But we haven't given up. The solution? To create our own ListView control. A Better ListView control. It was not originally intended to be a product on it's own, but when it has been finished, it was so good that it would be a sin to keep it selfishly just for ourselves. So we've started selling it. :-)
+
+
When we started building our own better ListView control, we wanted it to inherit from System.Windows.Forms.ListView at first. We've tried our best, but some of the bugs of .NET ListView were simply impossible to fix, even with ridiculous hacks. However, luck has shined upon us.
+
+
We've met Libor Tinka, a genius C# developer with extensive experience with not just programming in general, but specifically Windows control development as well. He's the author and sole developer of ImagingShop, a powerful digital photography processing desktop application that includes many of his custom controls, and lot's of hardcore mathematics and unique algorithms (It has over 220k lines of code in total!). That guy really is a genius and let me tell you, the code he writes is just beautiful. He's an artist.
+
+
When we've asked Libor to create a better ListView control for us, he accepted the challenge.
+
+
(By the way, it might look easy at first, but implementing your own ListView control is extremely difficult, daunting and complicated task – there are so many corner cases in the control's behavior that it will make your brain want run away.)
+
+
We've worked very closely with Libor during the intensive development process. Fast forward 12 months into the future - Better ListView is done, and Libor is an integral part of our team. We still work together as we support and constantly enhance Better Listview.
+
+
Better ListView is now used not just in Swift To-Do List, but also in Libor's own product ImagingShop, so we are truly eating our own dog food. This is your guarantee that we will not stop supporting Better ListView, fixing bugs and implementing new features – it's the core and heart of our own desktop software products after all. We walk the talk.
+
+
If Better ListView existed before, I know I would be absolutely positively thrilled about it. And so I hope that you are thrilled about it now that you've found it.
+
+
Any questions or comments? I would love to get them. Contact me at novotny (at) dextronet (dot) com
Compatible with: Visual Studio 2012, 2010, 2008, 2005 (and newer),
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
+
+
High quality and easy to use
+
+
Written in pure managed C# code.
+
Full support of modern native Windows themes.
+
Single tiny DLL file, no dependencies.
+
XCopy Deployment
+
Includes samples, both in VB.net and C#, as well as compiled samples explorer.
+
Very easy to use and simple to learn.
+
+
+
+
About Better SplitButton
+
+
Better SplitButton is a free button-like control for .NET WinForms that you can start using immediately. It's similar to the regular button, but it includes a "split" part, which can display a dropdown menu once clicked. You can also set the button to be AlwaysDropDown, in such case, there is no separate split part (but the glyph arrow is still displayed), and clicking anywhere on the button will display the dropdown.
+
+
The dropdown menu is defined using the native .NET ContextMenuStrip component.
+
+
The installation package includes sample projects in both VB.net and C# to get you started immediately. It also includes Samples Explorer with some pre-built samples, so you can quickly what it can do.
+
+
Better SplitButton is free for non-commercial use. Commercial use requires a license that we offer for a very affordable price. We supply source code with all commercial licenses.
SplitButton is an invaluable control if you want to keep your GUI simple and intuitive. It is perfect for "hiding" non-standard or expert options that would complicate your GUI unnecessarily. It occupies the same real estate as a regular button, but can provide your users with far more options.
.NET Framework 2.0 / 3.0 / 3.5 / 4.0 (make sure it is
+ not a "Client Profile" or "Compact Framework" - these are not
+ supported)
+
+
+
Visual C# or Visual Basic
+
+
+
+Step-by-step Tutorial
+
+
+
Start with a new "Windows Forms Application"
+ project. A designer with empty Form appears. Display the
+ Toolbox window (View -
+ Toolbox):
+
+
+
+
The Toolbox should contain a new tab called
+ "ComponentOwl" containing all the installed component
+ from ComponentOwl, including Better SplitButton.
+
+
If you chose not to integrate component in
+ Visual Studio during installation or the component have not been
+ successfully integrated, please follow the next steps.
+
+
Right-click on empty area of the Toolbox window and select
+ "Choose Items...":
+
+
+
+
In the "Choose Toolbox Items" dialog, select
+ the ".NET Framework Components" tab. If the comonent
+ has been properly installed, it will be already listed here. If you find
+ it, make sure the newest version is checked (e.g. 2.1.0.0 instead of
+ 1.0.0.0) and click "OK":
+
+
+
+
Now the component should appear in your Toolbox. Select the
+ component and place it on designer surface:
+
+
+
+
Now you can design Better SplitButton the same way as any other
+ control:
+
+
+
+
+
+Installation
+ Troubleshooting
+
+
+
If the component does not appear in Toolbox, make sure that your
+ target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5
+ or 4.0. The Compact Framework or Client Profile are not supported.
+
+
You can also try the "Reset Toolbox" option
+ from the Toolbox context menu, restart Visual Studio and try to add the
+ control again.
+
+
Sometimes even the Toolbox can get corrupted (known issue on Visual
+ Studio 2010) and its cache needs to be cleared. Simply remove all
+ ".tbd" files from this folder:
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+
+
Make sure the Visual Studio is not running when removing the files.
+ The Toolbox should reload its default items when opened.
+
+
+
Updating to Newer Version of Better SplitButton
+
+
+
If a new version of Better SplitButton is released, to update to
+ newer version, simply download
+ and install the new version. The installer will prompt for updating to a
+ new version.
+
+
The DLL with the component (betterlistview.dll) is
+ installed usually in Program Files folder, so if you
+ use copies of the library on other locations on your disk, replace the old
+ copies with the new version.
+
+
The licenses.licx file in your project may also
+ point to an older version of Better ListView. To update
+ licenses.licx open some form with Better ListView in
+ Windows Forms Designer and compile. A new line will
+ be added to the licenses.licx for the new version of
+ the Better ListView. You can delete the line with the reference to older
+ version, e.g.:
if 2.2.0.0 is the updated version of Better ListView.
+ You can do the update of licenses.licx file with text editor within
+ Visual Studio, if you know the new version
+ number.
+
+
+
+Learning resources and getting
+ support
+
+
+
The documentation and learning resources include:
+
+
+
+
HTML documentation
+
+
+
Sample projects in C# and VB.NET
+
+
+
Samples explorer (which includes source code snippets as
+ well)
+
+
+
Class reference (technical documentation)
+
+
+
You can find all these resources in Start Menu - Better
+ ListView.
Better Thumbnail Browser is a thumbnail viewing and loading control for .NET Windows Forms
+
View and automatically display thumbnails of images, graphic files,
+ documents, video files etc.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full
+ designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI
+ languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, both 32-bit and 64-bit.
+
Native look and feel, always uses the current system theme (including
+ Aero support)
+
Saves development time with rich inbuilt functionality
+
Easy to use and well-documented
+
Written in pure managed C# code. Fast and light-weight
+
No dependencies
+
Optimized and smooth
+
Inherits from mature Better ListView control
+
FIPS-compliant, CLS-compliant, digitally signed and strongly named assembly.
+
Easy royalty-free XCOPY deployment. Single DLL file that has just
+ 250kB~ when compressed.
+
Super-easy to use and learn
+
+
+
Image Viewer .NET control with powerful features
+
+
Better Thumbnail Browser is a WinForms control for displaying and loading (mostly) image thumbnails. Thumbnails are viewed in listview-like image gallery.
+
+
Viewing and loading image thumbnails is a sophisticated task, so this .NET control does these things for you, right out of the box:
+
+
View images in any folder on HDD
+
Load images from any source you want (including database) with minimum coding needed.
+
Load thumbnails on background. All the thread operations and thread synchronization are performed automatically.
+
Resize images with high-quality image resampling.
+
Optimized order of loading of images - allows loading the thumbnails in view first, then all other thumbnails in the predefined order.
+
Supports starting, pausing and restarting the image loading on demand.
+
Smooth thumbnail zooming on the fly (e.g. using a mouse-wheel)
+
Completely flicker-free, optimized, and smooth
+
Super-customizable: Set shadows, borders, padding, spacing of all elements
+
Grouping of images - create customizable collapsible groups of thumbnails
+
Supports multi-line text, both in image items and column headers
+
Inbuilt sorting with multi-column sorting support
+
Supports checkboxes (both 2-state or 3-state)
+
Customizable tooltips on all elements
+
+
+
Because Better Thumbnail Browser inherits from feature-rich
+Better ListView, it is
+feature-packed and supports many advanced features that no other thumbnail
+control can offer (for example: Multi-column sorting, Multi-line text, Groups,
+Three-state checkboxes and many more).
+
+
It is the ultimate image loader, viewer and browser control for .NET.
+
+
Cut development time by up to 50%
+
+
The biggest advantage of Better Thumbnail Browser control for .NET is that it saves you development time.
+
+
For many projects where GUI is important, Better Thumbnail Browser can significantly cut development time. The complex logic of loading, displaying and viewing the thumbnails is done automatically for you. This not only saves you time, but also provides the end-user with a smooth, polished experience with no flickering or glitches - if you were to implement such polished experience yourself, it would be a considerable investment.
+
+
Furthermore, you will save time thanks to many inbuilt features that work out of the box, such as sorting or item reordering.
+
+
Also, full designer support allows you to do many customizations with zero code.
+
+
Better Thumbnail Browser comes with numerous samples with full source
+code, and with
+excellent documentation with examples.
High-quality source code available for optional purchase
+
+
In case you require a full source code, it can be purchased as part of the
+Site or Enterprise licenses.
+
+
The Better Thumbnail Browser source code consists of a single C# project without any external dependencies, it is clean, readable, fully commented and readily extensible.
.NET Framework 4.5 / 4.0 / 3.5 / 3.0 / 2.0 (Compact
+ Framework is not supported)
+
+
+
Visual C# or Visual Basic
+
+
+
+Step-by-step Tutorial
+
+
+
Start with a new "Windows Forms Application"
+ project. A designer with empty Form appears. Display the
+ Toolbox window (View -
+ Toolbox):
+
+
+
+
The Toolbox should contain a new tab called
+ "ComponentOwl" containing all the installed component
+ from ComponentOwl, including Better Thumbnail Browser.
+
+
+
+
If you chose not to integrate component in
+ Visual Studio during installation or the component have not been
+ successfully integrated, please follow the next steps.
+
+
Right-click on empty area of the Toolbox window and select
+ "Choose Items...":
+
+
+
+
In the "Choose Toolbox Items" dialog, select
+ the ".NET Framework Components" tab. If the comonent
+ has been properly installed, it will be already listed here. If you find
+ it, make sure the newest version is checked (e.g. 2.5.2.0 instead of
+ 1.0.0.0) and click "OK":
+
+
+
+
If you need other than installed version (e.g. DLL to match for
+ specific .NET Framework version) click on the
+ "Browse..." button:
+
+
+
+
Browse for the betterthumbnailbrowser.dll file
+ containing the component.
+
+
The location depends on where you installed the product. The default
+ location is:
You can choose the file right within
+ "Redistributable" folder. This is .NET 2.0 component
+ compatible with .NET Framework 2.0 or higher. If you want binary for a
+ specific .NET version or Client Profile, choose the file from
+ ".NET Framework Specific" folder:
+
+
+
+
Make sure the check box next to
+ "BetterListView" is checked and click
+ "OK":
+
+
+
+
Now the component should appear in your Toolbox:
+
+
+
+
Select the component and place it on designer surface:
+
+
+
+
Now you can design Better Thumbnail Browser the same way as any other
+ control:
+
+
+
+
+
+Installation
+ Troubleshooting
+
+
+
If the component does not appear in Toolbox, make sure that your
+ target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5
+ or 4.0. The Compact Framework is not supported.
+
+
You can also try the "Reset Toolbox" option
+ from the Toolbox context menu, restart Visual Studio and try to add the
+ control again.
+
+
Sometimes even the Toolbox can get corrupted (known issue on Visual
+ Studio 2010) and its cache needs to be cleared. Simply remove all
+ ".tbd" files from this folder:
Internet connection is required to activate Better
+ ThumbnailBrowser. If you need to activate the product off-line, please
+ contact
+ us.
+
+
When the Better Thumbnail Browser is activated, it uses the standard
+ licensing scheme of .NET. When a form is created or opened in
+ Windows Forms Designer, a
+ licenses.licx file is updated in your project and the
+ trial version notification disappears.
+
+
+
+Offline Activation
+
+
+
If the activation is blocked by a firewall or proxy server, you can
+ activate Better Thumbnail Browser offline.
+
+
First, call the following static method from code:
Please copy this code to clipboard (Control+C) and send us the code
+ along with your serial number you obtained when
+ purchased the product to support@componentowl.com.
+
+
The serial number is a 16-character code the identifies your
+ purchased product, e.g.:
+
+
+
5KTPNX6QNJBZNJTL
The computer ID is
+ rather longer code that is unique to your machine:
+
+
6780f65cb1b86f9a10dacc662906c3d371ab4abc
+
+
With this information, we will generate a license file and send it
+ to back to you via e-mail.
+
+
You can find a file license-btb.dat in the e-mail
+ attachment we send in reply. Please copy this file in the following path
+ (and create the folder Component Owl if it does not
+ exist):
+
+
Windows 7, 8, Vista:
+
+
c:\ProgramData\Component Owl\
+
+
Windows XP:
+
+
c:\Documents and Settings\All Users\Application Data\Component Owl\
+
+
Now just rebuild the project referencing Better Thumbnail Browser and
+ you are done.
+
+
Please note the license works for specific
+ product and specific computer. It won't
+ work on other machines or with other Component Owl's products. You need to
+ activate Better Thumbnail Browser for each machine on which you want to
+ build projects.
+
+
+
Updating to Newer Version of Better Thumbnail Browser
+
+
+
If a new version of Better Thumbnail Browser is released, to update
+ to newer version, simply download
+ and install the new version. The installer will prompt for updating to a
+ new version.
+
+
The DLL with the component (betterthumbnailbrowser.dll)
+ is installed usually in Program Files folder, so if
+ you use copies of the library on other locations on your disk, replace the
+ old copies with the new version.
+
+
The licenses.licx file in your project may also
+ point to an older version of Better Thumbnail Browser. To update
+ licenses.licx open some form with Better
+ ThumbnailBrowser in Windows Forms Designer and
+ compile. A new line will be added to the
+ licenses.licx for the new version of the Better
+ ThumbnailBrowser. You can delete the line with the reference to older
+ version, e.g.:
if 2.7.0.0 is the updated version of Better
+ ThumbnailBrowser. You can do the update of
+ licenses.licx file with text editor within
+ Visual Studio, if you know the new version
+ number.
+
+
+
+
If you use Better Thumbnail Browser in separate project, you need
+ to copy licenses.licx file to the main project as
+ well.
+
+
+Starting with Better
+ ThumbnailBrowser
+
+
+
Better Thumbnail Browser inherits from Better ListView control, which
+ is made as similar to regular .NET ListView as possible while having all
+ its extra features. Better Thumbnail Browser uses its own item type -
+ BetterThumbnailBrowserItem (which inherits from BetterListViewItem).
+ Please keep this in mind when filling the control with thumbnail items.
+ For other types, see the following rules of thumb:
+
+
+
+
Most structures are named equally as in .NET ListView, only with
+ Better- prefix (e.g.
+ BetterListViewSubItem instead of
+ ListViewSubItem).
+
+
+
Better ListView does not use the same
+ structures and classes as .NET ListView (e.g. use
+ ComponentOwl.BetterListView.BetterListViewView instead of
+ System.Windows.Forms.View).
+
+
+
Many features and structures of Better Thumbnail Browser (or
+ Better ListView) are richer (e.g. insertion mark, Drag and Drop
+ functionality). The types contain extra overrides for constructors,
+ methods and properties. They should be sometimes used differently and
+ they behave little bit differently; look in the documentation first to
+ avoid confusion.
+
+
+
To compare usage of .NET ListView and Better Thumbnail Browser,
+ consider the following code using Better Thumbnail Browser instead of the
+ regular .NET ListView.
Dim thumbnailBrowser As New BetterThumbnailBrowser()
+
+Dim item As New BetterThumbnailBrowserItem("new item")
+
+thumbnailBrowser.Items.Add(item)
+
+thumbnailBrowser.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = thumbnailBrowser.HitTest(New Point(0, 0))
+
+
+
+Learning resources and getting
+ support
+
+
+
The documentation and learning resources include:
+
+
+
+
HTML documentation (the Quick Start guide
+ you are reading right now is the second chapter)
+
+
+
Sample projects in C# and VB.NET
+
+
+
Samples Explorer
+
+
+
Class Reference (technical documentation)
+
+
+
You can find all these resources in Start Menu - Component
+ Owl - Better Thumbnail Browser.
Dear Readers,
+Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out.
+Below, you will find some obstacles we have stumbled across in the past.
+
+
Try to rebuild the project/solution
+
Restart Visual Studio if rebuilding the solution did not stop the nag screen
+
If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.
+
Do the main project (executable) and all referenced projects contain the licenses.licx file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).
+
The licenses.licx file should contain only a single reference to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.
+
Run the Activator application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).
+
You can try to finish the activation via the Activator app and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).
+
Check, if the license-blv.dat file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com
+
Check, if your projects reference the same version of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.
+
The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is specific to each machine. Rather follow the activation process on each machine.
+
+
We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.
+ Blog Post by Brian Galura published on Thursday, 09 February 2017 in Better ListView
+
+
+
Dear Readers,
+When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?
+Here are the three main reasons we think Better ListView is the ideal solution for you if you are planning to use a professional alternative:
+
1) The intuitive approach on getting started
+
The good thing is, you can get started right away. Due to the build-up of processes, as well as the well documented procedures you have almost no learning period. Component Owl keeps its design close to the original .NET ListView so you do not have to get acquainted to a completely new system. But still, the changes made are substantial enough to make your working routine so much easier. Whether its the inbuilt drag & drop, the sub-item images or the multi-column sorting, the processes are meant to make your life easier.
+
2) The fast and helpful support
+
As Component Owl has been on the market for quite a while now, it has been further developed and improved countless times, resulting in a detailed and meaningful FAQ which answer to the majority of your questions. In case you cannot find the answer you need, you can rely on our support system which will give you feedback on you request within 24 hours. This allows you to keep the workflow going with almost no interruptions and puts you ahead of the freeware users.
+
3) The possibility to customize
+
Just like every developer has his own style of working, Component Owl can be customized to every user needs. The many opportunities to adapt your surface to your favorite design or to arrange the necessary tools the way you need them, allows you to optimize your workflow to perform even better.
+
These 3 named advantages are just a few of the many that Component Owl offers you. For more infromation just check out our trial version to see for yourself.
As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.
+
Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:
+
System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")
+
The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”
+
Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.
+
We recommend the second solution as we reckon it to be the safer one.
Better ListView 3.11 supports aligning images in sub-items and columns to center. Simply set AlignHorizontalImage property of an sub-item or column to BetterListViewImageAlignmentHorizontal.OverlayCenter.
+
The image will be centered inside available space regardless of text.
+
This is useful for sub-items and column headers consisting of image only.
Component Owl codes Better ListView control all night so you don't have to.
+
+
+
+
+
+
Windows Theme Support in Better ListView
+
+
+ Blog Post by Libor Tinka published on Friday, 01 July 2011 in Better ListView
+
+
+
Both current Better ListView 1.5 and the upcoming Better ListView 2.0 put emphasis on native theme support.
+
Contrary to many custom controls, Better ListView adjusts itself to current theme even if the theme is changed in run-time. For example, when user of your application switches theme from Classic to Aero, or to some other custom theme with elements of different sizes, Better ListView re-measures itself for the new theme smoothly. Reloading the component or re-starting the application is not necessary.
+
One of the sweet bonuses of using Better ListView 2.0 instead of regular .NET ListView is the full Groups functionality in all themes and all versions of the operating system. For example, groups are not collapsible in standard ListView on Windows XP and even does not support images. In Better ListView, however, you are able to unleash full potential of groups everywhere.
+
The following images show Better ListView in different Windows themes: Classic, XP Luna and Aero:
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blog/activation-issues-and-how-to-solve-them/feed/index.html b/blog/activation-issues-and-how-to-solve-them/feed/index.html
new file mode 100644
index 0000000..ea83fa9
--- /dev/null
+++ b/blog/activation-issues-and-how-to-solve-them/feed/index.html
@@ -0,0 +1,26 @@
+
+
+ Comments on: Activation issues and how to solve them
+
+ http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/
+ Component Owl codes Better ListView control all night so you don't have to.
+ Thu, 02 Apr 2015 07:58:08 +0000
+ hourly
+ 1
+ https://wordpress.org/?v=4.9.8
+
+
+
+
\ No newline at end of file
diff --git a/blog/blv-and-internet-explorer/feed/index.html b/blog/blv-and-internet-explorer/feed/index.html
new file mode 100644
index 0000000..b2892dc
--- /dev/null
+++ b/blog/blv-and-internet-explorer/feed/index.html
@@ -0,0 +1,26 @@
+
+
+ Comments on: BLV and Internet Explorer
+
+ http://www.componentowl.com/blog/blv-and-internet-explorer/
+ Component Owl codes Better ListView control all night so you don't have to.
+ Thu, 02 Apr 2015 07:58:08 +0000
+ hourly
+ 1
+ https://wordpress.org/?v=4.9.8
+
+
+
+
\ No newline at end of file
diff --git a/blog/category/announcements/index.html b/blog/category/announcements/index.html
new file mode 100644
index 0000000..05091e6
--- /dev/null
+++ b/blog/category/announcements/index.html
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+Announcements « Owl's Blog on .NET development
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blog/centering-images-in-better-listview-sub-items/feed/index.html b/blog/centering-images-in-better-listview-sub-items/feed/index.html
new file mode 100644
index 0000000..cc3eebe
--- /dev/null
+++ b/blog/centering-images-in-better-listview-sub-items/feed/index.html
@@ -0,0 +1,26 @@
+
+
+ Comments on: Centering Images in Better ListView Sub-items
+
+ http://www.componentowl.com/blog/centering-images-in-better-listview-sub-items/
+ Component Owl codes Better ListView control all night so you don't have to.
+ Thu, 02 Apr 2015 07:58:08 +0000
+ hourly
+ 1
+ https://wordpress.org/?v=4.9.8
+
+
+
+
\ No newline at end of file
diff --git a/blog/comments/feed/index.html b/blog/comments/feed/index.html
new file mode 100644
index 0000000..a09240a
--- /dev/null
+++ b/blog/comments/feed/index.html
@@ -0,0 +1,126 @@
+
+
+ Comments for Owl's Blog on .NET development
+
+ http://www.componentowl.com/blog
+ Component Owl codes Better ListView control all night so you don't have to.
+ Thu, 02 Apr 2015 07:58:08 +0000
+ hourly
+ 1
+ https://wordpress.org/?v=4.9.8
+
+ Comment on Are You a Zen Coder or Distraction-Junkie? by Coding Dojo Day 1 | Invoke Interests
+ http://www.componentowl.com/blog/zen-coder-vs-distraction-junkie/#comment-1397
+
+ Thu, 02 Apr 2015 07:58:08 +0000
+ http://www.componentowl.com/blog/?p=664#comment-1397
+
+ […] of a syllabus and the curriculum. I started working on them after the lecture. I had fun coding in zen mode for some time, going through the course material on my own pace and doing the quizzes and […]
+]]>
+
+
+ Comment on Search Filtering in Better ListView by Libor Tinka
+ http://www.componentowl.com/blog/search-filtering-in-better-listview/#comment-1369
+
+ Sun, 06 Jul 2014 21:38:54 +0000
+ http://www.componentowl.com/blog/?p=882#comment-1369
+
+ Yes, this feature is also available in Express version.
+]]>
+
+
+ Comment on Are You a Zen Coder or Distraction-Junkie? by Foobar
+ http://www.componentowl.com/blog/zen-coder-vs-distraction-junkie/#comment-1365
+
+ Fri, 06 Jun 2014 09:30:12 +0000
+ http://www.componentowl.com/blog/?p=664#comment-1365
+
+ and average managers always value distraction junkie coder higher than zen coder, because first one multitasks and is more social [and is always first to blame others]
+]]>
+
+
+ Comment on Search Filtering in Better ListView by mustafa salah
+ http://www.componentowl.com/blog/search-filtering-in-better-listview/#comment-1353
+
+ Sat, 03 May 2014 14:52:37 +0000
+ http://www.componentowl.com/blog/?p=882#comment-1353
+
+ Is this applicable for Express version?
+]]>
+
+
+ Comment on Custom Scroll Bar Size in Better ListView by Libor Tinka
+ http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1346
+
+ Mon, 03 Feb 2014 14:39:00 +0000
+ http://www.componentowl.com/blog/?p=878#comment-1346
+
+ Height of any element in Better ListView can be changed.
+]]>
+
+
+ Comment on Custom Scroll Bar Size in Better ListView by Libor Tinka
+ http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1345
+
+ Mon, 03 Feb 2014 14:38:25 +0000
+ http://www.componentowl.com/blog/?p=878#comment-1345
+
+ You can do that with CustomHeight propety (see the Support/Documentation).
+]]>
+
+
+ Comment on Custom Scroll Bar Size in Better ListView by Dan
+ http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1344
+
+ Fri, 31 Jan 2014 15:27:23 +0000
+ http://www.componentowl.com/blog/?p=878#comment-1344
+
+ Can you change the button height as this would make it a great option for touch screen apps.
+]]>
+
+
+ Comment on Custom Scroll Bar Size in Better ListView by brokey
+ http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comment-1340
+
+ Wed, 27 Nov 2013 09:46:21 +0000
+ http://www.componentowl.com/blog/?p=878#comment-1340
+
+ Change size of ListView items
+]]>
+
+
+ Comment on Enabling Search Highlight in Better ListView by Camiel Hessels
+ http://www.componentowl.com/blog/enabling-search-highlight-in-better-listview/#comment-1290
+
+ Mon, 28 Jan 2013 19:54:49 +0000
+ http://www.componentowl.com/blog/?p=843#comment-1290
+
+ Awesome, just what I need! Thanks!
+]]>
+
+
+ Comment on Better Thumbnail Browser Component Released by Nathaniel Wise
+ http://www.componentowl.com/blog/better-thumbnail-browser-component-released/#comment-1289
+
+ Wed, 23 Jan 2013 09:20:46 +0000
+ http://www.componentowl.com/blog/?p=823#comment-1289
+
+ this is one useful for the example and overviews.in my website i m not used this type of functionality but this is something good component.
+]]>
+
+
+
+
+
\ No newline at end of file
diff --git a/blog/feed/index.html b/blog/feed/index.html
new file mode 100644
index 0000000..595d63e
--- /dev/null
+++ b/blog/feed/index.html
@@ -0,0 +1,525 @@
+
+
+
+ Owl's Blog on .NET development
+
+ http://www.componentowl.com/blog
+ Component Owl codes Better ListView control all night so you don't have to.
+ Tue, 04 Sep 2018 13:10:05 +0000
+ en-US
+ hourly
+ 1
+ https://wordpress.org/?v=4.9.8
+
+ Activation issues and how to solve them
+ http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/
+ http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/#respond
+ Wed, 01 Mar 2017 17:22:52 +0000
+
+
+
+
+ http://www.componentowl.com/blog/?p=927
+
+ Dear Readers,
+Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out.
+Below, you will find some obstacles we have stumbled across in the past.
+
+
Try to rebuild the project/solution
+
Restart Visual Studio if rebuilding the solution did not stop the nag screen
+
If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.
+
Do the main project (executable) and all referenced projects contain the licenses.licx file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).
+
The licenses.licx file should contain only a single reference to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.
+
Run the Activator application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).
+
You can try to finish the activation via the Activator app and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).
+
Check, if the license-blv.dat file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com
+
Check, if your projects reference the same version of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.
+
The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is specific to each machine. Rather follow the activation process on each machine.
+
+
We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.
+]]>
+ http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/feed/
+ 0
+
+
+ The Three Main Advantages Better ListView has Over the Classic .NET Framework
+ http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/
+ http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/#respond
+ Thu, 09 Feb 2017 21:51:12 +0000
+
+
+
+ http://www.componentowl.com/blog/?p=921
+
+ Dear Readers,
+When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?
+Here are the three main reasons we think Better ListView is the ideal solution for you if you are planning to use a professional alternative:
+
1) The intuitive approach on getting started
+
The good thing is, you can get started right away. Due to the build-up of processes, as well as the well documented procedures you have almost no learning period. Component Owl keeps its design close to the original .NET ListView so you do not have to get acquainted to a completely new system. But still, the changes made are substantial enough to make your working routine so much easier. Whether its the inbuilt drag & drop, the sub-item images or the multi-column sorting, the processes are meant to make your life easier.
+
2) The fast and helpful support
+
As Component Owl has been on the market for quite a while now, it has been further developed and improved countless times, resulting in a detailed and meaningful FAQ which answer to the majority of your questions. In case you cannot find the answer you need, you can rely on our support system which will give you feedback on you request within 24 hours. This allows you to keep the workflow going with almost no interruptions and puts you ahead of the freeware users.
+
3) The possibility to customize
+
Just like every developer has his own style of working, Component Owl can be customized to every user needs. The many opportunities to adapt your surface to your favorite design or to arrange the necessary tools the way you need them, allows you to optimize your workflow to perform even better.
+
These 3 named advantages are just a few of the many that Component Owl offers you. For more infromation just check out our trial version to see for yourself.
+]]>
+ http://www.componentowl.com/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/feed/
+ 0
+
+
+ BLV and Internet Explorer
+ http://www.componentowl.com/blog/blv-and-internet-explorer/
+ http://www.componentowl.com/blog/blv-and-internet-explorer/#respond
+ Sun, 13 Nov 2016 22:37:47 +0000
+
+
+
+
+ http://www.componentowl.com/blog/?p=914
+
+ As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.
+
Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:
+
System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")
+
The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”
+
Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.
+
We recommend the second solution as we reckon it to be the safer one.
Better ListView 3.11 supports aligning images in sub-items and columns to center. Simply set AlignHorizontalImage property of an sub-item or column to BetterListViewImageAlignmentHorizontal.OverlayCenter.
+
The image will be centered inside available space regardless of text.
+
This is useful for sub-items and column headers consisting of image only.
Better ListView 3.10.0 allows displaying fully interactive check boxes and even radio buttons in sub-item cells.
+
This feature can be activated simply by setting CheckBoxAppearance property of a given sub-item to other value than Hide. Such sub-item will not display check box or radio instead of image and text.
+
Please note the first sub-item’s properties do not apply as they are overriden by item’s properties. These two are separate for the case of column reordering (keeping consistency of sub-item states).
+
Another new feature in Better ListView is that check boxes or radios can be displayed disabled. This can be achieved by setting CheckEnabled property to false on the respective item or sub-item.
+
Sub-item check boxes can be operated by both mouse and keyboard. Checking sub-item with keyboard can be done by navigating focus rectangle by arrow keys to the given sub-item and pressing spacebar.
+]]>
+ http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/feed/
+ 0
+
+
+ How to Add Grid Lines in Empty Space in Better ListView
+ http://www.componentowl.com/blog/how-to-add-grid-lines-in-empty-space-in-better-listview/
+ http://www.componentowl.com/blog/how-to-add-grid-lines-in-empty-space-in-better-listview/#respond
+ Wed, 30 Apr 2014 09:51:46 +0000
+
+
+
+
+
+
+
+
+
+
+
+
+ http://www.componentowl.com/blog/?p=894
+
+
Default list without grid lines below items
+
List with grid lines added
+
+
Setting grid lines in Better ListView is easy. Simply make sure you are using Details view (the default view). Then you can set GridLines property to one of the following values:
+
+
None – grid lines are hidden
+
Horizontal – only horizontal lines are displayed
+
Vertical – only vertical lines are displayed
+
Grid – both horizontal and vertical lines are displayed, forming a grid
+
+
None of these settings, however, cause drawing lines below the last visible item, which may be desirable. The reason for this is that Better ListView supports custom item height and there is uncertainity about the spacing between new grid lines (smallest?, largest?, average?) It is up to your choice.
+
To draw new grid lines, handle the DrawBackground event (or subclass BetterListView and override the OnDrawBackground method) with the following code:
int y = (bounds.BoundsOuterExtended.Bottom + rowHeight);
+
while (y < rectClient.Bottom)
+ {
+ eventArgs.Graphics.DrawLine(
+ penGridLines,
+ rectClient.Left,
+ y,
+ rectClient.Right - 1,
+ y);
+
+ y += rowHeight;
+ }
+
+ penGridLines.Dispose();
+}
+[/csharp]
+
+What this code does is getting the last visible item using BottomItem property. It is important to get this visible item instead of e.g. first item because GetItemBounds method returns non-null value on visible items only. The GetItemBounds method reveals item measurement which is used to determine item height and coordinate of its bottom. Finally, we draw new lines using current grid line color (ColorGridLines property) until reaching the bottom of the view.
There are few ways of making searching in large list of items more convenient. For example, Better ListView provides Search Highlighting and Item Hiding features that can be used to improve searching. The above animation shows both of these features in action when searching for a word “pear” using keyboard.
+
The implementation is very simple and involves handling just two events: ItemSearch (raised whenever item is searched, e.g. using keyboard ) and KeyDown:
+
[csharp gutter=”false” toolbar=”false”]
+var listView = new BetterListView();
if (e.KeyCode == Keys.Escape)
+ {
+ // remove search highlight
+ //NOTE: we could use BetterListView.RemoveSearchHighlight() but this applies to visible items only and some items are hidden at the time
+ foreach (var item in listView.Items)
+ {
+ item.SearchHighlight = BetterListViewSearchHighlight.Empty;
+ }
+
// make all items visible
+ foreach (var item in listView.Items)
+ {
+ item.Visible = true;
+ }
+
// mark the key as handled
+ e.Handled = true;
+
// suppress KeyPress event to prevent ItemSearch from happening
+ e.SuppressKeyPress = true;
+ }
Better ListView 3.7.0 contains two new properties that allow you to set custom horizontal and vertical scroll bar sizes:
+
+
HScrollBarWidth
+
VScrollBarHeight
+
+
Of course, you can set these custom sizes in design-time as well as in run-time.
+
Larger scroll bars are practical on modern touch-enabled devices with high resolution screens. The default scroll bar size (17 pixels) may be too small and you may want to make it just large enough for your index finger.
// get boundaries of items (this excludes column headers and scroll bars)
+ Rectangle rectContent = BoundsContent;
+
// get size of the gradient
+ int fadingSize = Math.Min(
+ FadingSize,
+ rectContent.Height >> 1);
+
// get boundaries of the gradents
+ Rectangle rectFadingTop = new Rectangle(
+ rectContent.Left,
+ rectContent.Top,
+ rectContent.Width,
+ fadingSize);
+
+ ”’ Default size of the fading gradient.
+ ”’
+
Private Const FadingSize As Integer = 64
+
Public Sub New()
+ ‘ this is required because we will draw outside item boundaries
+ OptimizedInvalidation = False
+ End Sub
+
Protected Overrides Sub DrawingRedrawCore(graphics As Graphics)
+ MyBase.DrawingRedrawCore(graphics)
+
‘ get boundaries of items (this excludes column headers and scroll bars)
+ Dim rectContent As Rectangle = BoundsContent
+
‘ get size of the gradient
+ Dim fadingSize__1 As Integer = Math.Min(FadingSize, rectContent.Height >> 1)
+
‘ get boundaries of the gradents
+ Dim rectFadingTop As New Rectangle(rectContent.Left, rectContent.Top, rectContent.Width, fadingSize__1)
+
Dim rectFadingBottom As New Rectangle(rectContent.Left, rectContent.Bottom – fadingSize__1, rectContent.Width, fadingSize__1)
+
‘ make boundaries larger to avoid rounding errors in gradient brushes
+ rectFadingTop.Inflate(1, 1)
+ rectFadingBottom.Inflate(1, 1)
+
Dim brushFadingTop As Brush = New LinearGradientBrush(rectFadingTop, BackColor, Color.Transparent, LinearGradientMode.Vertical)
+ Dim brushFadingBottom As Brush = New LinearGradientBrush(rectFadingBottom, Color.Transparent, SystemColors.Window, LinearGradientMode.Vertical)
+
‘ deflate the gradient boundaries back
+ rectFadingTop.Inflate(-1, -1)
+ rectFadingBottom.Inflate(-1, -1)
+
‘ draw the gradients
+ graphics.FillRectangle(brushFadingTop, rectFadingTop)
+ graphics.FillRectangle(brushFadingBottom, rectFadingBottom)
+
‘ cleanup
+ brushFadingTop.Dispose()
+ brushFadingBottom.Dispose()
+ End Sub
+End Class
+[/vb]
+]]>
+ http://www.componentowl.com/blog/how-to-make-items-fading-on-edges-in-better-listview/feed/
+ 0
+
+
+
+
+
\ No newline at end of file
diff --git a/blog/index.html?p=894.html b/blog/index.html?p=894.html
new file mode 100644
index 0000000..e972a0d
--- /dev/null
+++ b/blog/index.html?p=894.html
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+How to Add Grid Lines in Empty Space in Better ListView « Owl's Blog on .NET development
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Setting grid lines in Better ListView is easy. Simply make sure you are using Details view (the default view). Then you can set GridLines property to one of the following values:
+
+
None – grid lines are hidden
+
Horizontal – only horizontal lines are displayed
+
Vertical – only vertical lines are displayed
+
Grid – both horizontal and vertical lines are displayed, forming a grid
+
+
None of these settings, however, cause drawing lines below the last visible item, which may be desirable. The reason for this is that Better ListView supports custom item height and there is uncertainity about the spacing between new grid lines (smallest?, largest?, average?) It is up to your choice.
+
To draw new grid lines, handle the DrawBackground event (or subclass BetterListView and override the OnDrawBackground method) with the following code:
int y = (bounds.BoundsOuterExtended.Bottom + rowHeight);
+
while (y < rectClient.Bottom)
+ {
+ eventArgs.Graphics.DrawLine(
+ penGridLines,
+ rectClient.Left,
+ y,
+ rectClient.Right - 1,
+ y);
+
+ y += rowHeight;
+ }
+
+ penGridLines.Dispose();
+}
+[/csharp]
+
+What this code does is getting the last visible item using BottomItem property. It is important to get this visible item instead of e.g. first item because GetItemBounds method returns non-null value on visible items only. The GetItemBounds method reveals item measurement which is used to determine item height and coordinate of its bottom. Finally, we draw new lines using current grid line color (ColorGridLines property) until reaching the bottom of the view.
Better ListView 3.10.0 allows displaying fully interactive check boxes and even radio buttons in sub-item cells.
+
This feature can be activated simply by setting CheckBoxAppearance property of a given sub-item to other value than Hide. Such sub-item will not display check box or radio instead of image and text.
+
Please note the first sub-item’s properties do not apply as they are overriden by item’s properties. These two are separate for the case of column reordering (keeping consistency of sub-item states).
+
Another new feature in Better ListView is that check boxes or radios can be displayed disabled. This can be achieved by setting CheckEnabled property to false on the respective item or sub-item.
+
Sub-item check boxes can be operated by both mouse and keyboard. Checking sub-item with keyboard can be done by navigating focus rectangle by arrow keys to the given sub-item and pressing spacebar.
Better ListView 3.11 supports aligning images in sub-items and columns to center. Simply set AlignHorizontalImage property of an sub-item or column to BetterListViewImageAlignmentHorizontal.OverlayCenter.
+
The image will be centered inside available space regardless of text.
+
This is useful for sub-items and column headers consisting of image only.
As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.
+
Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:
+
System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")
+
The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”
+
Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.
+
We recommend the second solution as we reckon it to be the safer one.
Component Owl codes Better ListView control all night so you don't have to.
+
+
+
+
+
+
The Three Main Advantages Better ListView has Over the Classic .NET Framework
+
+
+ Blog Post by Brian Galura published on Thursday, 09 February 2017 in Better ListView
+
+
+
Dear Readers,
+When evaluating an alternative to replace the .NET ListView you might stumble upon the question: what sets the different solutions available apart from each other? Which one meets my demands the best?
+Here are the three main reasons we think Better ListView is the ideal solution for you if you are planning to use a professional alternative:
+
1) The intuitive approach on getting started
+
The good thing is, you can get started right away. Due to the build-up of processes, as well as the well documented procedures you have almost no learning period. Component Owl keeps its design close to the original .NET ListView so you do not have to get acquainted to a completely new system. But still, the changes made are substantial enough to make your working routine so much easier. Whether its the inbuilt drag & drop, the sub-item images or the multi-column sorting, the processes are meant to make your life easier.
+
2) The fast and helpful support
+
As Component Owl has been on the market for quite a while now, it has been further developed and improved countless times, resulting in a detailed and meaningful FAQ which answer to the majority of your questions. In case you cannot find the answer you need, you can rely on our support system which will give you feedback on you request within 24 hours. This allows you to keep the workflow going with almost no interruptions and puts you ahead of the freeware users.
+
3) The possibility to customize
+
Just like every developer has his own style of working, Component Owl can be customized to every user needs. The many opportunities to adapt your surface to your favorite design or to arrange the necessary tools the way you need them, allows you to optimize your workflow to perform even better.
+
These 3 named advantages are just a few of the many that Component Owl offers you. For more infromation just check out our trial version to see for yourself.
Dear Readers,
+Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out.
+Below, you will find some obstacles we have stumbled across in the past.
+
+
Try to rebuild the project/solution
+
Restart Visual Studio if rebuilding the solution did not stop the nag screen
+
If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.
+
Do the main project (executable) and all referenced projects contain the licenses.licx file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).
+
The licenses.licx file should contain only a single reference to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.
+
Run the Activator application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).
+
You can try to finish the activation via the Activator app and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).
+
Check, if the license-blv.dat file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com
+
Check, if your projects reference the same version of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.
+
The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is specific to each machine. Rather follow the activation process on each machine.
+
+
We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.
Better ListView is a list view control for .NET Windows Forms
+
Designed as a replacement for the regular .NET list view control.
+
Compatible with: Visual Studio 2015, 2013, 2012, 2010, 2008, 2005, with full designer support.
+
For C#, Visual Basic .NET (VB.NET), managed C++, and other CLI languages.
+
Compatible with .NET 4.5, .NET 4, .NET 3.5, .NET 3, .NET 2, and newer. Supports .NET Client Profile.
+
Runs on Windows 10, 8, 7, Vista, 2003, XP, 2000, and newer, both 32-bit and 64-bit.
+
Better ListView has more features and flexibility, always uses the current system theme (including Aero support), and removes limitations of the regular .NET list view control.
+
Minimum learning needed. Better ListView can be used just like the regular list view.
+
Written in pure managed C# code. It is fast, light-weight and optimized for 10k+ items.
+
Easy royalty-free deployment. Single DLL file that has just 250kB when compressed.
+
The assembly is FIPS-compliant, CLS-compliant, digitally signed and strongly named.
+
Tested in the real world by thousands of users
+
+
+
+
+
Extra features summary
+
+Better ListView is fast and flicker-free, supports hierarchical items, has improved grouping, better drag & drop and item reordering support, better column headers, inbuilt sorting, multi-column sorting, better images support, context menus for column headers and items, embedded controls for editing support, automatic and custom sizing of items and images, thumbnails view, richer event data, item text formatting, XML and binary serialization, data-binding, owner-drawing options, better tooltips, powerful hit-test, improved usability, easy saving/loading of contents into file or string, multi-line items, and more.
+
+
+Component Owl created the one and only tool I don’t want to be without when it comes to software developing in Visual Studio. Also, I’ve been working as software user/developer for the last 26 years, and I have never before experienced a support that really goes the needed extra mile to make things work, like the guys at Component Owl do.
+
Göran Alfvén, Sweden
+
+
+The control is very easy and intuitive to use and is well documented.
+
DevProConnections.com Review
+
+
+Better List View is awesome.
+
Daniel N
+
+
Hierarchical items
+
+You can create tree-like structures in Better ListView; inbuilt drag & drop hierarchical reordering of items.
+
+
Improved grouping
+
+Better grouping – customizable group headers look and behavior, collapsible, image support, context menu support, focusable, etc. Each group header can be customized individually.
+
+
Save/load contents with 1 line of code
+
+You can save or load the contents of Better ListView in just 1 line of code, either to file or string. Both XML and binary serialization is supported.
+
+
Double-buffered and flicker free
+
+Simply put, Better ListView is smooth. Regular listview requires multiple anti-flicker techniques, but you do not have to worry about that with Better ListView. Better ListView is optimized for 100k+ items.
+
+
Column header images
+
+You can use images in column headers. Custom image sizes are supported.
+
+
+
+
Sub-item images
+
+You can set images to list view sub-items. Regular list view allows you to set only one image per list view item, but Better ListView can show image for every sub-item (in every column).
+
+
Image-List and Image Support
+
+Better ListView supports both image list, or individual image objects (System.Drawing.Image). Regular list view forces you to use ImageList object.
+
+
Custom list view Image size
+
+You can use any image size in the list view. Better ListView can also automatically resize images with preserving aspect ratio.
+
+
Drag & drop with insertion mark
+
+Highly customizable drag-drop for both internal and external drag-drop. You can use drop highlight or insertion mark drag drop modes.
+
+
+
+
List view item reordering
+
+Better ListView has inbuilt item reordering and item drag & drop inserting at the position specified by user. Drag & drop preview is shown using an insertion mark.
+
+
Column-header reordering
+
+Better ListView has inbuilt easy drag & drop column header reordering that is much easier to use than in the regular list view. Insertion mark is shown, auto-scrolling is supported.
+
+
+
+
Auto-scroll for column header reordering and item reordering
+
+Better ListView has inbuilt auto-scrolling for column header and item reordering.
+
+
Column headers can be shown in all views
+
+Better ListView can display column headers in all views - Details, SmallIcons, LargeIcons, List, Tile, Thumbnails. This allows users to sort items in all views. Additionally, you can also hide the column headers even in the details view.
+
+
+
+
Thumbnails view mode
+
+Better ListView supports additional "thumbnails" view mode that allows you to view images of large sizes. The images are automatically and smoothly resized with preserved aspect ratio. You can define the maximum/minimum desired image sizes.
+
+
Image shadows, borders and padding
+All images in Better ListView can have border or shadow specified. You can also specify padding that gives you space for owner drawing (eg. overlay images). This can be used in all views.
+
+Image shadows like in Windows 7 theme are supported. Windows Explorer uses very similar shadows for image thumbnails.
+
+
+
+
Multi-column sorting
+
+You can sort by multiple columns in Better ListView. Simply shift+click a secondary (or third, etc) column to add it to the current sort. Zero code needed. Additionally, the background of the primary (first) sort column can be highlighted.
+
+
+
+
Inbuilt sorting and natural sorting
+
+Better ListView has inbuilt list view sorting that works out of the box. You no longer need to implement your own item comparer. If custom comparer is needed, you can inherit from the Better ListView comparer to save time.
+
+
Richer event data
+
+Many events have richer event data that allow you to do extra operations or tell you extra useful information. The richer events include: AfterItemSort, BeforeDrag, BeforeItemSort, ColumnClick (allows you to cancel sort), DragDropException, DrawBackground, DrawColumnHeaderBackground, DrawColumnHeader, DrawItemBackground, DrawItem, HitTestChanged, ItemActivate (event data tells you how the item got activated - mouse, keyboard or code), ItemDrag, ItemDrop, ItemReorder, ItemSearch, LabelEdit, RequestEmebeddedControl.
+
+
Checkboxes in all views
+
+You can have checkboxes in LargeIcons view, SmallIcons view, List view, Thumbnails view and of course also in the Details view.
+
+
+
+
Three state checkboxes
+Three state checkboxes are supported in Better ListView:
+
+
+
+
Hide or show checkboxes of specific ListView Items
+
+You can hide checkbox for any ListViewItem. You can also show checkboxes only for specified items. All list items in Better ListView have "AllowShowCheckBox" property.
+
+
+
+
Powerful list view tooltips
+
+You can display tooltips for nearly any part of Better ListView - tooltips for items, sub-items, checkboxes, item images, sub-item images, column headers, column header images, column header borders, and even for custom areas (regions). Owner-drawn tooltips are supported.
+
+
+
+
Uses current Windows theme
+
+Instead of implementing custom, un-native look and feel, Better ListView always automatically fully uses the current system theme. It supports Aero as well. Better ListView always looks great and feels right to the user.
+
+
XML and binary serialization of everything
+
+Every part of Better ListView (items, sub-items, column headers) can be both binary and XML serialized. You can easily XML serialize whole list view (or binary serialize) to save it to file or transfer items between controls. Standard ways of .NET serialization can be used (BinaryFormatter, XmlSerializer).
+
+
Owner drawing
+
+Better ListView allows you to draw over the client area, items and column headers. Contrary to .NET ListView, owner drawing is fully operational even when the system uses Aero theme. You can draw separately to background and foreground parts of Better ListView without worrying about proper drawing order. Owner drawing events provide rich data, including exact item state and areas of every item part.
+
+
+
+
Multi-line items
+
+Better ListView supports multi-line items. Items with very long text can be displayed on multiple lines. Highly customizable and powerful: Focused items can have custom number of lines; hard line breaks supported as well. Foreground overlay "watermark" images are easily achievable using owner-drawing.
+
+
+
+
Background image support
+
+Display background image in Better ListView easily using the BackgroundImage property. Many layouts (stretch, tile, none), alignments (top, bottom, left, right, center and combinations) are supported, as well as customizable opacity.
+
+
+
+
Context menu for column headers, list items, and empty area
+
+Better ListView supports 3 types of context menus: Column header context menu, list view items context menu, and empty area context menu (when right-clicking white space).
+
+
+
+
Advanced hit-test with detailed information
+The hit test in Better ListView returns very detailed information. It tells you not only the location (Client Area, Sub-Item, Sub-Item Text, Sub-Item Image, Checkbox, Column Header Image, and many more), but it also tells you the state of the item, and part of the item (left or right).
+
+
+
+
Customizable search-by-typing
+
+Better ListView has excellent customization functionality for find-as-you-type item searching. The search modes include: Prefix (searchs from beginning of items), Substring (search any part of item text), Prefix + Substring, or Disabled. Additionally, search options include: Case sensitive, search first word only, play sound when item not found, prefer prefixes, search whole words. You can also restrict the search to only certain columns. You can also call "FindItemsWithText" function to find items from code.
+
+
Display text when the list view is empty
+You can display a gray text centered in the list view if it's empty to hint or educate users. This will make your software more user friendly.
+
+
+
+
Embed controls for item editing
+Inbuilt in-line editing support includes label edit, combobox edit, date picker edit. You can also embed any custom control for in-line editing. Sub-item editing is supported. Highly customizable.
+
+
+
+
ListView item text formatting
+
+Supports both text trimming and auto-ellipsis for text that's too long. You can choose from: TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath (for file paths). Column header text can be broken into multiple lines.
+
+
Focusable ListView sub-items and groups
+
+Focus sub-items or groups in Better ListView easily with keyboard. Just use the arrow keys. (This is impossible with the regular .NET ListView)
+
+
+You can set custom sizes for item text area and item images. You can also set custom size for column header text area and column header images. (Text area size is different from font size, text area size basically defines the size of the list view item.) This enables you to make tiny/huge column headers or list view items.
+
+
+
+
+It's an odd thing when you're inspired by a form component, but Component Owl
+with their Better ListView has done it. Love its native feel.
+
Daniel N, USA
+
+
More advantages of our improved list view component:
+
+
Developer friendly: All classes and properties are as similar to the regular list view as possible. Everything is intuitive, very little learning is needed. You can use Better ListView immediately. Save time and ship sooner.
+
Better ListView has improved usability and fixed behavior. All Windows users are familiar with the list view used in Windows Explorer. Better ListView mimicks behavior and look & feel of the Windows Explorer list view as much as possible to leverage the existing user knowledge. Using Better ListView is pleasant for users. Many other list view components implement custom look and behavior and can oftentimes downright frustrate users (many controls don't even support mouse-wheel scrolling!) This doesn't happen with Better ListView.
+
Guaranteed support and continued development: Better ListView is developed as a joint-venture of two software companies that use Better ListView in their main products (popular Swift To-Do List and ImagingShop). These applications are used by thousands of users daily. This is your guarantee that Better ListView will be supported and developed in the future.
+
Tested in real world applications by thousands of users: Because Better ListView is used in professional consumer desktop software applications - Swift To-Do List and ImagingShop, thousands of users work with Better ListView every day. Although we use unit tests that cover most of code, and do thorough inhouse testing, this is your true guarantee that it is tested thoroughly in the real world. It is extremely stable.
+
Better ListView does not inherit from the regular .NET list view. It is written in pure managed C# code and is flexible, light weight, and fast. Extensions of the regular .net list view only go so far. Better ListView goes further. Soure code licenses are also available for ultimate customization.
+
+
+
+In addition to creating a new List View control to incorporate broader flexibility and functionality, Better ListView could also be called Fixed ListView, as it corrects a number of annoying problems with the standard List View that Microsoft delivers to Visual Studio customers.
+