diff --git a/public/_redirects b/public/_redirects index fb51490..e0a8279 100644 --- a/public/_redirects +++ b/public/_redirects @@ -129,4 +129,9 @@ # Catch-all for any remaining WordPress ?p= encoded URLs /blog/index.html%3F* /blog 301 +# Multi-segment .html strip (Cloudflare /*.html only matches single-segment) +/:a/:b.html /:a/:b 301 +/:a/:b/:c.html /:a/:b/:c 301 +/:a/:b/:c/:d.html /:a/:b/:c/:d 301 + # Doc/API legacy path redirects diff --git a/public/blog/wp-content/uploads/2011/01/is-full-300x229.jpg b/public/blog/wp-content/uploads/2011/01/is-full-300x229.jpg new file mode 100644 index 0000000..51c3c48 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/is-full-300x229.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/is-full.jpg b/public/blog/wp-content/uploads/2011/01/is-full.jpg new file mode 100644 index 0000000..6406813 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/is-full.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/is-highlight-300x229.jpg b/public/blog/wp-content/uploads/2011/01/is-highlight-300x229.jpg new file mode 100644 index 0000000..5dd7507 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/is-highlight-300x229.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/is-highlight.jpg b/public/blog/wp-content/uploads/2011/01/is-highlight.jpg new file mode 100644 index 0000000..19497e8 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/is-highlight.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/stdl-full-300x206.jpg b/public/blog/wp-content/uploads/2011/01/stdl-full-300x206.jpg new file mode 100644 index 0000000..0fe13ce Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/stdl-full-300x206.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/stdl-full.jpg b/public/blog/wp-content/uploads/2011/01/stdl-full.jpg new file mode 100644 index 0000000..4c64c36 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/stdl-full.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/stdl-highlight-300x206.jpg b/public/blog/wp-content/uploads/2011/01/stdl-highlight-300x206.jpg new file mode 100644 index 0000000..e907c81 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/stdl-highlight-300x206.jpg differ diff --git a/public/blog/wp-content/uploads/2011/01/stdl-highlight.jpg b/public/blog/wp-content/uploads/2011/01/stdl-highlight.jpg new file mode 100644 index 0000000..b900449 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/01/stdl-highlight.jpg differ diff --git a/public/blog/wp-content/uploads/2011/02/borders-150x150.jpg b/public/blog/wp-content/uploads/2011/02/borders-150x150.jpg new file mode 100644 index 0000000..4affc6b Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/borders-150x150.jpg differ diff --git a/public/blog/wp-content/uploads/2011/02/borders-300x300.jpg b/public/blog/wp-content/uploads/2011/02/borders-300x300.jpg new file mode 100644 index 0000000..970fbff Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/borders-300x300.jpg differ diff --git a/public/blog/wp-content/uploads/2011/02/borders.jpg b/public/blog/wp-content/uploads/2011/02/borders.jpg new file mode 100644 index 0000000..0ad6204 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/borders.jpg differ diff --git a/public/blog/wp-content/uploads/2011/02/extra-graphics-150x150.png b/public/blog/wp-content/uploads/2011/02/extra-graphics-150x150.png new file mode 100644 index 0000000..adb551f Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/extra-graphics-150x150.png differ diff --git a/public/blog/wp-content/uploads/2011/02/extra-graphics-300x300.png b/public/blog/wp-content/uploads/2011/02/extra-graphics-300x300.png new file mode 100644 index 0000000..94988ae Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/extra-graphics-300x300.png differ diff --git a/public/blog/wp-content/uploads/2011/02/extra-graphics.png b/public/blog/wp-content/uploads/2011/02/extra-graphics.png new file mode 100644 index 0000000..28586c0 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/extra-graphics.png differ diff --git a/public/blog/wp-content/uploads/2011/02/screenshot-300x196.jpg b/public/blog/wp-content/uploads/2011/02/screenshot-300x196.jpg new file mode 100644 index 0000000..ac8be6d Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/screenshot-300x196.jpg differ diff --git a/public/blog/wp-content/uploads/2011/02/screenshot.jpg b/public/blog/wp-content/uploads/2011/02/screenshot.jpg new file mode 100644 index 0000000..49965f3 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/02/screenshot.jpg differ diff --git a/public/blog/wp-content/uploads/2011/03/screen-styles-238x300.png b/public/blog/wp-content/uploads/2011/03/screen-styles-238x300.png new file mode 100644 index 0000000..de6529f Binary files /dev/null and b/public/blog/wp-content/uploads/2011/03/screen-styles-238x300.png differ diff --git a/public/blog/wp-content/uploads/2011/03/screen-styles.png b/public/blog/wp-content/uploads/2011/03/screen-styles.png new file mode 100644 index 0000000..4b9121c Binary files /dev/null and b/public/blog/wp-content/uploads/2011/03/screen-styles.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-1-300x176.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-1-300x176.png new file mode 100644 index 0000000..1856f7b Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-1-300x176.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-1.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-1.png new file mode 100644 index 0000000..66ee4e2 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-1.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-2-300x134.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-2-300x134.png new file mode 100644 index 0000000..ed3b5db Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-2-300x134.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-2.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-2.png new file mode 100644 index 0000000..4299360 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-2.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-3-300x103.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-3-300x103.png new file mode 100644 index 0000000..415022a Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-3-300x103.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-3.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-3.png new file mode 100644 index 0000000..4464ec3 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-3.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-4-300x61.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-4-300x61.png new file mode 100644 index 0000000..664752d Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-4-300x61.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-4.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-4.png new file mode 100644 index 0000000..5e9c1dd Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-4.png differ diff --git a/public/blog/wp-content/uploads/2011/05/cowl-blog-5.png b/public/blog/wp-content/uploads/2011/05/cowl-blog-5.png new file mode 100644 index 0000000..283fe5b Binary files /dev/null and b/public/blog/wp-content/uploads/2011/05/cowl-blog-5.png differ diff --git a/public/blog/wp-content/uploads/2011/06/blv-thumbnails-2-300x242.jpg b/public/blog/wp-content/uploads/2011/06/blv-thumbnails-2-300x242.jpg new file mode 100644 index 0000000..c5e9830 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/06/blv-thumbnails-2-300x242.jpg differ diff --git a/public/blog/wp-content/uploads/2011/06/blv-thumbnails-2.jpg b/public/blog/wp-content/uploads/2011/06/blv-thumbnails-2.jpg new file mode 100644 index 0000000..01d28ce Binary files /dev/null and b/public/blog/wp-content/uploads/2011/06/blv-thumbnails-2.jpg differ diff --git a/public/blog/wp-content/uploads/2011/06/blv-thumbnails-300x242.jpg b/public/blog/wp-content/uploads/2011/06/blv-thumbnails-300x242.jpg new file mode 100644 index 0000000..9735858 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/06/blv-thumbnails-300x242.jpg differ diff --git a/public/blog/wp-content/uploads/2011/06/blv-thumbnails.jpg b/public/blog/wp-content/uploads/2011/06/blv-thumbnails.jpg new file mode 100644 index 0000000..5a50dc7 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/06/blv-thumbnails.jpg differ diff --git a/public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-1.png b/public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-1.png new file mode 100644 index 0000000..82da67f Binary files /dev/null and b/public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-1.png differ diff --git a/public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-2.png b/public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-2.png new file mode 100644 index 0000000..358874b Binary files /dev/null and b/public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-2.png differ diff --git a/public/blog/wp-content/uploads/2011/07/betterlistview2-overview1-300x279.png b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview1-300x279.png new file mode 100644 index 0000000..2644ff4 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview1-300x279.png differ diff --git a/public/blog/wp-content/uploads/2011/07/betterlistview2-overview1.png b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview1.png new file mode 100644 index 0000000..b6445c5 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview1.png differ diff --git a/public/blog/wp-content/uploads/2011/07/betterlistview2-overview2-300x262.png b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview2-300x262.png new file mode 100644 index 0000000..9a00341 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview2-300x262.png differ diff --git a/public/blog/wp-content/uploads/2011/07/betterlistview2-overview2.png b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview2.png new file mode 100644 index 0000000..73f2398 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview2.png differ diff --git a/public/blog/wp-content/uploads/2011/07/betterlistview2-overview3-300x280.png b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview3-300x280.png new file mode 100644 index 0000000..ea7b6c0 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview3-300x280.png differ diff --git a/public/blog/wp-content/uploads/2011/07/betterlistview2-overview3.png b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview3.png new file mode 100644 index 0000000..5917c6b Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/betterlistview2-overview3.png differ diff --git a/public/blog/wp-content/uploads/2011/07/blv-aero-300x213.png b/public/blog/wp-content/uploads/2011/07/blv-aero-300x213.png new file mode 100644 index 0000000..45b4c56 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/blv-aero-300x213.png differ diff --git a/public/blog/wp-content/uploads/2011/07/blv-aero.png b/public/blog/wp-content/uploads/2011/07/blv-aero.png new file mode 100644 index 0000000..b97f0d4 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/blv-aero.png differ diff --git a/public/blog/wp-content/uploads/2011/07/blv-classic-300x213.png b/public/blog/wp-content/uploads/2011/07/blv-classic-300x213.png new file mode 100644 index 0000000..7b61652 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/blv-classic-300x213.png differ diff --git a/public/blog/wp-content/uploads/2011/07/blv-classic.png b/public/blog/wp-content/uploads/2011/07/blv-classic.png new file mode 100644 index 0000000..bd3958f Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/blv-classic.png differ diff --git a/public/blog/wp-content/uploads/2011/07/blv-luna-300x213.png b/public/blog/wp-content/uploads/2011/07/blv-luna-300x213.png new file mode 100644 index 0000000..e3821e0 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/blv-luna-300x213.png differ diff --git a/public/blog/wp-content/uploads/2011/07/blv-luna.png b/public/blog/wp-content/uploads/2011/07/blv-luna.png new file mode 100644 index 0000000..386914c Binary files /dev/null and b/public/blog/wp-content/uploads/2011/07/blv-luna.png differ diff --git a/public/blog/wp-content/uploads/2011/08/blv-fileexplorersample.png b/public/blog/wp-content/uploads/2011/08/blv-fileexplorersample.png new file mode 100644 index 0000000..9c4fe6e Binary files /dev/null and b/public/blog/wp-content/uploads/2011/08/blv-fileexplorersample.png differ diff --git a/public/blog/wp-content/uploads/2011/08/column-hide-after.png b/public/blog/wp-content/uploads/2011/08/column-hide-after.png new file mode 100644 index 0000000..ef0ac87 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/08/column-hide-after.png differ diff --git a/public/blog/wp-content/uploads/2011/08/column-hide-before-300x82.png b/public/blog/wp-content/uploads/2011/08/column-hide-before-300x82.png new file mode 100644 index 0000000..8f7a9bf Binary files /dev/null and b/public/blog/wp-content/uploads/2011/08/column-hide-before-300x82.png differ diff --git a/public/blog/wp-content/uploads/2011/08/column-hide-before.png b/public/blog/wp-content/uploads/2011/08/column-hide-before.png new file mode 100644 index 0000000..29fbcbf Binary files /dev/null and b/public/blog/wp-content/uploads/2011/08/column-hide-before.png differ diff --git a/public/blog/wp-content/uploads/2011/09/2611677_345f676344.jpg b/public/blog/wp-content/uploads/2011/09/2611677_345f676344.jpg new file mode 100644 index 0000000..bce207d Binary files /dev/null and b/public/blog/wp-content/uploads/2011/09/2611677_345f676344.jpg differ diff --git a/public/blog/wp-content/uploads/2011/09/vs-error-list-300x111.png b/public/blog/wp-content/uploads/2011/09/vs-error-list-300x111.png new file mode 100644 index 0000000..ed9a92e Binary files /dev/null and b/public/blog/wp-content/uploads/2011/09/vs-error-list-300x111.png differ diff --git a/public/blog/wp-content/uploads/2011/09/vs-error-list.png b/public/blog/wp-content/uploads/2011/09/vs-error-list.png new file mode 100644 index 0000000..57cdba3 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/09/vs-error-list.png differ diff --git a/public/blog/wp-content/uploads/2011/10/samples-cs-vb-300x80.png b/public/blog/wp-content/uploads/2011/10/samples-cs-vb-300x80.png new file mode 100644 index 0000000..b294e93 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/10/samples-cs-vb-300x80.png differ diff --git a/public/blog/wp-content/uploads/2011/10/samples-cs-vb.png b/public/blog/wp-content/uploads/2011/10/samples-cs-vb.png new file mode 100644 index 0000000..539354f Binary files /dev/null and b/public/blog/wp-content/uploads/2011/10/samples-cs-vb.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight-300x178.png b/public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight-300x178.png new file mode 100644 index 0000000..86fcd80 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight-300x178.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight.png b/public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight.png new file mode 100644 index 0000000..16fd6f6 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-multi-line-2.png b/public/blog/wp-content/uploads/2011/11/screen-multi-line-2.png new file mode 100644 index 0000000..6295b03 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-multi-line-2.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items-300x176.png b/public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items-300x176.png new file mode 100644 index 0000000..986ba70 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items-300x176.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items.png b/public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items.png new file mode 100644 index 0000000..cded606 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-wrapping-300x70.png b/public/blog/wp-content/uploads/2011/11/screen-wrapping-300x70.png new file mode 100644 index 0000000..1ed6c9f Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-wrapping-300x70.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screen-wrapping.png b/public/blog/wp-content/uploads/2011/11/screen-wrapping.png new file mode 100644 index 0000000..3da6f7e Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screen-wrapping.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screenshot-newlines-295x300.png b/public/blog/wp-content/uploads/2011/11/screenshot-newlines-295x300.png new file mode 100644 index 0000000..86359a2 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screenshot-newlines-295x300.png differ diff --git a/public/blog/wp-content/uploads/2011/11/screenshot-newlines.png b/public/blog/wp-content/uploads/2011/11/screenshot-newlines.png new file mode 100644 index 0000000..0b77d00 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/screenshot-newlines.png differ diff --git a/public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align-300x264.png b/public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align-300x264.png new file mode 100644 index 0000000..770f152 Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align-300x264.png differ diff --git a/public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align.png b/public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align.png new file mode 100644 index 0000000..98f4a5c Binary files /dev/null and b/public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align.png differ diff --git a/public/blog/wp-content/uploads/2011/12/screen-dynamic-300x157.gif b/public/blog/wp-content/uploads/2011/12/screen-dynamic-300x157.gif new file mode 100644 index 0000000..3a0935c Binary files /dev/null and b/public/blog/wp-content/uploads/2011/12/screen-dynamic-300x157.gif differ diff --git a/public/blog/wp-content/uploads/2011/12/screen-dynamic.gif b/public/blog/wp-content/uploads/2011/12/screen-dynamic.gif new file mode 100644 index 0000000..678f5eb Binary files /dev/null and b/public/blog/wp-content/uploads/2011/12/screen-dynamic.gif differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-combineditems1.png b/public/blog/wp-content/uploads/2012/01/blv-combineditems1.png new file mode 100644 index 0000000..7b1cbb0 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-combineditems1.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-combineditems2.png b/public/blog/wp-content/uploads/2012/01/blv-combineditems2.png new file mode 100644 index 0000000..de68905 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-combineditems2.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-150x150.png b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-150x150.png new file mode 100644 index 0000000..06b9cc9 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-150x150.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-300x300.png b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-300x300.png new file mode 100644 index 0000000..08e0607 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-300x300.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1.png b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1.png new file mode 100644 index 0000000..5d41a5f Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-1.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-150x150.png b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-150x150.png new file mode 100644 index 0000000..472a9eb Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-150x150.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-300x300.png b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-300x300.png new file mode 100644 index 0000000..452a2e1 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-300x300.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2.png b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2.png new file mode 100644 index 0000000..60773c0 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-nonselectable-2.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-readonly-1-300x229.png b/public/blog/wp-content/uploads/2012/01/blv-readonly-1-300x229.png new file mode 100644 index 0000000..586f33a Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-readonly-1-300x229.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-readonly-1.png b/public/blog/wp-content/uploads/2012/01/blv-readonly-1.png new file mode 100644 index 0000000..657f119 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-readonly-1.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-readonly-2-300x229.png b/public/blog/wp-content/uploads/2012/01/blv-readonly-2-300x229.png new file mode 100644 index 0000000..242e35b Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-readonly-2-300x229.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-readonly-2.png b/public/blog/wp-content/uploads/2012/01/blv-readonly-2.png new file mode 100644 index 0000000..f98b9f1 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-readonly-2.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-readonly-3-300x229.png b/public/blog/wp-content/uploads/2012/01/blv-readonly-3-300x229.png new file mode 100644 index 0000000..7c80e13 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-readonly-3-300x229.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-readonly-3.png b/public/blog/wp-content/uploads/2012/01/blv-readonly-3.png new file mode 100644 index 0000000..756d3e5 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-readonly-3.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1-300x202.png b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1-300x202.png new file mode 100644 index 0000000..b524a66 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1-300x202.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1.png b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1.png new file mode 100644 index 0000000..8f448ad Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2-300x202.png b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2-300x202.png new file mode 100644 index 0000000..5032977 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2-300x202.png differ diff --git a/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2.png b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2.png new file mode 100644 index 0000000..76a5671 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2.png differ diff --git a/public/blog/wp-content/uploads/2012/01/metadata-view-194x300.png b/public/blog/wp-content/uploads/2012/01/metadata-view-194x300.png new file mode 100644 index 0000000..5f9efe9 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/metadata-view-194x300.png differ diff --git a/public/blog/wp-content/uploads/2012/01/metadata-view.png b/public/blog/wp-content/uploads/2012/01/metadata-view.png new file mode 100644 index 0000000..00209a2 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/01/metadata-view.png differ diff --git a/public/blog/wp-content/uploads/2012/02/blv-invisibleitems-257x300.gif b/public/blog/wp-content/uploads/2012/02/blv-invisibleitems-257x300.gif new file mode 100644 index 0000000..ac91471 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/02/blv-invisibleitems-257x300.gif differ diff --git a/public/blog/wp-content/uploads/2012/02/blv-invisibleitems.gif b/public/blog/wp-content/uploads/2012/02/blv-invisibleitems.gif new file mode 100644 index 0000000..dc0a2e6 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/02/blv-invisibleitems.gif differ diff --git a/public/blog/wp-content/uploads/2012/02/distraction-junkie-coder.png.png b/public/blog/wp-content/uploads/2012/02/distraction-junkie-coder.png.png new file mode 100644 index 0000000..fbf5498 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/02/distraction-junkie-coder.png.png differ diff --git a/public/blog/wp-content/uploads/2012/02/zen-coder.png b/public/blog/wp-content/uploads/2012/02/zen-coder.png new file mode 100644 index 0000000..f45699c Binary files /dev/null and b/public/blog/wp-content/uploads/2012/02/zen-coder.png differ diff --git a/public/blog/wp-content/uploads/2012/03/blv-customheight.png b/public/blog/wp-content/uploads/2012/03/blv-customheight.png new file mode 100644 index 0000000..587488b Binary files /dev/null and b/public/blog/wp-content/uploads/2012/03/blv-customheight.png differ diff --git a/public/blog/wp-content/uploads/2012/03/screen-custom-spacing-150x150.png b/public/blog/wp-content/uploads/2012/03/screen-custom-spacing-150x150.png new file mode 100644 index 0000000..4fd29f5 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/03/screen-custom-spacing-150x150.png differ diff --git a/public/blog/wp-content/uploads/2012/03/screen-custom-spacing.png b/public/blog/wp-content/uploads/2012/03/screen-custom-spacing.png new file mode 100644 index 0000000..f33deed Binary files /dev/null and b/public/blog/wp-content/uploads/2012/03/screen-custom-spacing.png differ diff --git a/public/blog/wp-content/uploads/2012/03/screen-pixel-share-300x158.png b/public/blog/wp-content/uploads/2012/03/screen-pixel-share-300x158.png new file mode 100644 index 0000000..cd3b0ee Binary files /dev/null and b/public/blog/wp-content/uploads/2012/03/screen-pixel-share-300x158.png differ diff --git a/public/blog/wp-content/uploads/2012/03/screen-pixel-share.png b/public/blog/wp-content/uploads/2012/03/screen-pixel-share.png new file mode 100644 index 0000000..92c070b Binary files /dev/null and b/public/blog/wp-content/uploads/2012/03/screen-pixel-share.png differ diff --git a/public/blog/wp-content/uploads/2012/04/blv-embedded-1-300x136.png b/public/blog/wp-content/uploads/2012/04/blv-embedded-1-300x136.png new file mode 100644 index 0000000..c3e198a Binary files /dev/null and b/public/blog/wp-content/uploads/2012/04/blv-embedded-1-300x136.png differ diff --git a/public/blog/wp-content/uploads/2012/04/blv-embedded-1.png b/public/blog/wp-content/uploads/2012/04/blv-embedded-1.png new file mode 100644 index 0000000..fd219b5 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/04/blv-embedded-1.png differ diff --git a/public/blog/wp-content/uploads/2012/04/blv-embedded-2.png b/public/blog/wp-content/uploads/2012/04/blv-embedded-2.png new file mode 100644 index 0000000..026b6fa Binary files /dev/null and b/public/blog/wp-content/uploads/2012/04/blv-embedded-2.png differ diff --git a/public/blog/wp-content/uploads/2012/04/rightalign-group2-300x261.png b/public/blog/wp-content/uploads/2012/04/rightalign-group2-300x261.png new file mode 100644 index 0000000..011148b Binary files /dev/null and b/public/blog/wp-content/uploads/2012/04/rightalign-group2-300x261.png differ diff --git a/public/blog/wp-content/uploads/2012/04/rightalign-group2.png b/public/blog/wp-content/uploads/2012/04/rightalign-group2.png new file mode 100644 index 0000000..fd9d10a Binary files /dev/null and b/public/blog/wp-content/uploads/2012/04/rightalign-group2.png differ diff --git a/public/blog/wp-content/uploads/2012/04/rightalign.png b/public/blog/wp-content/uploads/2012/04/rightalign.png new file mode 100644 index 0000000..c3ac98a Binary files /dev/null and b/public/blog/wp-content/uploads/2012/04/rightalign.png differ diff --git a/public/blog/wp-content/uploads/2012/08/anigif.gif b/public/blog/wp-content/uploads/2012/08/anigif.gif new file mode 100644 index 0000000..ffad706 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/08/anigif.gif differ diff --git a/public/blog/wp-content/uploads/2012/09/custom-selection.png b/public/blog/wp-content/uploads/2012/09/custom-selection.png new file mode 100644 index 0000000..0bedee2 Binary files /dev/null and b/public/blog/wp-content/uploads/2012/09/custom-selection.png differ diff --git a/public/blog/wp-content/uploads/2012/12/chapter-drag-drop.html b/public/blog/wp-content/uploads/2012/12/chapter-drag-drop.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/chapter-drag-drop.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/chapter-embedded-controls.html b/public/blog/wp-content/uploads/2012/12/chapter-embedded-controls.html new file mode 100644 index 0000000..c6640e1 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/chapter-embedded-controls.html @@ -0,0 +1,719 @@ + + + + +Embedded Controls + + + + +
+
+ + + + +

Embedded Controls

+ + + + + +

Embedded editing controls can be thought of as an extension to label + edit functionality (see Label + Editing for more information).

+ +

Every item and sub-item has a cell area on which + an editing control can be placed. In the simplest case + (LabelEdit set to true), the editing control is + basically a System.Windows.Forms.TextBox control. It is + actually an instance of BetterListViewTextBoxEmbeddedControl, + which is a TextBox wrapper implementing + IBetterListViewEmbeddedControl interface. Any control can be + used as embedded control in Bettter ListView if implements one of these + interfaces:

+ + +

The custom embedded control is shown on the image below. When user + clicks on sub-item text (an abbreviation of tea grading), an editing control + appears on the top-left corner of the cell area. The control contains + buttons for accepting and cancelling changes:

+ +

+ +

Implementing IBetterListViewEmbeddedControl

+ + +

This interface contains prescription for minimum amount of + functionality required by an embedded control:

+ + +

Let's make a sample control. We will make a + TextBox-based embedded control for editing words in + lower-case. First, we inherit TextBox and implement + IBetterListViewEmbeddedControl interface:

+ +

C#

+
/// <summary>
+///   Represents a custom control embeddable in Better ListView.
+/// </summary>
+public class TextBoxEmbeddedControl : TextBox, IBetterListViewEmbeddedControl
+ +

Visual Basic

+
''' <summary>
+'''   Represents a custom control embeddable in Better ListView.
+''' </summary>
+Public Class TextBoxEmbeddedControl
+    Inherits TextBox
+    Implements IBetterListViewEmbeddedControl
+ +

Then we implement the LabelText property:

+ +

C#

+
/// <summary>
+///   current (edited) label text
+/// </summary>
+public string LabelText
+{
+    get
+    {
+        return Text.ToLower();
+    }
+}
+ +

Visual Basic

+
''' <summary>
+'''   current (edited) label text
+''' </summary>
+Public ReadOnly Property LabelText() As String
+    Get
+        Return Text.ToLower()
+    End Get
+End Property
+ +

As you can see, the text of the TextBox is converted to + lower case since we want item/sub-item labels to be only in lower + case.

+ +

Next, we implement RequestAccept and + RequestCancel events:

+ +

C#

+
/// <summary>
+///   request accepting updated data in BetterListView
+/// </summary>
+public event EventHandler RequestAccept;
+
+/// <summary>
+///   request cancelling editing
+/// </summary>
+public event EventHandler RequestCancel;
+ +

Visual Basic

+
''' <summary>
+'''   request accepting updated data in BetterListView
+''' </summary>
+Public Event RequestAccept As EventHandler Implements IBetterListViewEmbeddedControl.RequestAccept
+
+''' <summary>
+'''   request cancelling editing
+''' </summary>
+Public Event RequestCancel As EventHandler Implements IBetterListViewEmbeddedControl.RequestCancel
+ +

Next, we implement GetData and SetData + methods:

+ +

C#

+
/// <summary>
+///   get data from the specified sub-item in control
+/// </summary>
+/// <param name = "subItem">sub-item whose data are being edited</param>
+public void GetData(BetterListViewSubItem subItem)
+{
+	Text = subItem.Text;
+}
+
+/// <summary>
+///   set data from control to the specified sub-item
+/// </summary>
+/// <param name = "subItem">sub-item whose data are being edited</param>
+public void SetData(BetterListViewSubItem subItem)
+{
+    subItem.Text = LabelText;
+}
+ +

Visual Basic

+
''' <summary>
+'''   get data from the specified sub-item in control
+''' </summary>
+''' <param name = "subItem">sub-item whose data are being edited</param>
+Public Sub GetData(ByVal subItem As BetterListViewSubItem) Implements IBetterListViewEmbeddedControl.GetData
+
+    Text = subItem.Text
+
+End Sub
+
+''' <summary>
+'''   set data from control to the specified sub-item
+''' </summary>
+''' <param name = "subItem">sub-item whose data are being edited</param>
+Public Sub SetData(ByVal subItem As BetterListViewSubItem) Implements IBetterListViewEmbeddedControl.SetData
+
+    subItem.Text = LabelText
+
+End Sub
+ +

These method are trivial since we need not to do any data + conversions (the only conversion here is lowering the case of edited text + in the LabelText getter).

+ +

The last method contained in the interface is SetSize + method, which needs not to be implemented (the body can be kept empty). + You implement this method only if you need to adjust control's size when + label edit starts.

+ +

The constructor should be implemented like this:

+ +

C#

+
/// <summary>
+///   Initializes a new instance of the <see cref = "TextBoxEmbeddedControl" /> class.
+/// </summary>
+public TextBoxEmbeddedControl()
+{
+    AcceptsReturn = true;
+    CausesValidation = false;
+}
+ +

Visual Basic

+
''' <summary>
+'''   Initializes a new instance of the <see cref = "TextBoxEmbeddedControl" /> class.
+''' </summary>
+Public Sub New()
+
+    AcceptsReturn = True
+    CausesValidation = False
+
+End Sub
+ +

The AcceptsReturn property is set to true + because we will handle the ENTER key (and raise + RequestAccept event appropriately).

+ +

The CausesValidation property is set to + false because it is a good practice in this situation.

+ +

Both input and output data are validated in the + IBetterListViewEmbeddedControl implementation and validation + of some third-party controls can prevent whole form with the control from + closing.

+ +

The last thing we implement is handling of the + ENTER key for accepting the data and the + ESCAPE key for cancelling:

+ +

C#

+
protected override void OnKeyDown(KeyEventArgs e)
+{
+    if (e.KeyCode == Keys.Enter &&
+        RequestAccept != null)
+    {
+        RequestAccept(this, EventArgs.Empty);
+
+        e.Handled = true;
+
+        return;
+    }
+
+    if (e.KeyCode == Keys.Escape &&
+        RequestCancel != null)
+    {
+        RequestCancel(this, EventArgs.Empty);
+
+        e.Handled = true;
+
+        return;
+    }
+
+    base.OnKeyDown(e);
+}
+ +

Visual Basic

+
Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
+
+    If e.KeyCode = Keys.Enter AndAlso RequestAccept IsNot Nothing Then
+
+        RequestAccept(Me, EventArgs.Empty)
+
+        e.Handled = True
+
+        Return
+
+    End If
+
+    If e.KeyCode = Keys.Escape AndAlso RequestCancel IsNot Nothing Then
+
+    RequestCancel(Me, EventArgs.Empty)
+
+    e.Handled = True
+
+    Return
+
+    End If
+
+    MyBase.OnKeyDown(e)
+
+End Sub
+ +

+

It is a common good practice to implement interfaces explicitly. + The sample implementation is implicit for the sake of better + readability. Embedded controls implemented in BetterListView.dll are + implemented implicitly (and marked virtual) to allow for being inherited + (e.g. MyCustomControl : BetterListViewEmbeddedControl) and + you may possibly want to override any part of the interface + implementation.

+
+

Implementing IBetterListViewEmbeddedControlExtended

+ + +

The extended interface has currently only one method called + RequestEndEdit. This method can be called by the Better + ListView, when it asks the control whether it is ready to end editing. The + control can return a boolean value (true - continue + EndEdit, false - refuse to end editing). There + are many situations when the label editing is terminated (e.g. scrolling + the control, selecting items...) and terminating the label edit is not + always wanted (this is a case of + System.Windows.Forms.DateTimePicker control, which sometimes + behaves as being transparent for mouse clicks and thus being closed + because of click-through on the Better ListView client area - the + RequestEndEdit method fixes such possible behavior of third + party controls).

+ + +

Sample Source Code

+ + +

Form with Better ListView containing some columns and items:

+ +

C#

+
/// <summary>
+///   Shows embedding of custom controls into Better ListView.
+/// </summary>
+internal sealed partial class EmbeddedControlSampleForm : Form
+{
+    /// <summary>
+    ///   Initializes a new instance of the <see cref = "EmbeddedControlSampleForm" /> class.
+    /// </summary>
+    public EmbeddedControlSampleForm()
+    {
+        InitializeComponent();
+
+        this.listView.BeginUpdate();
+
+        this.listView.Columns.AddRange(new[]
+                                       {
+                                           new BetterListViewColumnHeader("Document name", 160),
+                                           new BetterListViewColumnHeader("Access", 128)
+                                       });
+
+        this.listView.Items.AddRange(
+            new[]
+            {
+                new BetterListViewItem(new[] { "hydro-report.pdf", "read" }),
+                new BetterListViewItem(new[] { "magnetic_resonance.docx", "read write" }),
+                new BetterListViewItem(new[] { "billing forms (2011).zip", "read" })
+            });
+
+        this.listView.LabelEditActivation = (BetterListViewLabelEditActivation.Keyboard | BetterListViewLabelEditActivation.SingleClick);
+        this.listView.LabelEditModeSubItems = BetterListViewLabelEditMode.CustomControl;
+
+        this.listView.EndUpdate();
+
+        this.listView.RequestEmbeddedControl += ListViewRequestEmbeddedControl;
+    }
+
+    private IBetterListViewEmbeddedControl ListViewRequestEmbeddedControl(object sender, BetterListViewRequestEmbeddedControlEventArgs eventArgs)
+    {
+        if (eventArgs.SubItem.Index == 1)
+        {
+            return (new DocumentAccessConrol());
+        }
+
+        return null;
+    }
+}
+ +

Visual Basic

+
''' <summary>
+'''   Shows embedding of custom controls into Better ListView.
+''' </summary>
+Partial Friend NotInheritable Class EmbeddedControlSampleForm
+
+    ''' <summary>
+    '''   Initializes a new instance of the <see cref = "EmbeddedControlSampleForm" /> class.
+    ''' </summary>
+    Public Sub New()
+
+        InitializeComponent()
+
+        ListView.BeginUpdate()
+
+        ListView.Columns.AddRange(
+            New BetterListViewColumnHeader() { _
+                                                 New BetterListViewColumnHeader("Document name", 160),
+                                                 New BetterListViewColumnHeader("Access", 128)
+                                             })
+
+        ListView.Items.AddRange(
+            New BetterListViewItem() { _
+                                         New BetterListViewItem(New String() {"hydro-report.pdf", "read"}),
+                                         New BetterListViewItem(New String() {"magnetic_resonance.docx", "read write"}),
+                                         New BetterListViewItem(New String() {"billing forms (2011).zip", "read"})
+                                     })
+
+        ListView.LabelEditActivation =
+            (BetterListViewLabelEditActivation.Keyboard Or BetterListViewLabelEditActivation.SingleClick)
+        ListView.LabelEditModeSubItems = BetterListViewLabelEditMode.CustomControl
+
+        ListView.EndUpdate()
+
+        AddHandler ListView.RequestEmbeddedControl, AddressOf ListViewRequestEmbeddedControl
+
+    End Sub
+
+    Private Function ListViewRequestEmbeddedControl(ByVal sender As Object,
+                                                     ByVal eventArgs As BetterListViewRequestEmbeddedControlEventArgs) _
+        As IBetterListViewEmbeddedControl
+
+        If eventArgs.SubItem.Index = 1 Then
+            Return (New DocumentAccessConrol())
+        End If
+
+        Return Nothing
+
+    End Function
+
+End Class
+ +

DocumentAccessControl class used as complex embedded + control (see EmbeddedControlSampleForm sample in the provided + C# and Visual Basic samples for full source code):

+ +

C#

+
/// <summary>
+///   Represents a custom control embeddable in Better ListView.
+/// </summary>
+[ToolboxItem(false)]
+internal sealed partial class DocumentAccessConrol : UserControl, IBetterListViewEmbeddedControl
+{
+    private const string StringRead = "read";
+    private const string StringWrite = "write";
+
+    /// <summary>
+    ///   current (edited) label text
+    /// </summary>
+    public string LabelText
+    {
+        get
+        {
+            // convert control's state to label
+            if (this.checkBoxRead.Checked &&
+                this.checkBoxWrite.Checked)
+            {
+                return String.Format("{0} {1}", StringRead, StringWrite);
+            }
+
+            if (this.checkBoxRead.Checked)
+            {
+                return StringRead;
+            }
+
+            if (this.checkBoxWrite.Checked)
+            {
+                return StringWrite;
+            }
+
+            return String.Empty;
+        }
+    }
+
+    /// <summary>
+    ///   request accepting updated data in BetterListView
+    /// </summary>
+    public event EventHandler RequestAccept;
+
+    /// <summary>
+    ///   request cancelling editing
+    /// </summary>
+    public event EventHandler RequestCancel;
+
+    /// <summary>
+    ///   Initializes a new instance of the <see cref = "DocumentAccessConrol" /> class.
+    /// </summary>
+    public DocumentAccessConrol()
+    {
+        InitializeComponent();
+
+        //NOTE: disabling validation prevents form close cancellation
+        CausesValidation = false;
+
+        foreach (Control control in Controls)
+        {
+            control.LostFocus += ControlOnLostFocus;
+        }
+    }
+
+    /// <summary>
+    ///   get data from the specified sub-item in control
+    /// </summary>
+    /// <param name = "subItem">sub-item whose data are being edited</param>
+    public void GetData(BetterListViewSubItem subItem)
+    {
+        // convert label to control's state
+        this.checkBoxRead.Checked = subItem.Text.Contains(StringRead);
+        this.checkBoxWrite.Checked = subItem.Text.Contains(StringWrite);
+    }
+
+    /// <summary>
+    ///   set data from control to the specified sub-item
+    /// </summary>
+    /// <param name = "subItem">sub-item whose data are being edited</param>
+    public void SetData(BetterListViewSubItem subItem)
+    {
+        subItem.Text = LabelText;
+    }
+
+    /// <summary>
+    ///   set control size
+    /// </summary>
+    /// <param name = "subItem">sub-item whose data are being edited</param>
+    /// <param name = "placement">placement of the embedded control within sub-item</param>
+    public void SetSize(BetterListViewSubItem subItem, BetterListViewEmbeddedControlPlacement placement)
+    {
+        // keep size of the control unchanged
+    }
+
+    private void ControlOnLostFocus(object sender, EventArgs eventArgs)
+    {
+        //
+        // NOTE: this code is needed just for hiding embedded control with sub-controls when user changes active form while label editing
+        //
+        bool anyFocused = Focused;
+
+        if (anyFocused == false)
+        {
+            foreach (Control control in Controls)
+            {
+                if (control.Focused)
+                {
+                    anyFocused = true;
+
+                    break;
+                }
+            }
+        }
+
+        if (anyFocused == false)
+        {
+            RequestAccept(this, eventArgs);
+        }
+    }
+
+    private void ButtonOKClick(object sender, EventArgs e)
+    {
+        RequestAccept(this, e);
+    }
+
+    private void ButtonCancelClick(object sender, EventArgs e)
+    {
+        RequestCancel(this, e);
+    }
+}
+ +

Visual Basic

+
''' <summary>
+'''   Represents a custom control embeddable in Better ListView.
+''' </summary>
+<ToolboxItem(False)>
+Partial Friend NotInheritable Class DocumentAccessConrol
+    Inherits UserControl
+    Implements IBetterListViewEmbeddedControl
+
+    Private Const StringRead As String = "read"
+    Private Const StringWrite As String = "write"
+
+    ''' <summary>
+    '''   current (edited) label text
+    ''' </summary>
+    Public ReadOnly Property LabelText() As String Implements IBetterListViewEmbeddedControl.LabelText
+        Get
+            ' convert control's state to label
+            If CheckBoxRead.Checked AndAlso CheckBoxWrite.Checked Then
+                Return [String].Format("{0} {1}", StringRead, StringWrite)
+            End If
+
+            If CheckBoxRead.Checked Then
+                Return StringRead
+            End If
+
+            If CheckBoxWrite.Checked Then
+                Return StringWrite
+            End If
+
+            Return [String].Empty
+        End Get
+    End Property
+
+    ''' <summary>
+    '''   request accepting updated data in BetterListView
+    ''' </summary>
+    Public Event RequestAccept As EventHandler Implements IBetterListViewEmbeddedControl.RequestAccept
+
+    ''' <summary>
+    '''   request cancelling editing
+    ''' </summary>
+    Public Event RequestCancel As EventHandler Implements IBetterListViewEmbeddedControl.RequestCancel
+
+    ''' <summary>
+    '''   Initializes a new instance of the <see cref = "DocumentAccessConrol" /> class.
+    ''' </summary>
+    Public Sub New()
+
+        InitializeComponent()
+
+        'NOTE: disabling validation prevents form close cancellation
+        CausesValidation = False
+
+        For Each control As Control In Controls
+            AddHandler control.LostFocus, AddressOf ControlOnLostFocus
+        Next
+
+    End Sub
+
+    ''' <summary>
+    '''   get data from the specified sub-item in control
+    ''' </summary>
+    ''' <param name = "subItem">sub-item whose data are being edited</param>
+    Public Sub GetData(ByVal subItem As BetterListViewSubItem) Implements IBetterListViewEmbeddedControl.GetData
+
+        ' convert label to control's state
+        CheckBoxRead.Checked = subItem.Text.Contains(StringRead)
+        CheckBoxWrite.Checked = subItem.Text.Contains(StringWrite)
+
+    End Sub
+
+    ''' <summary>
+    '''   set data from control to the specified sub-item
+    ''' </summary>
+    ''' <param name = "subItem">sub-item whose data are being edited</param>
+    Public Sub SetData(ByVal subItem As BetterListViewSubItem) Implements IBetterListViewEmbeddedControl.SetData
+
+        subItem.Text = LabelText
+
+    End Sub
+
+    ''' <summary>
+    '''   set control size
+    ''' </summary>
+    ''' <param name = "subItem">sub-item whose data are being edited</param>
+    ''' <param name = "placement">placement of the embedded control within sub-item</param>
+    Public Sub SetSize(ByVal subItem As BetterListViewSubItem,
+                        ByVal placement As BetterListViewEmbeddedControlPlacement) _
+        Implements IBetterListViewEmbeddedControl.SetSize
+
+        ' keep size of the control unchanged
+
+    End Sub
+
+    Private Sub ControlOnLostFocus(ByVal sender As Object, ByVal eventArgs As EventArgs)
+
+        '
+        ' NOTE: this code is needed just for hiding embedded control with sub-controls when user changes active form while label editing
+        '
+        Dim anyFocused As Boolean = Focused
+
+        If anyFocused = False Then
+            For Each control As Control In Controls
+                If control.Focused Then
+                    anyFocused = True
+
+                    Exit For
+                End If
+            Next
+        End If
+
+        If anyFocused = False Then
+            RaiseEvent RequestAccept(Me, eventArgs)
+        End If
+
+    End Sub
+
+    Private Sub ButtonOKClick(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonOK.Click
+        RaiseEvent RequestAccept(Me, e)
+    End Sub
+
+    Private Sub ButtonCancelClick(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonCancel.Click
+        RaiseEvent RequestCancel(Me, e)
+    End Sub
+
+End Class
+ +
+ + + + + +
+ + + +
+ diff --git a/public/blog/wp-content/uploads/2012/12/chapter-empty-text.html b/public/blog/wp-content/uploads/2012/12/chapter-empty-text.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/chapter-empty-text.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/chapter-label-edit.html b/public/blog/wp-content/uploads/2012/12/chapter-label-edit.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/chapter-label-edit.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/embedded-control.png.html b/public/blog/wp-content/uploads/2012/12/embedded-control.png.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/embedded-control.png.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/label-edit.gif b/public/blog/wp-content/uploads/2012/12/label-edit.gif new file mode 100644 index 0000000..626305c Binary files /dev/null and b/public/blog/wp-content/uploads/2012/12/label-edit.gif differ diff --git a/public/blog/wp-content/uploads/2012/12/lang-vb.js.html b/public/blog/wp-content/uploads/2012/12/lang-vb.js.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/lang-vb.js.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/prettify.css.html b/public/blog/wp-content/uploads/2012/12/prettify.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/prettify.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/prettify.js.html b/public/blog/wp-content/uploads/2012/12/prettify.js.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/prettify.js.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/style.css.html b/public/blog/wp-content/uploads/2012/12/style.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/12/style.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/12/w8-theme.jpg b/public/blog/wp-content/uploads/2012/12/w8-theme.jpg new file mode 100644 index 0000000..2fbed5b Binary files /dev/null and b/public/blog/wp-content/uploads/2012/12/w8-theme.jpg differ diff --git a/public/blog/wp-content/uploads/2012/index.html b/public/blog/wp-content/uploads/2012/index.html new file mode 100644 index 0000000..be71cc0 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/index.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/resources/main.css.html b/public/blog/wp-content/uploads/2012/resources/main.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/resources/main.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2012/resources/overview.gif.html b/public/blog/wp-content/uploads/2012/resources/overview.gif.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2012/resources/overview.gif.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/01/chapter-save-load.html b/public/blog/wp-content/uploads/2013/01/chapter-save-load.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/chapter-save-load.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/01/chapter-search.html b/public/blog/wp-content/uploads/2013/01/chapter-search.html new file mode 100644 index 0000000..4f0055e --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/chapter-search.html @@ -0,0 +1,238 @@ + + + + +Searching Items + + + + +
+
+ + + + +

Searching Items

+ + + + + +

Better ListView offers many options for searching items by typing on + keyboard and programmaticaly (FindItemWithText, + FindItemsWithText methods). Search can be extended to sub-items + and event multiple items can be contained in a search result.

+ +

Search can be customized with SearchSettings property. + This structure contains three other properties:

+ + +

There is a default one-second delay to register when user stopped + typing and the search is discarded. A new search is initiated when user + starts typing after this interval has passed. This interval can be set via + SearchTimeoutDelay property.

+ +

The delay is not relevant when user types the same letter several + times and there are other items beginning with that letter. If there are + items named ab, ac, + ad, then the selection cycles through these items as + long as the user keeps pressing A key. This works + essentialy the same way as in the Windows Explorer.

+ +

+

The keyboard search works, of course, only when the control has + focus. You can ensure this (e.g. when showing the form) by calling + Focus method on Better ListView.

+
+

Sample Source Code

+ + +

C#

+
this.listView.BeginUpdate();
+
+// fill the ListView with items in two columns
+this.listView.Columns.AddRange(
+    new[]
+    {
+        new BetterListViewColumnHeader("Word", 128),
+        new BetterListViewColumnHeader("Synonym List", 160)
+    });
+
+this.listView.Items.AddRange(
+    new[]
+    {
+        new BetterListViewItem(new[] { "apparently", "evidently, presumably, seemingly" }),
+        new BetterListViewItem(new[] { "blunt", "brusque, curt, snippy" }),
+        new BetterListViewItem(new[] { "class", "caste, estate, folk" }),
+        new BetterListViewItem(new[] { "detailed", "elaborate, full, thorough" }),
+    });
+
+// search in substrings
+BetterListViewSearchMode searchMode = BetterListViewSearchMode.Substring;
+
+// use case-sensitive searching and play sounds
+BetterListViewSearchOptions searchOptions = (BetterListViewSearchOptions.CaseSensitive | BetterListViewSearchOptions.PlaySound);
+
+// search in the first and second column
+//NOTE: empty array also means searching in all columns
+int[] subItemIndices = new[] { 0, 1 };
+
+// set-up the search
+this.listView.SearchSettings = new BetterListViewSearchSettings(searchMode, searchOptions, subItemIndices);
+
+this.listView.EndUpdate();
+ +

Visual Basic

+
ListView.BeginUpdate()
+
+' fill the ListView with items in two columns
+ListView.Columns.AddRange(
+    New BetterListViewColumnHeader() { _
+                                         New BetterListViewColumnHeader("Word", 128),
+                                         New BetterListViewColumnHeader("Synonym List", 160)
+                                     })
+
+ListView.Items.AddRange(
+    New BetterListViewItem() { _
+                                 New BetterListViewItem(New String() _
+                                                            {"apparently", "evidently, presumably, seemingly"}),
+                                 New BetterListViewItem(New String() {"blunt", "brusque, curt, snippy"}),
+                                 New BetterListViewItem(New String() {"class", "caste, estate, folk"}),
+                                 New BetterListViewItem(New String() {"detailed", "elaborate, full, thorough"})
+                            })
+
+' search in substrings
+Dim searchMode As BetterListViewSearchMode = BetterListViewSearchMode.Substring
+
+' use case-sensitive searching and play sounds
+Dim searchOptions As BetterListViewSearchOptions =
+        (BetterListViewSearchOptions.CaseSensitive Or BetterListViewSearchOptions.PlaySound)
+
+' search in the first and second column
+'NOTE: empty array also means searching in all columns
+Dim subItemIndices As Integer() = New Integer() {0, 1}
+
+' set-up the search
+ListView.SearchSettings = New BetterListViewSearchSettings (searchMode, searchOptions, subItemIndices)
+
+ListView.EndUpdate()
+ +
+ + + + + +
+ + + +
+ diff --git a/public/blog/wp-content/uploads/2013/01/chapter-serialization.html b/public/blog/wp-content/uploads/2013/01/chapter-serialization.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/chapter-serialization.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/01/lang-vb.js.html b/public/blog/wp-content/uploads/2013/01/lang-vb.js.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/lang-vb.js.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/01/prettify.css.html b/public/blog/wp-content/uploads/2013/01/prettify.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/prettify.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/01/prettify.js.html b/public/blog/wp-content/uploads/2013/01/prettify.js.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/prettify.js.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/01/properties.png b/public/blog/wp-content/uploads/2013/01/properties.png new file mode 100644 index 0000000..9113cd0 Binary files /dev/null and b/public/blog/wp-content/uploads/2013/01/properties.png differ diff --git a/public/blog/wp-content/uploads/2013/01/screen-blv-binding1.png b/public/blog/wp-content/uploads/2013/01/screen-blv-binding1.png new file mode 100644 index 0000000..bafa4de Binary files /dev/null and b/public/blog/wp-content/uploads/2013/01/screen-blv-binding1.png differ diff --git a/public/blog/wp-content/uploads/2013/01/screen-blv-binding2.png b/public/blog/wp-content/uploads/2013/01/screen-blv-binding2.png new file mode 100644 index 0000000..8fff006 Binary files /dev/null and b/public/blog/wp-content/uploads/2013/01/screen-blv-binding2.png differ diff --git a/public/blog/wp-content/uploads/2013/01/screen-blv-binding3.png b/public/blog/wp-content/uploads/2013/01/screen-blv-binding3.png new file mode 100644 index 0000000..9087b20 Binary files /dev/null and b/public/blog/wp-content/uploads/2013/01/screen-blv-binding3.png differ diff --git a/public/blog/wp-content/uploads/2013/01/search-highlight-1.gif b/public/blog/wp-content/uploads/2013/01/search-highlight-1.gif new file mode 100644 index 0000000..69a6cd6 Binary files /dev/null and b/public/blog/wp-content/uploads/2013/01/search-highlight-1.gif differ diff --git a/public/blog/wp-content/uploads/2013/01/search-highlight-2.gif b/public/blog/wp-content/uploads/2013/01/search-highlight-2.gif new file mode 100644 index 0000000..3f3dc1d Binary files /dev/null and b/public/blog/wp-content/uploads/2013/01/search-highlight-2.gif differ diff --git a/public/blog/wp-content/uploads/2013/01/style.css.html b/public/blog/wp-content/uploads/2013/01/style.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/01/style.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/chapter-multi-line.html b/public/blog/wp-content/uploads/2013/02/chapter-multi-line.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/chapter-multi-line.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/chapter-owner-draw.html b/public/blog/wp-content/uploads/2013/02/chapter-owner-draw.html new file mode 100644 index 0000000..f90869f --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/chapter-owner-draw.html @@ -0,0 +1,334 @@ + + + + +Owner Drawing + + + + +
+
+ + + + +

Owner Drawing

+ + + + + +

Owner drawing allow to customize appearance of any element, element + part and the control itself:

+ +

+ +

Drawing Over Control Parts

+ + +

The simple way to draw over control parts is by using drawing + events:

+ + +

Each of these events contains System.Drawing.Graphics + object in event data with which custom drawing is possible. Areas of + drawing are also provided. For example, to draw inside item inner area, + there is a + BetterListViewDrawItemEventArgs.ItemBounds.BoundsInner + property containing the rectangle.

+ +

+

If you want to paint outside element areas, set + OptimizedInvalidation property to false. This + will ensure your custom drawing code will be called in every redraw + cycle.

+
+

Replacing Default Drawing by Custom Drawing

+ + +

Owner drawing events are always called after the default drawing, so + it is possible only to draw over exisiting drawing. When you need turn off + some painting and do your own drawing instead of the default one (e.g. + draw rotated text instead the straight one), you have to create your + custom control inheriting from BetterListView:

+ +

C#

+
class OwnerDrawBetterListView : BetterListView
+{
+    // ...
+}
+ +

Visual Basic

+
Class OwnerDrawBetterListView Inherits BetterListView
+    ' ...
+End Class
+ +

Then you can override one of the drawing methods:

+ + +

This gives you more control over the painting, because your drawing + code can be called before or + after the default drawing, depending on where and if + you call base implementation.

+ +

Every part of the default drawing has a switch so you can turn the + default drawing off. For example, if you want not to draw default text on + some item, set BetterListViewDrawItemEventArgs.DrawText + property to false.

+ +

It is also possible to do custom drawing as the very last drawing of + the whole control. To do this, override DrawingRedrawCore + method and do your drawing after calling the base implementation:

+ +

C#

+
protected override void DrawingRedrawCore(Graphics grfx)
+{
+    base.DrawingRedrawCore(grfx);
+
+    // do your custom drawing
+}
+ +

Visual Basic

+
Protected Overrides Sub DrawingRedrawCore(grfx As Graphics)
+
+    MyBase.DrawingRedrawCore(grfx)
+
+    ' do your custom drawing
+    
+End Sub
+ + +

Overriding Item and Control States

+ + +

The appearance of element depends not only on its state, but also on + the control state.

+ +

If you override one of the drawing methods (e.g. + OnDrawItem), you can modify event data before calling base + class implementation (e.g. base.OnDrawItem).

+ +

For example, BetterListViewDrawItemEventArgs contains + ItemStateInfo property. By modifying this property, you can + force drawing item in any state you wish.

+ +

BetterListViewDrawItemEventArgs also contains two + properties regarding control state:

+ + +

By default, these properties correspond to actual control's state, + but they can be modified. For example, one may want to set + DrawFocused to true on every item that is selected, so the + item will be highlighted even if the control loses focus.

+ +

The control state properties are available only in the + BetterListViewItemEventArgs, but element states can be + modified in all painting event handlers (also column headers and + groups).

+ + +

Sample Source Code

+ + +

The following sample shows owner drawing of item background:

+ +

C#

+
this.listView.BeginUpdate();
+
+this.listView.Items.Add("Item with owner-drawn image and background.");
+
+this.listView.View = BetterListViewView.Tile;
+// turn off automatic image sizing to make space for image even when items do not have any images set
+this.listView.LayoutOptions = (BetterListViewLayoutOptions.Auto & ~BetterListViewLayoutOptions.AutoSizeItemImage);
+// set 4-pixel boundary around image
+this.listView.LayoutItemsCurrent.ImagePadding = new Padding(4);
+// set image size to be 50 by 50 pixels (it is possible to set image sizes for sub-items as well by adding more Size instances in the collection)
+this.listView.LayoutItemsCurrent.ImageSizes = new ReadOnlyCollection<Size>(new[] { new Size(50, 50) });
+
+this.listView.EndUpdate();
+
+// we would like to draw over item's foreground (custom image)
+this.listView.DrawItem += ListViewDrawItem;
+// we would like to draw over item's background
+this.listView.DrawItemBackground += ListViewDrawItemBackground;
+ +

Visual Basic

+
ListView.BeginUpdate()
+
+ListView.Items.Add("Item with owner-drawn image and background.")
+
+ListView.View = BetterListViewView.Tile
+' turn off automatic image sizing to make space for image even when items do not have any images set
+ListView.LayoutOptions = (BetterListViewLayoutOptions.Auto And Not BetterListViewLayoutOptions.AutoSizeItemImage)
+' set 4-pixel boundary around image
+ListView.LayoutItemsCurrent.ImagePadding = New Padding(4)
+' set image size to be 50 by 50 pixels (it is possible to set image sizes for sub-items as well by adding more Size instances in the collection)
+ListView.LayoutItemsCurrent.ImageSizes = New ReadOnlyCollection(Of Size)(New Size() {New Size(50, 50)})
+
+ListView.EndUpdate()
+
+' we would like to draw over item's foreground (custom image)
+AddHandler ListView.DrawItem, AddressOf ListViewDrawItem
+' we would like to draw over item's background
+AddHandler ListView.DrawItemBackground, AddressOf ListViewDrawItemBackground
+ +

DrawItem event handler draws on the item image + area:

+ +

C#

+
void ListViewDrawItem(object sender, BetterListViewDrawItemEventArgs eventArgs)
+{
+    eventArgs.Graphics.SmoothingMode = SmoothingMode.HighQuality;
+
+    Pen pen = new Pen(Color.BlueViolet, 2.5f);
+
+    // draw ellipse in the image area
+    eventArgs.Graphics.DrawEllipse(
+        pen,
+        eventArgs.ItemBounds.SubItemBounds[0].BoundsImage);
+
+    pen.Dispose();
+}
+ +

Visual Basic

+
Sub ListViewDrawItem(ByVal sender As Object, ByVal eventArgs As BetterListViewDrawItemEventArgs)
+
+    eventArgs.Graphics.SmoothingMode = SmoothingMode.HighQuality
+
+    Dim pen As New Pen(Color.BlueViolet, 2.5F)
+
+    ' draw ellipse in the image area
+    eventArgs.Graphics.DrawEllipse(pen, eventArgs.ItemBounds.SubItemBounds(0).BoundsImage)
+
+    pen.Dispose()
+
+End Sub
+ +

DrawItemBackground event handler draws on the item + background area:

+ +

C#

+
void ListViewDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs)
+{
+    Brush brush = new LinearGradientBrush(
+        eventArgs.ItemBounds.BoundsInner,
+        Color.FromArgb(64, Color.DarkSeaGreen),
+        Color.Transparent,
+        LinearGradientMode.ForwardDiagonal);
+
+    // draw over the item's background in the inner area
+    eventArgs.Graphics.FillRectangle(brush, eventArgs.ItemBounds.BoundsInner);
+
+    brush.Dispose();
+}
+ +

Visual Basic

+
Sub ListViewDrawItemBackground(ByVal sender As Object, ByVal eventArgs As BetterListViewDrawItemBackgroundEventArgs)
+
+    Dim brush As Brush = New LinearGradientBrush(
+        eventArgs.ItemBounds.BoundsInner,
+        Color.FromArgb(64, Color.DarkSeaGreen),
+        Color.Transparent,
+        LinearGradientMode.ForwardDiagonal)
+
+    ' draw over the item's background in the inner area
+    eventArgs.Graphics.FillRectangle(brush, eventArgs.ItemBounds.BoundsInner)
+
+    brush.Dispose()
+
+End Sub
+ +
+ + + + + +
+ + + +
+ diff --git a/public/blog/wp-content/uploads/2013/02/chapter-performance.html b/public/blog/wp-content/uploads/2013/02/chapter-performance.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/chapter-performance.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/hot-item-backcolor.gif b/public/blog/wp-content/uploads/2013/02/hot-item-backcolor.gif new file mode 100644 index 0000000..11ff695 Binary files /dev/null and b/public/blog/wp-content/uploads/2013/02/hot-item-backcolor.gif differ diff --git a/public/blog/wp-content/uploads/2013/02/lang-vb.js.html b/public/blog/wp-content/uploads/2013/02/lang-vb.js.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/lang-vb.js.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/owner-draw.png.html b/public/blog/wp-content/uploads/2013/02/owner-draw.png.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/owner-draw.png.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/prettify.css.html b/public/blog/wp-content/uploads/2013/02/prettify.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/prettify.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/prettify.js.html b/public/blog/wp-content/uploads/2013/02/prettify.js.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/prettify.js.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/02/style.css.html b/public/blog/wp-content/uploads/2013/02/style.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/02/style.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/03/blv-fading.png b/public/blog/wp-content/uploads/2013/03/blv-fading.png new file mode 100644 index 0000000..fdbc81b Binary files /dev/null and b/public/blog/wp-content/uploads/2013/03/blv-fading.png differ diff --git a/public/blog/wp-content/uploads/2013/03/blv-scroll-size.png b/public/blog/wp-content/uploads/2013/03/blv-scroll-size.png new file mode 100644 index 0000000..65876c8 Binary files /dev/null and b/public/blog/wp-content/uploads/2013/03/blv-scroll-size.png differ diff --git a/public/blog/wp-content/uploads/2013/index.html b/public/blog/wp-content/uploads/2013/index.html new file mode 100644 index 0000000..be71cc0 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/index.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/resources/main.css.html b/public/blog/wp-content/uploads/2013/resources/main.css.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/resources/main.css.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2013/resources/overview.gif.html b/public/blog/wp-content/uploads/2013/resources/overview.gif.html new file mode 100644 index 0000000..a77b0e3 --- /dev/null +++ b/public/blog/wp-content/uploads/2013/resources/overview.gif.html @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + +Better ListView for .NET (C#, VB) - Alternative list view component + + + + + + + + + +
+ +
+ + + +
+ + + +
+
+
+

Better ListView: Alternative list view control for .NET

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + +
+

Better ListView

+
+ + +
+

Thumbnails

+
+ + +
+

Multi-line Items

+
+ + +
+

Item Hierarchy

+
+ + + + + + + + + + + +
+ +
+ + + +
+ + +
+
+ + + + + +
+ + + + + diff --git a/public/blog/wp-content/uploads/2014/02/image.gif b/public/blog/wp-content/uploads/2014/02/image.gif new file mode 100644 index 0000000..1a93b9a Binary files /dev/null and b/public/blog/wp-content/uploads/2014/02/image.gif differ diff --git a/public/blog/wp-content/uploads/2014/04/blv-alternating-rows.png b/public/blog/wp-content/uploads/2014/04/blv-alternating-rows.png new file mode 100644 index 0000000..6de3f56 Binary files /dev/null and b/public/blog/wp-content/uploads/2014/04/blv-alternating-rows.png differ diff --git a/public/blog/wp-content/uploads/2014/04/blv-gridlines-1.png b/public/blog/wp-content/uploads/2014/04/blv-gridlines-1.png new file mode 100644 index 0000000..c657b05 Binary files /dev/null and b/public/blog/wp-content/uploads/2014/04/blv-gridlines-1.png differ diff --git a/public/blog/wp-content/uploads/2014/04/blv-gridlines-2.png b/public/blog/wp-content/uploads/2014/04/blv-gridlines-2.png new file mode 100644 index 0000000..0efdbc8 Binary files /dev/null and b/public/blog/wp-content/uploads/2014/04/blv-gridlines-2.png differ diff --git a/public/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png b/public/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png new file mode 100644 index 0000000..a69737c Binary files /dev/null and b/public/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png differ diff --git a/public/blog/wp-content/uploads/2014/08/blv-overlay.png b/public/blog/wp-content/uploads/2014/08/blv-overlay.png new file mode 100644 index 0000000..02d3033 Binary files /dev/null and b/public/blog/wp-content/uploads/2014/08/blv-overlay.png differ diff --git a/src/data/articles/visual-studio-toolbox-control-integration.html b/src/data/articles/visual-studio-toolbox-control-integration.html index 4f322e8..d0c6b90 100644 --- a/src/data/articles/visual-studio-toolbox-control-integration.html +++ b/src/data/articles/visual-studio-toolbox-control-integration.html @@ -15,9 +15,9 @@ Visual Studio Toolbox Control Integration - visual studio - - - + + + @@ -33,59 +33,59 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -127,8 +127,8 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

The Most Complete Guide to Visual Studio Toolbox Control Integration

Libor Tinka, Lead Developer, ComponentOwl.com

-

-

+

+

Contents

1. Introduction
2. Prerequisites
@@ -276,69 +276,69 @@ that you will be able to impement the one that suits you best.

Manual installation - - - - - + + + + + depends on user - - + + TCI - - - - - + + + + + fast - -   + +   EnvDTE - - - - - + + + + + slow - -   + +   VSI - - - - - + + + + + moderate - -   + +   VSIX - - - - - + + + + + moderate (faster than VSI) - -   + +   VSPackage - - - - - + + + + + fast - -   + +   @@ -409,7 +409,7 @@ public class InvisibleControl : UserControl }

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

@@ -417,7 +417,7 @@ than 1.0.0.0 to see where the specific version number appears).

(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:

@@ -432,7 +432,7 @@ public partial class SampleControl : UserControl 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:

@@ -454,7 +454,7 @@ 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 @@ -472,9 +472,9 @@ 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 @@ -502,7 +502,7 @@ subkey named "Toolbox" with single string value "TabNam 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 @@ -565,7 +565,7 @@ 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.

@@ -590,7 +590,7 @@ components into the Toolbox.

Visual Studio and delete all .TBD files in the following folder:

\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\

It should be up to four files:

-

+

Once removed, start Visual Studio again. After showing the Toolbox, all items should load instead of loading only the cached versions.

5. Toolbox Integration using TCI

@@ -612,7 +612,7 @@ 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:

32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
@@ -760,19 +760,19 @@ 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:

32-bit OS: C:\Program Files\Common Files\Microsoft Shared\MSEnv\VSContentInstaller.exe SampleControl.vsi
 64-bit OS: C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSContentInstaller.exe SampleControl.vsi

The installer have a form o wizard:

-

+

Signing the VSI Package

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).

@@ -806,7 +806,7 @@ programmatically. You need to delete the control's DLL located at

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 @@ -816,7 +816,7 @@ offers whether to rename, replace or skip the file (e.g. SampleControl.dll). Use 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:

-

+

8. Toolbox Integration using VSPackages

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.

@@ -830,13 +830,13 @@ previously).

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:

@@ -868,7 +868,7 @@ 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:

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.

@@ -1263,7 +1263,7 @@ 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.

@@ -1286,11 +1286,11 @@ to "Windows Forms Toolbox Control" template to show you all the differences.

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.

@@ -1381,13 +1381,13 @@ public sealed class ProvideToolboxControlAttribute : RegistrationAttribute

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 @@ -1403,14 +1403,14 @@ SampleVsixPackage.vsix file. This is our VSIX package.

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 @@ -1459,7 +1459,7 @@ 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 @@ -1469,7 +1469,7 @@ 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 @@ -1535,7 +1535,7 @@ internal class Program

SignVsix.exe SampleVsixPackage.vsix certificate.pfx abc123

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 @@ -1553,10 +1553,10 @@ 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:

@@ -1577,7 +1577,7 @@ Guids.cs: GuidList.guidSampleVsixPackagePkgString):

(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 @@ -1619,7 +1619,7 @@ under "bin\Release" subfolders and batch files (.CMD extension) are provided where appropriate.

-Download sample source code (212 KB) +Download sample source code (212 KB)

You can find the following folders in the archive:

@@ -1648,7 +1648,7 @@ provided.

 

-Download sample source code (212 KB) +Download sample source code (212 KB)

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 Unported License.Component Owl WinForms - .NET 2.0 @@ -1660,7 +1660,7 @@ provided.

@@ -1773,7 +1773,7 @@ provided.

Better Thumbnail Browser 3.15 released!

- Download latest release + Download latest release

@@ -1786,10 +1786,10 @@ provided.

Better ListView Express 3.14.0 released!

- See what's new + See what's new or - Download latest release + Download latest release

@@ -1801,15 +1801,15 @@ provided.


-
-Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
+
+Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
- + + + + +

- - - +

Quick Start

Table of Contents

@@ -62,7 +62,7 @@ Toolbox window (View - Toolbox):

-

+

The Toolbox should contain a new tab called "ComponentOwl" containing all the installed component @@ -79,7 +79,7 @@

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 @@ -87,13 +87,13 @@ 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.

@@ -114,26 +114,26 @@ 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:

-

+

@@ -273,30 +273,30 @@ Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))

We will happily answer any of your questions and provide further assistance. Just email us at support@componentowl.com. - Or, you can use the online form at www.componentowl.com/support.

+ Or, you can use the online form at www.componentowl.com/support.


- - - +

diff --git a/src/data/better-listview/class-reference.html b/src/data/better-listview/class-reference.html index 48e0710..b81f8b7 100644 --- a/src/data/better-listview/class-reference.html +++ b/src/data/better-listview/class-reference.html @@ -12,8 +12,8 @@ - - + + <p>This page requires frames, but your browser does not support them.</p> diff --git a/src/data/better-listview/comparison-table.html b/src/data/better-listview/comparison-table.html index e6bcab5..5d595c8 100644 --- a/src/data/better-listview/comparison-table.html +++ b/src/data/better-listview/comparison-table.html @@ -15,9 +15,9 @@ Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) - - - + + + @@ -33,59 +33,59 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -111,19 +111,19 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ - @@ -498,10 +498,10 @@ The enhancements I found most useful for my own projects were the automatic layo

Better ListView Express 3.14.0 released!

- See what's new + See what's new or - Download latest release + Download latest release

@@ -513,15 +513,15 @@ The enhancements I found most useful for my own projects were the automatic layo

-
-Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
+
+Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
- + + + +

- - - +

Quick Start

Table of Contents

@@ -65,7 +65,7 @@ Toolbox window (View - Toolbox):

-

+

The Toolbox should contain a new tab called "ComponentOwl" containing all the installed component @@ -80,7 +80,7 @@

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 @@ -88,13 +88,13 @@ 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.

@@ -112,26 +112,26 @@ 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:

-

+

@@ -171,12 +171,12 @@ The only limitations of trial version are watermark displayed on the control...

-

+

and an Activation Dialog, that appears on every application run:

-

+

There are three possible actions:

@@ -195,10 +195,10 @@

When activating Better ListView, you are asked for a serial key - (obtained by pruchasing + (obtained by pruchasing Better ListView):

-

+



Internet connection is required to activate Better ListView. If @@ -225,7 +225,7 @@

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 @@ -270,7 +270,7 @@

If a new version of Better ListView is released, to update to newer - version, simply download + version, simply download and install the new version. The installer will prompt for updating to a new version.

@@ -407,30 +407,30 @@ Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))

We will happily answer any of your questions and provide further assistance. Just email us at support@componentowl.com. - Or, you can use the online form at www.componentowl.com/support.

+ Or, you can use the online form at www.componentowl.com/support.


- - - +

diff --git a/src/data/better-listview/resources.html b/src/data/better-listview/resources.html index 8babeb4..d48a240 100644 --- a/src/data/better-listview/resources.html +++ b/src/data/better-listview/resources.html @@ -15,9 +15,9 @@ Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) - - - + + + @@ -33,59 +33,59 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -111,15 +111,15 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -128,9 +128,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

    -
  1. Quick Start Guide (Step-by-step)
  2. -
  3. Documentation
  4. -
  5. Class Reference
  6. +
  7. Quick Start Guide (Step-by-step)
  8. +
  9. Documentation
  10. +
  11. Class Reference

@@ -144,9 +144,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -154,10 +154,10 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -203,7 +203,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -217,9 +217,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -228,8 +228,8 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -242,31 +242,31 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -277,7 +277,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView Express 3.15 released!

- Download latest release + Download latest release

@@ -290,7 +290,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView 3.15 released!

- Download latest release + Download latest release

@@ -303,7 +303,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better SplitButton 3.15 released!

- Download latest release + Download latest release

@@ -316,7 +316,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better Thumbnail Browser 3.15 released!

- Download latest release + Download latest release

@@ -329,10 +329,10 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView Express 3.14.0 released!

- See what's new + See what's new or - Download latest release + Download latest release

@@ -344,15 +344,15 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

-
-Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
+
+Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
- + + + - - + + <p>This page requires frames, but your browser does not support them.</p> diff --git a/src/data/better-splitbutton/documentation.html b/src/data/better-splitbutton/documentation.html index 1e4d6ef..369b3f8 100644 --- a/src/data/better-splitbutton/documentation.html +++ b/src/data/better-splitbutton/documentation.html @@ -4,8 +4,8 @@ Better SplitButton Documentation - - + +

@@ -13,30 +13,30 @@

- + Quick Start
step-by-step tutorial for using Better ListView in your application

- + Better SplitButton Properties
Properties for adjusting Better SplitButton appearance and behavior

- + Known Issues
Things that are not yet available in Better SplitButton contrary @@ -45,7 +45,7 @@

diff --git a/src/data/better-splitbutton/quick-start-guide.html b/src/data/better-splitbutton/quick-start-guide.html index 6af0f67..801d1be 100644 --- a/src/data/better-splitbutton/quick-start-guide.html +++ b/src/data/better-splitbutton/quick-start-guide.html @@ -3,24 +3,24 @@ Quick Start - - - + + +

- - +

Quick Start

Table of Contents

@@ -60,7 +60,7 @@ Toolbox window (View - Toolbox):

-

+

The Toolbox should contain a new tab called "ComponentOwl" containing all the installed component @@ -73,7 +73,7 @@

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 @@ -81,17 +81,17 @@ 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:

-

+

@@ -127,7 +127,7 @@

If a new version of Better SplitButton is released, to update to - newer version, simply download + newer version, simply download and install the new version. The installer will prompt for updating to a new version.

@@ -196,29 +196,29 @@

We will happily answer any of your questions and provide further assistance. Just email us at support@componentowl.com. - Or, you can use the online form at www.componentowl.com/support.

+ Or, you can use the online form at www.componentowl.com/support.


- - +

diff --git a/src/data/better-splitbutton/screenshots.html b/src/data/better-splitbutton/screenshots.html index ced4f6e..470a8d2 100644 --- a/src/data/better-splitbutton/screenshots.html +++ b/src/data/better-splitbutton/screenshots.html @@ -15,9 +15,9 @@ Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) - - - + + + @@ -33,59 +33,59 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -111,9 +111,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -156,9 +156,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -166,10 +166,10 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -198,9 +198,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -209,8 +209,8 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -223,31 +223,31 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -258,7 +258,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView Express 3.15 released!

- Download latest release + Download latest release

@@ -271,7 +271,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView 3.15 released!

- Download latest release + Download latest release

@@ -284,7 +284,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better SplitButton 3.15 released!

- Download latest release + Download latest release

@@ -297,7 +297,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better Thumbnail Browser 3.15 released!

- Download latest release + Download latest release

@@ -310,10 +310,10 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView Express 3.14.0 released!

- See what's new + See what's new or - Download latest release + Download latest release

@@ -325,15 +325,15 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

-
-Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
+
+Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
- + - - + + <p>This page requires frames, but your browser does not support them.</p> diff --git a/src/data/better-thumbnail-browser/documentation.html b/src/data/better-thumbnail-browser/documentation.html index ab5b4af..292d7e3 100644 --- a/src/data/better-thumbnail-browser/documentation.html +++ b/src/data/better-thumbnail-browser/documentation.html @@ -4,8 +4,8 @@ Better Thumbnail Browser Documentation - - + +

@@ -13,11 +13,11 @@

@@ -29,41 +29,41 @@

- + Overview
What this documentation covers; list Better Thumbnail Browser features

- + Quick Start
Step-by-step tutorial for using Better ListView in your application

- + Using the Control
Basic usage of Better Thumbnail Browser

- + Layout
Element and element part sizes and padding, multi-line text, image border

- + Loading Thumbnails
Loading images from a folder on disk or using custom loader class.

- + Text Formatting
Text alignment and trimming @@ -77,158 +77,158 @@

- + Background Image
Image on the control background, setting its layout and opacity

- + Check Boxes
Enabling two and three state check boxes on items

- + Collections
Working with collections of columns, items, sub-items, groups

- + Columns
Hiding, resizing and reordering column headers

- + Context Menus
Displaying context menus on the control, column headers, groups and items

- + Data Binding
Complex binding of custom list-based data to the control

- + Drag and Drop
Setting-up Drag and Drop functionality and effects

- + Empty Text
Displaying customized text on empty list

- + Focusing Elements
How items, sub-items and groups can be focused and how to detect focus changes

- + Groups
Working with item groups

- + Hit Test
Getting info for cursor position in the control

- + Insertion Mark
Specifying insertion mark location and apperance

- + Item Reordering
Changing item order automatically with Drag and Drop

- + Items
Working with ListView items

- + Label Editing
Inline editing of items and sub-items

- + Multi-line Items
Setting up items with multiple lines of text

- + Owner Drawing
Custom drawing over the control and its parts

- + Performance
Understanding Better ListView performance settings

- + Saving and Loading ListView Content
Storing and retrieving items and groups in binary or XML format

- + Searching Items
Item searching by typing or programmatically

- + Serialization
Overview of Better ListView serialization capabilities

- + Sorting Items
Ordering items with multiple columns and custom comparers

- + Sub-items
Working with sub-items which are attached under items

- + Tooltips
Displaying customized tooltips on control and its parts

- + Views
Ways of displaying items, detecting view change @@ -236,7 +236,7 @@

diff --git a/src/data/better-thumbnail-browser/quick-start-guide.html b/src/data/better-thumbnail-browser/quick-start-guide.html index 3b44eee..048eb13 100644 --- a/src/data/better-thumbnail-browser/quick-start-guide.html +++ b/src/data/better-thumbnail-browser/quick-start-guide.html @@ -3,25 +3,25 @@ Quick Start - - - + + +

- - - +

Quick Start

Table of Contents

@@ -66,7 +66,7 @@ Toolbox window (View - Toolbox):

-

+

The Toolbox should contain a new tab called "ComponentOwl" containing all the installed component @@ -81,7 +81,7 @@

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 @@ -89,13 +89,13 @@ 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.

@@ -111,26 +111,26 @@ 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:

-

+

@@ -171,12 +171,12 @@ trial version are watermark displayed on the control...

-

+

and an Activation Dialog, that appears on every application run:

-

+

There are three possible actions:

@@ -195,10 +195,10 @@

When activating Better Thumbnail Browser, you are asked for a serial - key (obtained by pruchasing + key (obtained by pruchasing Better Thumbnail Browser):

-

+



Internet connection is required to activate Better @@ -226,7 +226,7 @@

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 @@ -271,7 +271,7 @@

If a new version of Better Thumbnail Browser is released, to update - to newer version, simply download + to newer version, simply download and install the new version. The installer will prompt for updating to a new version.

@@ -412,30 +412,30 @@ Dim hitTestInfo As BetterListViewHitTestInfo = thumbnailBrowser.HitTest(New Poin

We will happily answer any of your questions and provide further assistance. Just email us at support@componentowl.com. - Or, you can use the online form at www.componentowl.com/support.

+ Or, you can use the online form at www.componentowl.com/support.


- - - +

diff --git a/src/data/better-thumbnail-browser/screenshots.html b/src/data/better-thumbnail-browser/screenshots.html index dabee75..d501d24 100644 --- a/src/data/better-thumbnail-browser/screenshots.html +++ b/src/data/better-thumbnail-browser/screenshots.html @@ -15,9 +15,9 @@ Better Thumbnail Browser Screenshots - - - + + + @@ -33,59 +33,59 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -111,9 +111,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -171,9 +171,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -181,10 +181,10 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -213,9 +213,9 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_ @@ -224,8 +224,8 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -238,31 +238,31 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_
@@ -273,7 +273,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView Express 3.15 released!

- Download latest release + Download latest release

@@ -286,7 +286,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView 3.15 released!

- Download latest release + Download latest release

@@ -299,7 +299,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better SplitButton 3.15 released!

- Download latest release + Download latest release

@@ -312,7 +312,7 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better Thumbnail Browser 3.15 released!

- Download latest release + Download latest release

@@ -325,10 +325,10 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

Better ListView Express 3.14.0 released!

- See what's new + See what's new or - Download latest release + Download latest release

@@ -340,15 +340,15 @@ var t = {"antispam":"capek-rulz","purchase_email":"valid purchase email","valid_

-
-Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
+
+Copyright © 2018 ComponentOwl.com, Dextronet.com. All rights reserved. Read our EULA, Disclaimer and Privacy Policy.
- + - - + + - - - + + + @@ -145,7 +145,7 @@ img.emoji {

Leave a Reply

@@ -183,7 +183,7 @@ img.emoji {
@@ -192,22 +192,22 @@ img.emoji { diff --git a/src/data/blog/2011/12/how-to-dynamically-resize-focused-item/index.html b/src/data/blog/2011/12/how-to-dynamically-resize-focused-item/index.html index 6be1617..c78273b 100644 --- a/src/data/blog/2011/12/how-to-dynamically-resize-focused-item/index.html +++ b/src/data/blog/2011/12/how-to-dynamically-resize-focused-item/index.html @@ -7,14 +7,14 @@ How To: Dynamically Resize Focused Item « Owl's Blog on .NET development - - + + - - - + + + - - + + - + - - - - - + + + + + @@ -227,7 +227,7 @@ img.emoji {

“all you have to do is to switch your brain off” is extremely vague and meaningless language, despite knowing all of the things I know now, I have yet to achieve such a thing. In fact, the entire meditation connection was weak, because you claim benefits, but never tie it into the original point. “He is too lazy to focus.” is not only a potential insight to your self-confident reader, but also a reassurance that people are who we are, and cannot change. People aren’t lazy, they just sometimes get stuck in loops which diverge them from reaching their goals, or their goals are misaligned with their objects, or a number of other temporary transient reasons.

Sorry, I’ve written a lot and I don’t feel like continuing. If you’ve read through this post completely dismissive of my points, then at least take the time to analyze which thoughts lead to your dismissals, and where those thoughts came from and shall lead…

- +
  • @@ -245,7 +245,7 @@ img.emoji {

    But you are, of course, right – I could’ve been much more convincing. I will definitely work on that, as I always want to hone my skills as a writer.

    Have a wonderful day, Kyle, and once again, thanks for writing.

    - +
    • @@ -258,7 +258,7 @@ img.emoji {

      Well said, to both of you. Finally, evidence that mature, stimulating, respectful & thought provoking debate can occur in web comments!

      - +
    • @@ -274,7 +274,7 @@ img.emoji {

      Tabs BE-GONE!

      Also, I’ve wanted to gain some fitness for a long time now, so I’m gonna start doing some push-ups during my micro-breaks, and perhaps do a run during a larger break, so my body thanks you too :)

      - +
    @@ -292,7 +292,7 @@ img.emoji {

    The distraction junkie thinks outside the box and may well come up with better solutions.

    The “zoned-out” coder, is boxed in.

    - +
    • @@ -305,7 +305,7 @@ img.emoji {

      There is no question that outside inputs can be beneficial for creativity. The problem lies in when these outside inputs are consumed.

      - +
      • @@ -322,7 +322,7 @@ img.emoji {

        Obviously if it’s badly stuck (for, say, days) I get frustrated and blame it on distractions and my inability to focus. But at the same time, I know I’m not just turning a crank. I mean, 95% of the time I am, obviously, but the remaining 5% is the art and the craft, the part that justifies them having me doing it and not the 18-year-old fresh off high school.

        My two cents.

        - +
      @@ -341,7 +341,7 @@ img.emoji { i agree with you if you are zen blogger writing about the coding :)

      btw, i like your pictures how you depict mental metaphor

      - +
      • @@ -356,7 +356,7 @@ i agree with you if you are zen blogger writing about the coding :)

        Wrong is if you try to do them all at once.

        (And by the way, this post is my weekend and after-work project.)

        - +
      @@ -376,7 +376,7 @@ i agree with you if you are zen blogger writing about the coding :)

      there might be some truth to what you wrote but i do believe it differs from one person to the other.
      anyone else feels this way ?

      - +
      • @@ -392,7 +392,7 @@ anyone else feels this way ?

        Imagine Albert Einstein writing some theory on a blackboard, and constantly checking his twitter and email. That’s the problem. Not doing something else and letting your subconscious mind work.

        2) In this case, Pomodoro and other anti-procrastination techniques help. In my case, I just launch some upbeat music and code away. It is actually a quite joyful experience.

        - +
        • @@ -405,7 +405,7 @@ anyone else feels this way ?

          Pink Floyd while in the engineering process, Daft Punk while in the coding process.

          - +
        @@ -423,7 +423,7 @@ anyone else feels this way ?

        Nice article!. I’m definitly a Distraction-Junkie one. I’m taking your article like a “from Distraction-Junkie to Zen-Coder” guide ;).
        Thanks.

        - +
      • @@ -440,7 +440,7 @@ Thanks.

        being focused needs to be practised every day all the time. so reading an article or book without the mind wandering off or listening to another person talking without thinking of your to-do-list needs to be practised constantly otherwise your attention span will get shorter and shorter.

        i read a quote of some zen master once that goes something like this and sums the issue up nicely. the master was talking to a student who was complaining about that meditation is boring (i think): “you lie but you’re sitting already. you sit but you’re standing already. you stand but you’re walking already. when I lie I am lying. when I sit I am sitting. when I stand I am standing and when I walk I am walking.”

        - +
      • @@ -453,7 +453,7 @@ Thanks.

        Nice article.Ran into this while i was programming :D

        - +
      • @@ -468,7 +468,7 @@ Thanks.

        As a CTO, I code only part time, and sometimes not at all. However, that does imply that the time I do spend coding, has to be as effective as possible. I recently started experimenting with morning workouts — quick and timed — giving me huge amounts of energy for the rest of the day. Also, adrenaline helps you focus. Secondly, for timeslots I prefer the pomodoro technique. Macs have some great tools for this. The thirty minute slots with a timer force you to concentrate. Stating what you are going to do for the next slot commits your mind and _really_ helps you to maintain focus. Combined with planning your day every morning and saying to yourself: “This is what I’m going to finish”, is has awesome effects.

        Finally, no notifications. Not for mail, skype, twitter, adium or IRC. If its important, people should call, else they’d have to wait a while. Not even highlighted icons.

        - +
      • @@ -481,7 +481,7 @@ Thanks.

        very good point for productivity and time management. You should write more about this topic, maybe a being zen coder guide :) thank you.

        - +
      • @@ -494,7 +494,7 @@ Thanks.

        i just read this while a clean and build, no joking….

        - +
      • @@ -510,7 +510,7 @@ Thanks.

        The next time you stall out on a difficult or irritating problem, do you Alt-Tab to [favorite social bookmarking site]? If so, you’re substituting momentary distraction and discovery for real accomplishment, to the detriment of both.

        If you find yourself unable to break this cycle, consider whether you may have fallen into depression.

        - +
      • @@ -524,7 +524,7 @@ Thanks.

        I feel your pain. I could never go back to the old ways of developing in java or .net when programming finally reached a point where the developer productivity and conformt is more important that over engineered, over complicated, over bloated architectures.

        Simplicity is a great asset towards reaching zero turn-around.

        - +
      • @@ -537,7 +537,7 @@ Thanks.

        You just listed ALL of those things I do on a microbreak! (the good ones, not the bad ones :P)

        - +
      • @@ -550,7 +550,7 @@ Thanks.

        I would say chatting with a coworker is even worse than a computer-related distraction. If you’re checking your RSS and see that the compiler is done, you can close it and run the program. If you’re chatting with a person and the compilation finishes, there’s typically a social taboo against just turning your back on them.

        - +
      • @@ -563,7 +563,7 @@ Thanks.

        Just wondering, if listening to music while coding causes any distraction?

        - +
        • @@ -577,7 +577,7 @@ Thanks.

          The research mentioned in “Peopleware” book suggests that listening to music counter-intuitively reduces your creative abilities. The music engages (and “occupies”) the right-part of your brain, which is used for creative tasks. On the other hand, music helps you to stay in the flow, and can help with the left-brain tasks.

          My rule of thumb would be to listen to music only when doing routine stuff/work where you don’t need to think much, and use silence or white-noise when working on creative or difficult tasks. If your environment is noisy, you can also consider noise-cancelling headphones – the added benefit is that people will be less likely to disturb you.

          - +
          • @@ -593,7 +593,7 @@ Thanks.

            “On the other hand, music helps you to stay in the flow, and can help with the left-brain tasks.”

            Wait, this is the opposite of what you just said. I don’t remember this part in Peopleware.

            - +
            • @@ -613,7 +613,7 @@ Thanks.

              http://www.workplacedoctors.com/wpdocs/qdetail.asp?id=1297

              The results of studies done to this day are mixed. IIRC, I’ve seen one study that claimed students taking a math test performed better when listening to classical music during the test. But, there are also several other studies that show different results.

              - +
            @@ -635,7 +635,7 @@ I used be a Distraction-Junkie coder,and I have found the same way to make my but I want to konw that if there are some exceptions in other business need Distraction-Junkie,maybe we can
            settle this Contradiction.

            - +
          • @@ -648,7 +648,7 @@ settle this Contradiction.

            Very intresting… But if I was not a distractionjunkie developer, I never found this article. :)

            - +
            • @@ -661,7 +661,7 @@ settle this Contradiction.

              And then you won’t need it anyway :)

              - +
            @@ -676,7 +676,7 @@ settle this Contradiction.

            reached this article during one such regular distraction for HN. so not entirely wasted. but i haven’t started working on my million dollar idea, so sadly very true. bookmarking it! and blocking hn, reddit… in hosts file.

            - +
          • @@ -690,7 +690,7 @@ settle this Contradiction.

            It’s absolutely true, but done that I can’t always be a zen coder I try to have distractions after the code compiles so that I am bored of distractions while it compiles and still can have errors. I admit neither it works too well …
            I think the solution could be to write news insulting us for being lazy, and so we would get motivation to continue working.

            - +
          • @@ -703,7 +703,7 @@ I think the solution could be to write news insulting us for being lazy, and so

            Bulls-eye! Some really good tweeking ideas for design and coding issues have come with eyes closed while waiting on a compile or upload. I not a Zen developer yet but will work on your idea and see if I can get to the next level with less STRESS! You are 100% correct about the downside of being a distraction junkie. Thanks for a great article!

            - +
          • @@ -717,7 +717,7 @@ I think the solution could be to write news insulting us for being lazy, and so

            Very interesting article, and I mostly agree with all of it. Multitasking can be dangerous and distracting, however, where I work, my communication with different departments is critical, so I can’t go not-checking-my-email for three hours. I definitely do things like check my email, maybe chat, during build time. These things are so quick I can stop immediately and go back to working. I do however avoid things like facebook/reddit/slashdot, because those are less likely the engagements I can quickly drop as soon as my build is done. Just my two cents, some people might have more self control over others when it comes to getting back to work.
            Also, I find I’m most productive when I have a more-than-full pipeline (i.e, many more tasks to work on with little time to do them all)

            - +
          • @@ -730,7 +730,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            I actually really enjoyed this article and will be sharing with a lot of people. I must say that I struggle with this exact problem of checking dev blogs and social feeds of developers while waiting for cpu operations. The developer subject almost allows me to rationalize the time I’m wasting because its code related and I learn from it, but I should be doing this during long breaks or before/after work because it can take me a long time to get back to focus. Thanks for sharing this information and I look forward to attempting to implement this right away.

            - +
          • @@ -743,7 +743,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            I think I’m both types: it depends on how hard a problem I’m trying to solve. If I’m writing a compiler, as I was last week, then there’s virtually no distraction at all; if it’s website stuff, then Facebook sees quite a bit of me. There’s a boredom quotient here, too… the harder stuff is more interesting and thus I’m going to be less apt to be sucked into doing something else on days when I really have to think. As you can probably tell, today is not one of those days…

            - +
          • @@ -758,7 +758,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            Jajajaja, i’m not a Zen coders, i do in fact, do some relaxations, chat a little with co-workers, check internet stuff.

            Most of the time, i’m breaking bugs of stuff i coded. Depends on what i’m doing its how i work. If its something urgent or something pretty interesting, times goes flying, if its some addition of thing already working or breaking bugs, then break present a lot!

            - +
          • @@ -776,7 +776,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            Why is it even possible for some compilers to be so slow still? They’re not doing *that* much work. My version control software (hg inotify) knows instantly whether any files have changed, and doesn’t need to walk a bunch of folders to check timestamps to find that out. Why isn’t my compiler that smart? I’ve got gobs of extra memory and CPU to spare. It shouldn’t sit around doing nothing at all, and then spring into action when I run the “build” command and start up a bunch of new processes, and load a bunch of files, and feed them through the lexer and parser and so on. It could have been doing the first 98% of this while I was typing, and it was sitting idle.

            There’s nothing special about compilation, except that we do it a lot. If your text editor if it took 2 minutes to save a file, would you say “There will always be waiting times while working on the computer” and analyze the effects of visiting Facebook, or would you find a way to switch editors? On project “B”, I can’t remember the last time I had to wait on my computer for anything.

            - +
          • @@ -796,7 +796,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            However, a good article.

            Cheers

            - +
          • @@ -809,7 +809,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            Great article but fast CPU, plenty of RAM and SSD will help you ;) Like helped me :)

            - +
          • @@ -822,7 +822,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            Lucky for the author I’m a distraction junkie or I would have never read this article.

            - +
          • @@ -836,7 +836,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            +1

            Back in my C programming days of computing youth I used to do a lot of juggling. Looking back, I now realize that I was really on to something back then. But in a completely oblivious way! I should probably pick up a new set of juggling balls… Then again, perhaps not. I don’t want to distract my co-workers unnecessarily.

            - +
            • @@ -850,7 +850,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

              Juggling is awesome! One of my friends in the office juggles too. It’s not annoying me at all.

              Or, you can juggle in a different room. If you get a desk close to the door, you can leave/enter the room unnoticed.

              - +
            @@ -868,7 +868,7 @@ Also, I find I’m most productive when I have a more-than-full pipeline (i.

            Cheers,
            Carl

            - +
          • @@ -881,7 +881,7 @@ Carl

            Awesome post, I can’t stress enough how important it is not to lose focus

            - +
          • @@ -894,7 +894,7 @@ Carl

            What you forgot is all the external distractions, like phone calls, coworkers coming in, or system surveillance alarms…

            - +
          • @@ -908,7 +908,7 @@ Carl

            My latest post about Hidden Procrastination:

            http://www.dextronet.com/blog/2012/02/hidden-procrastination/

            - +
          • @@ -922,7 +922,7 @@ Carl

            Very nicely written.

            I am glad that my natural habit of stretching more than once on a day at work is not something that I should try and suppress :)

            - +
          • @@ -935,7 +935,7 @@ Carl

            […] Are you a Zen coder or a distraction junkie? It’s been a while since I’ve worked on a project where “my code’s been compiling” has been a valid excuse for not working. But now that I am on such a project, it’s important that those mini-breaks don’t turn into longer breaks. […]

            - +
          • @@ -950,7 +950,7 @@ Carl

            I knew. And I sent it to this person. It was my boss. He said thank you and fired me.

            ;)

            - +
          • @@ -964,7 +964,7 @@ Carl

            “However, I almost immediately run into a big problem: When I was compiling or deploying something, I automatically opened one or more of the following: Email client, Facebook, news reader, news sites. That’s a bad habit. It’s hard to break. It ruins my goal of clean focus.”
            This is how I got to your article!!! Some nice things grow from bad habits

            - +
          • @@ -977,7 +977,7 @@ This is how I got to your article!!! Some nice things grow from bad habits

            Great article ! …. thanks :)

            - +
          • @@ -990,7 +990,7 @@ This is how I got to your article!!! Some nice things grow from bad habits

            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]

            - +
          • @@ -1003,7 +1003,7 @@ This is how I got to your article!!! Some nice things grow from bad habits

            […] 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 […]

            - +
          • diff --git a/src/data/blog/better-listview-150-released/index.html b/src/data/blog/better-listview-150-released/index.html index e17436f..cdae63c 100644 --- a/src/data/blog/better-listview-150-released/index.html +++ b/src/data/blog/better-listview-150-released/index.html @@ -45,8 +45,8 @@ img.emoji { - - + +
          diff --git a/src/data/blog/better-thumbnail-browser-component-released/index.html b/src/data/blog/better-thumbnail-browser-component-released/index.html index 23a94d0..2b508f6 100644 --- a/src/data/blog/better-thumbnail-browser-component-released/index.html +++ b/src/data/blog/better-thumbnail-browser-component-released/index.html @@ -45,8 +45,8 @@ img.emoji { - - + + diff --git a/src/data/blog/binding-images-in-better-listview/index.html b/src/data/blog/binding-images-in-better-listview/index.html index 2e6a60a..9528157 100644 --- a/src/data/blog/binding-images-in-better-listview/index.html +++ b/src/data/blog/binding-images-in-better-listview/index.html @@ -45,8 +45,8 @@ img.emoji { - - + +
        @@ -145,7 +145,7 @@ img.emoji {

        Can you change the button height as this would make it a great option for touch screen apps.

        - +
        • @@ -158,7 +158,7 @@ img.emoji {

          Height of any element in Better ListView can be changed.

          - +
        diff --git a/src/data/blog/custom-spacing-between-items-in-details-view/index.html b/src/data/blog/custom-spacing-between-items-in-details-view/index.html index 4760bc3..001262f 100644 --- a/src/data/blog/custom-spacing-between-items-in-details-view/index.html +++ b/src/data/blog/custom-spacing-between-items-in-details-view/index.html @@ -45,8 +45,8 @@ img.emoji { - - + +
      diff --git a/src/data/blog/displaying-multi-line-text-in-listview/index.html b/src/data/blog/displaying-multi-line-text-in-listview/index.html index b6d51e1..60b4d4a 100644 --- a/src/data/blog/displaying-multi-line-text-in-listview/index.html +++ b/src/data/blog/displaying-multi-line-text-in-listview/index.html @@ -45,8 +45,8 @@ img.emoji { - - + + diff --git a/src/data/blog/feed/index.html b/src/data/blog/feed/index.html index b8bd45a..4d9bd96 100644 --- a/src/data/blog/feed/index.html +++ b/src/data/blog/feed/index.html @@ -123,7 +123,7 @@ When instantiating an ActiveX control written as a .NET assembly exposed via Int http://www.componentowl.com/blog/?p=906 - Centered images in Better ListView

      Centered images in Better ListView

      + Centered images in Better ListView

      Centered images in Better ListView

      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.

      @@ -158,8 +158,8 @@ When instantiating an ActiveX control written as a .NET assembly exposed via Int http://www.componentowl.com/blog/?p=901 - Better ListView Sub-item Check Boxes

      Better ListView Sub-item Check Boxes

      -

      Better ListView 3.10.0 allows displaying fully interactive check boxes and even radio buttons in sub-item cells.

      + Better ListView Sub-item Check Boxes

      Better ListView Sub-item Check Boxes

      +

      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.

      @@ -187,8 +187,8 @@ When instantiating an ActiveX control written as a .NET assembly exposed via Int http://www.componentowl.com/blog/?p=894 - Default list without grid lines below items

      Default list without grid lines below items

      -
      List with grid lines added

      List with grid lines added

      + Default list without grid lines below items

      Default list without grid lines below items

      +
      List with grid lines added

      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:

        @@ -255,7 +255,7 @@ What this code does is getting the last visible item using BottomItemhttp://www.componentowl.com/blog/?p=888 - Alternating Rows

        Alternating Rows

        + Alternating Rows

        Alternating Rows

        Lists with alternating row colors are more readable. It is very simple to implement alternating rows in Better ListView.

        Simply add DrawItemBackground event handler and fill background on odd/even items:

         

        @@ -283,7 +283,7 @@ private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemB http://www.componentowl.com/blog/?p=882 - Search Filtering

        Search Filtering with highlight

        + Search Filtering

        Search Filtering with highlight

        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”]
        @@ -374,8 +374,8 @@ void listView_KeyDown(object sender, KeyEventArgs e)
        http://www.componentowl.com/blog/?p=878 - Better ListView custom scroll bar size

        Better ListView custom scroll bar size

        -

        Better ListView 3.7.0 contains two new properties that allow you to set custom horizontal and vertical scroll bar sizes:

        + Better ListView custom scroll bar size

        Better ListView custom scroll bar size

        +

        Better ListView 3.7.0 contains two new properties that allow you to set custom horizontal and vertical scroll bar sizes:

        • HScrollBarWidth
        • VScrollBarHeight
        • @@ -416,7 +416,7 @@ void listView_KeyDown(object sender, KeyEventArgs e)
          http://www.componentowl.com/blog/?p=868 - Fading Edges in Better ListView

          + Fading Edges in Better ListView

          I found the effect of fading borders impressive on my smartphone. This is actualy very easy to do as it requires a simple gradient brush.

          You can obtain the same effect with Better ListView by overriding the DrawingRedrawCore method and do the drawing over the items:

          C#

          diff --git a/src/data/blog/file-explorer-with-better-listview/index.html b/src/data/blog/file-explorer-with-better-listview/index.html index b8467bc..1b5ecbc 100644 --- a/src/data/blog/file-explorer-with-better-listview/index.html +++ b/src/data/blog/file-explorer-with-better-listview/index.html @@ -45,8 +45,8 @@ img.emoji { - - + +
        diff --git a/src/data/blog/sub-item-check-boxes-in-better-listview/index.html b/src/data/blog/sub-item-check-boxes-in-better-listview/index.html index 52cfe67..c1e1811 100644 --- a/src/data/blog/sub-item-check-boxes-in-better-listview/index.html +++ b/src/data/blog/sub-item-check-boxes-in-better-listview/index.html @@ -45,8 +45,8 @@ img.emoji { - - + + diff --git a/src/data/blog/what-we-are-working-on-groups-item-hierarchy-support/index.html b/src/data/blog/what-we-are-working-on-groups-item-hierarchy-support/index.html index dc7f813..e5c9ccd 100644 --- a/src/data/blog/what-we-are-working-on-groups-item-hierarchy-support/index.html +++ b/src/data/blog/what-we-are-working-on-groups-item-hierarchy-support/index.html @@ -45,8 +45,8 @@ img.emoji { - - + +