From 1f1a6e6f41e46da01a09c93b62633c52fa0e0cc0 Mon Sep 17 00:00:00 2001 From: Jarvis Prime Date: Mon, 23 Mar 2026 20:24:05 +0000 Subject: [PATCH] Preserve full site structure: articles, blog posts, downloads, BLV Express, sitemap, legacy CSS/JS --- public/articles.html | 259 +++ "public/articles/\\\".html" | 580 ++++++ ...al-studio-toolbox-control-integration.html | 1838 +++++++++++++++++ public/better-listview-express.html | 448 ++++ "public/better-listview-express/\\\".html" | 580 ++++++ .../comparison-with-full-version.html | 900 ++++++++ .../documentation.html | 228 ++ .../quick-start-guide.html | 303 +++ .../releases?since=3.14.0.html | 592 ++++++ public/blog/2011/01/index.html | 213 ++ .../index.html | 292 +++ public/blog/2011/02/index.html | 213 ++ public/blog/2011/02/page/2/index.html | 253 +++ .../index.html | 288 +++ public/blog/2011/03/index.html | 213 ++ public/blog/2011/03/page/2/index.html | 253 +++ .../index.html | 302 +++ public/blog/2011/05/index.html | 211 ++ public/blog/2011/06/index.html | 213 ++ public/blog/2011/07/index.html | 213 ++ .../index.html | 277 +++ public/blog/2011/08/index.html | 213 ++ public/blog/2011/09/index.html | 213 ++ public/blog/2011/10/index.html | 211 ++ public/blog/2011/11/index.html | 213 ++ public/blog/2011/11/page/2/index.html | 253 +++ .../index.html | 312 +++ .../index.html | 308 +++ public/blog/2011/12/index.html | 211 ++ public/blog/2012/01/index.html | 213 ++ public/blog/2012/01/page/2/index.html | 253 +++ .../index.html | 279 +++ public/blog/2012/02/index.html | 213 ++ public/blog/2012/03/index.html | 213 ++ public/blog/2012/04/index.html | 213 ++ public/blog/2012/08/index.html | 213 ++ public/blog/2012/09/index.html | 211 ++ public/blog/2012/12/index.html | 213 ++ public/blog/2013/01/index.html | 213 ++ public/blog/2013/02/index.html | 211 ++ public/blog/2013/03/index.html | 213 ++ public/blog/2014/02/index.html | 211 ++ public/blog/2014/04/index.html | 213 ++ public/blog/2014/07/index.html | 211 ++ public/blog/2014/08/index.html | 211 ++ public/blog/2016/11/index.html | 211 ++ public/blog/2017/02/index.html | 211 ++ public/blog/2017/03/index.html | 211 ++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../better-listview-released/feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 49 + .../index.html?replytocom=1285.html | 367 ++++ .../index.html?replytocom=1286.html | 367 ++++ .../feed/index.html | 36 + .../index.html?replytocom=1289.html | 315 +++ .../feed/index.html | 26 + .../blv-and-internet-explorer/feed/index.html | 26 + .../category/announcements/feed/index.html | 328 +++ public/blog/category/announcements/index.html | 226 ++ .../category/better-listview/feed/index.html | 525 +++++ .../blog/category/better-listview/index.html | 298 +++ .../blog/category/components/feed/index.html | 739 +++++++ public/blog/category/components/index.html | 228 ++ .../blog/category/programming/feed/index.html | 178 ++ public/blog/category/programming/index.html | 214 ++ .../blog/category/tutorials/feed/index.html | 897 ++++++++ public/blog/category/tutorials/index.html | 248 +++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + public/blog/comments/feed/index.html | 126 ++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 66 + .../index.html?replytocom=1340.html | 345 ++++ .../index.html?replytocom=1344.html | 345 ++++ .../index.html?replytocom=1345.html | 345 ++++ .../index.html?replytocom=1346.html | 345 ++++ .../feed/index.html | 26 + .../feed/index.html | 57 + .../index.html?replytocom=1280.html | 364 ++++ .../index.html?replytocom=1281.html | 364 ++++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 36 + .../index.html?replytocom=1290.html | 374 ++++ public/blog/feed/index.html | 525 +++++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 26 + public/blog/index.html?p=103.html | 292 +++ public/blog/index.html?p=119.html | 284 +++ public/blog/index.html?p=129.html | 288 +++ public/blog/index.html?p=189.html | 275 +++ public/blog/index.html?p=204.html | 284 +++ public/blog/index.html?p=213.html | 273 +++ public/blog/index.html?p=232.html | 302 +++ public/blog/index.html?p=260.html | 285 +++ public/blog/index.html?p=278.html | 276 +++ public/blog/index.html?p=287.html | 277 +++ public/blog/index.html?p=304.html | 304 +++ public/blog/index.html?p=330.html | 280 +++ public/blog/index.html?p=34.html | 273 +++ public/blog/index.html?p=340.html | 288 +++ public/blog/index.html?p=348.html | 279 +++ public/blog/index.html?p=359.html | 302 +++ public/blog/index.html?p=373.html | 291 +++ public/blog/index.html?p=398.html | 364 ++++ public/blog/index.html?p=40.html | 296 +++ public/blog/index.html?p=437.html | 312 +++ public/blog/index.html?p=450.html | 278 +++ public/blog/index.html?p=468.html | 308 +++ public/blog/index.html?p=476.html | 277 +++ public/blog/index.html?p=478.html | 276 +++ public/blog/index.html?p=480.html | 304 +++ public/blog/index.html?p=482.html | 279 +++ public/blog/index.html?p=546.html | 275 +++ public/blog/index.html?p=664.html | 1187 +++++++++++ public/blog/index.html?p=753.html | 276 +++ public/blog/index.html?p=760.html | 276 +++ public/blog/index.html?p=771.html | 363 ++++ public/blog/index.html?p=780.html | 275 +++ public/blog/index.html?p=796.html | 341 +++ public/blog/index.html?p=803.html | 283 +++ public/blog/index.html?p=808.html | 366 ++++ public/blog/index.html?p=823.html | 314 +++ public/blog/index.html?p=831.html | 316 +++ public/blog/index.html?p=843.html | 373 ++++ public/blog/index.html?p=850.html | 458 ++++ public/blog/index.html?p=861.html | 358 ++++ public/blog/index.html?p=868.html | 362 ++++ public/blog/index.html?p=878.html | 344 +++ public/blog/index.html?p=882.html | 366 ++++ public/blog/index.html?p=888.html | 282 +++ public/blog/index.html?p=894.html | 315 +++ public/blog/index.html?p=901.html | 275 +++ public/blog/index.html?p=906.html | 273 +++ public/blog/index.html?p=914.html | 279 +++ public/blog/index.html?p=921.html | 279 +++ public/blog/index.html?p=927.html | 284 +++ public/blog/index.html?p=93.html | 281 +++ .../feed/index.html | 26 + .../feed/index.html | 26 + public/blog/page/3/index.html | 291 +++ public/blog/page/4/index.html | 315 +++ public/blog/page/5/index.html | 345 ++++ public/blog/page/6/index.html | 580 ++++++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 46 + .../index.html?replytocom=1353.html | 367 ++++ .../index.html?replytocom=1369.html | 367 ++++ .../feed/index.html | 26 + .../feed/index.html | 26 + public/blog/tag/1-52/feed/index.html | 53 + public/blog/tag/1-52/index.html | 212 ++ public/blog/tag/2-00/feed/index.html | 94 + public/blog/tag/2-00/index.html | 212 ++ public/blog/tag/2-01/feed/index.html | 62 + public/blog/tag/2-01/index.html | 212 ++ public/blog/tag/aero/feed/index.html | 64 + public/blog/tag/aero/index.html | 212 ++ public/blog/tag/align/feed/index.html | 93 + public/blog/tag/align/index.html | 214 ++ public/blog/tag/aligned/feed/index.html | 61 + public/blog/tag/aligned/index.html | 212 ++ public/blog/tag/alignment/feed/index.html | 104 + public/blog/tag/alignment/index.html | 214 ++ public/blog/tag/alternating/feed/index.html | 64 + public/blog/tag/alternating/index.html | 212 ++ public/blog/tag/backcolor/feed/index.html | 154 ++ public/blog/tag/backcolor/index.html | 212 ++ public/blog/tag/background/feed/index.html | 84 + public/blog/tag/background/index.html | 212 ++ public/blog/tag/bars/feed/index.html | 70 + public/blog/tag/bars/index.html | 212 ++ public/blog/tag/behavior/feed/index.html | 90 + public/blog/tag/behavior/index.html | 212 ++ public/blog/tag/below/feed/index.html | 98 + public/blog/tag/below/index.html | 212 ++ .../tag/better-listview-2/feed/index.html | 918 ++++++++ public/blog/tag/better-listview-2/index.html | 274 +++ public/blog/tag/better/feed/index.html | 512 +++++ public/blog/tag/better/index.html | 226 ++ public/blog/tag/between/feed/index.html | 59 + public/blog/tag/between/index.html | 212 ++ public/blog/tag/bind/feed/index.html | 246 +++ public/blog/tag/bind/index.html | 212 ++ public/blog/tag/binding/feed/index.html | 246 +++ public/blog/tag/binding/index.html | 212 ++ public/blog/tag/borders/feed/index.html | 151 ++ public/blog/tag/borders/index.html | 212 ++ public/blog/tag/bound/feed/index.html | 311 +++ public/blog/tag/bound/index.html | 214 ++ public/blog/tag/boundaries/feed/index.html | 151 ++ public/blog/tag/boundaries/index.html | 212 ++ public/blog/tag/box/feed/index.html | 66 + public/blog/tag/box/index.html | 212 ++ public/blog/tag/boxes/feed/index.html | 66 + public/blog/tag/boxes/index.html | 212 ++ public/blog/tag/browser/feed/index.html | 123 ++ public/blog/tag/browser/index.html | 214 ++ public/blog/tag/buttons/feed/index.html | 66 + public/blog/tag/buttons/index.html | 212 ++ public/blog/tag/cell/feed/index.html | 66 + public/blog/tag/cell/index.html | 212 ++ public/blog/tag/cells/feed/index.html | 66 + public/blog/tag/cells/index.html | 212 ++ public/blog/tag/center/feed/index.html | 61 + public/blog/tag/center/index.html | 212 ++ public/blog/tag/changelog/feed/index.html | 53 + public/blog/tag/changelog/index.html | 212 ++ public/blog/tag/check/feed/index.html | 66 + public/blog/tag/check/index.html | 212 ++ public/blog/tag/checkbox/feed/index.html | 66 + public/blog/tag/checkbox/index.html | 212 ++ public/blog/tag/checkboxes/feed/index.html | 66 + public/blog/tag/checkboxes/index.html | 212 ++ .../child-items-in-listview/feed/index.html | 150 ++ .../tag/child-items-in-listview/index.html | 214 ++ public/blog/tag/classic/feed/index.html | 64 + public/blog/tag/classic/index.html | 212 ++ public/blog/tag/clean-focus/feed/index.html | 151 ++ public/blog/tag/clean-focus/index.html | 212 ++ .../tag/coder-productivity/feed/index.html | 151 ++ public/blog/tag/coder-productivity/index.html | 212 ++ public/blog/tag/collapse/feed/index.html | 64 + public/blog/tag/collapse/index.html | 212 ++ public/blog/tag/collapsible/feed/index.html | 64 + public/blog/tag/collapsible/index.html | 212 ++ public/blog/tag/color/feed/index.html | 154 ++ public/blog/tag/color/index.html | 212 ++ public/blog/tag/colored/feed/index.html | 64 + public/blog/tag/colored/index.html | 212 ++ public/blog/tag/colors/feed/index.html | 64 + public/blog/tag/colors/index.html | 212 ++ public/blog/tag/column/feed/index.html | 166 ++ public/blog/tag/column/index.html | 218 ++ public/blog/tag/columns/feed/index.html | 94 + public/blog/tag/columns/index.html | 214 ++ public/blog/tag/combined/feed/index.html | 56 + public/blog/tag/combined/index.html | 212 ++ public/blog/tag/coming-soon/feed/index.html | 118 ++ public/blog/tag/coming-soon/index.html | 214 ++ public/blog/tag/component/feed/index.html | 84 + public/blog/tag/component/index.html | 212 ++ public/blog/tag/computer-work/feed/index.html | 151 ++ public/blog/tag/computer-work/index.html | 212 ++ public/blog/tag/content/feed/index.html | 125 ++ public/blog/tag/content/index.html | 212 ++ public/blog/tag/control/feed/index.html | 84 + public/blog/tag/control/index.html | 212 ++ public/blog/tag/controls/feed/index.html | 110 + public/blog/tag/controls/index.html | 212 ++ public/blog/tag/crlf/feed/index.html | 67 + public/blog/tag/crlf/index.html | 212 ++ public/blog/tag/custom/feed/index.html | 615 ++++++ public/blog/tag/custom/index.html | 228 ++ .../feed/index.html | 90 + .../customize-groups-in-listview/index.html | 212 ++ .../feed/index.html | 90 + .../index.html | 212 ++ public/blog/tag/customized/feed/index.html | 116 ++ public/blog/tag/customized/index.html | 212 ++ public/blog/tag/data/feed/index.html | 311 +++ public/blog/tag/data/index.html | 214 ++ public/blog/tag/databinding/feed/index.html | 311 +++ public/blog/tag/databinding/index.html | 214 ++ public/blog/tag/databound/feed/index.html | 246 +++ public/blog/tag/databound/index.html | 212 ++ public/blog/tag/default/feed/index.html | 90 + public/blog/tag/default/index.html | 212 ++ public/blog/tag/details/feed/index.html | 92 + public/blog/tag/details/index.html | 214 ++ public/blog/tag/different/feed/index.html | 110 + public/blog/tag/different/index.html | 212 ++ .../disable-item-selection/feed/index.html | 62 + .../tag/disable-item-selection/index.html | 212 ++ public/blog/tag/disabled/feed/index.html | 94 + public/blog/tag/disabled/index.html | 214 ++ .../tag/display-multiline/feed/index.html | 67 + public/blog/tag/display-multiline/index.html | 212 ++ public/blog/tag/display/feed/index.html | 91 + public/blog/tag/display/index.html | 212 ++ .../tag/distraction-junkie/feed/index.html | 151 ++ public/blog/tag/distraction-junkie/index.html | 212 ++ public/blog/tag/distractions/feed/index.html | 151 ++ public/blog/tag/distractions/index.html | 212 ++ public/blog/tag/documentation/feed/index.html | 73 + public/blog/tag/documentation/index.html | 212 ++ .../feed/index.html | 69 + .../drag-and-drop-item-reordering/index.html | 212 ++ .../drag-and-drop-item-sort/feed/index.html | 69 + .../tag/drag-and-drop-item-sort/index.html | 212 ++ .../drag-and-drop-reordering/feed/index.html | 69 + .../tag/drag-and-drop-reordering/index.html | 212 ++ public/blog/tag/draw/feed/index.html | 145 ++ public/blog/tag/draw/index.html | 212 ++ public/blog/tag/drawing/feed/index.html | 392 ++++ public/blog/tag/drawing/index.html | 218 ++ public/blog/tag/drawn/feed/index.html | 363 ++++ public/blog/tag/drawn/index.html | 216 ++ public/blog/tag/drop-shadow/feed/index.html | 75 + public/blog/tag/drop-shadow/index.html | 212 ++ public/blog/tag/dropdown/feed/index.html | 56 + public/blog/tag/dropdown/index.html | 212 ++ public/blog/tag/dynamic/feed/index.html | 91 + public/blog/tag/dynamic/index.html | 212 ++ public/blog/tag/edge/feed/index.html | 151 ++ public/blog/tag/edge/index.html | 212 ++ public/blog/tag/edges/feed/index.html | 151 ++ public/blog/tag/edges/index.html | 212 ++ public/blog/tag/edit/feed/index.html | 188 ++ public/blog/tag/edit/index.html | 214 ++ public/blog/tag/editing/feed/index.html | 110 + public/blog/tag/editing/index.html | 212 ++ .../feed/index.html | 151 ++ .../tag/efficient-work-on-computer/index.html | 212 ++ public/blog/tag/embedded/feed/index.html | 110 + public/blog/tag/embedded/index.html | 212 ++ public/blog/tag/empty/feed/index.html | 98 + public/blog/tag/empty/index.html | 212 ++ public/blog/tag/enabled/feed/index.html | 61 + public/blog/tag/enabled/index.html | 212 ++ public/blog/tag/even/feed/index.html | 64 + public/blog/tag/even/index.html | 212 ++ public/blog/tag/explorer/feed/index.html | 188 ++ public/blog/tag/explorer/index.html | 216 ++ public/blog/tag/extension/feed/index.html | 107 + public/blog/tag/extension/index.html | 212 ++ public/blog/tag/extensions/feed/index.html | 107 + public/blog/tag/extensions/index.html | 212 ++ public/blog/tag/fading/feed/index.html | 151 ++ public/blog/tag/fading/index.html | 212 ++ public/blog/tag/fast-listview/feed/index.html | 73 + public/blog/tag/fast-listview/index.html | 212 ++ public/blog/tag/fast/feed/index.html | 62 + public/blog/tag/fast/index.html | 212 ++ public/blog/tag/faster/feed/index.html | 62 + public/blog/tag/faster/index.html | 212 ++ public/blog/tag/features/feed/index.html | 85 + public/blog/tag/features/index.html | 212 ++ public/blog/tag/feed/feed/index.html | 212 ++ public/blog/tag/file/feed/index.html | 146 ++ public/blog/tag/file/index.html | 214 ++ public/blog/tag/filename/feed/index.html | 107 + public/blog/tag/filename/index.html | 212 ++ public/blog/tag/files/feed/index.html | 107 + public/blog/tag/files/index.html | 212 ++ public/blog/tag/focus/feed/index.html | 151 ++ public/blog/tag/focus/index.html | 212 ++ public/blog/tag/focused/feed/index.html | 91 + public/blog/tag/focused/index.html | 212 ++ public/blog/tag/folder/feed/index.html | 123 ++ public/blog/tag/folder/index.html | 214 ++ public/blog/tag/font/feed/index.html | 154 ++ public/blog/tag/font/index.html | 212 ++ public/blog/tag/gradient/feed/index.html | 151 ++ public/blog/tag/gradient/index.html | 212 ++ public/blog/tag/grid/feed/index.html | 98 + public/blog/tag/grid/index.html | 212 ++ public/blog/tag/gridlines/feed/index.html | 98 + public/blog/tag/gridlines/index.html | 212 ++ public/blog/tag/group-header/feed/index.html | 90 + public/blog/tag/group-header/index.html | 212 ++ public/blog/tag/group/feed/index.html | 90 + public/blog/tag/group/index.html | 212 ++ public/blog/tag/groups/feed/index.html | 227 ++ public/blog/tag/groups/index.html | 218 ++ public/blog/tag/header/feed/index.html | 162 ++ public/blog/tag/header/index.html | 216 ++ public/blog/tag/headers/feed/index.html | 69 + public/blog/tag/headers/index.html | 212 ++ public/blog/tag/height/feed/index.html | 100 + public/blog/tag/height/index.html | 214 ++ public/blog/tag/hide/feed/index.html | 192 ++ public/blog/tag/hide/index.html | 218 ++ public/blog/tag/hiding/feed/index.html | 131 ++ public/blog/tag/hiding/index.html | 216 ++ public/blog/tag/hierarchy/feed/index.html | 136 ++ public/blog/tag/hierarchy/index.html | 214 ++ public/blog/tag/highlight/feed/index.html | 141 ++ public/blog/tag/highlight/index.html | 212 ++ public/blog/tag/highlighting/feed/index.html | 141 ++ public/blog/tag/highlighting/index.html | 212 ++ public/blog/tag/hot/feed/index.html | 331 +++ public/blog/tag/hot/index.html | 216 ++ public/blog/tag/hottrack/feed/index.html | 154 ++ public/blog/tag/hottrack/index.html | 212 ++ public/blog/tag/hottracking/feed/index.html | 154 ++ public/blog/tag/hottracking/index.html | 212 ++ public/blog/tag/hover/feed/index.html | 154 ++ public/blog/tag/hover/index.html | 212 ++ public/blog/tag/hovers/feed/index.html | 154 ++ public/blog/tag/hovers/index.html | 212 ++ public/blog/tag/how-to/feed/index.html | 55 + public/blog/tag/how-to/index.html | 212 ++ public/blog/tag/hyperlink/feed/index.html | 154 ++ public/blog/tag/hyperlink/index.html | 212 ++ public/blog/tag/hyperlinks/feed/index.html | 154 ++ public/blog/tag/hyperlinks/index.html | 212 ++ public/blog/tag/icon/feed/index.html | 246 +++ public/blog/tag/icon/index.html | 212 ++ public/blog/tag/icons/feed/index.html | 246 +++ public/blog/tag/icons/index.html | 212 ++ public/blog/tag/image-borders/feed/index.html | 75 + public/blog/tag/image-borders/index.html | 212 ++ public/blog/tag/image/feed/index.html | 116 ++ public/blog/tag/image/index.html | 214 ++ public/blog/tag/imagekey/feed/index.html | 246 +++ public/blog/tag/imagekey/index.html | 212 ++ public/blog/tag/imagelist/feed/index.html | 246 +++ public/blog/tag/imagelist/index.html | 212 ++ public/blog/tag/images/feed/index.html | 310 +++ public/blog/tag/images/index.html | 216 ++ .../tag/internet-addiction/feed/index.html | 151 ++ public/blog/tag/internet-addiction/index.html | 212 ++ public/blog/tag/invisible/feed/index.html | 98 + public/blog/tag/invisible/index.html | 214 ++ .../item-height-in-list-view/feed/index.html | 59 + .../tag/item-height-in-list-view/index.html | 212 ++ public/blog/tag/item-height/feed/index.html | 59 + public/blog/tag/item-height/index.html | 212 ++ .../blog/tag/item-hierarchy/feed/index.html | 150 ++ public/blog/tag/item-hierarchy/index.html | 214 ++ public/blog/tag/item-reorder/feed/index.html | 69 + public/blog/tag/item-reorder/index.html | 212 ++ public/blog/tag/item-sort/feed/index.html | 69 + public/blog/tag/item-sort/index.html | 212 ++ public/blog/tag/item/feed/index.html | 345 ++++ public/blog/tag/item/index.html | 218 ++ public/blog/tag/items/feed/index.html | 778 +++++++ public/blog/tag/items/index.html | 238 +++ public/blog/tag/label/feed/index.html | 188 ++ public/blog/tag/label/index.html | 214 ++ public/blog/tag/labeledit/feed/index.html | 107 + public/blog/tag/labeledit/index.html | 212 ++ public/blog/tag/large/feed/index.html | 70 + public/blog/tag/large/index.html | 212 ++ public/blog/tag/larger/feed/index.html | 70 + public/blog/tag/larger/index.html | 212 ++ public/blog/tag/layout/feed/index.html | 61 + public/blog/tag/layout/index.html | 212 ++ public/blog/tag/lf/feed/index.html | 67 + public/blog/tag/lf/index.html | 212 ++ public/blog/tag/line/feed/index.html | 67 + public/blog/tag/line/index.html | 212 ++ public/blog/tag/linefeed/feed/index.html | 67 + public/blog/tag/linefeed/index.html | 212 ++ public/blog/tag/lines/feed/index.html | 98 + public/blog/tag/lines/index.html | 212 ++ public/blog/tag/links/feed/index.html | 154 ++ public/blog/tag/links/index.html | 212 ++ .../list-view-group-headers/feed/index.html | 90 + .../tag/list-view-group-headers/index.html | 212 ++ public/blog/tag/list/feed/index.html | 141 ++ public/blog/tag/list/index.html | 212 ++ public/blog/tag/listview-tree/feed/index.html | 85 + public/blog/tag/listview-tree/index.html | 212 ++ public/blog/tag/listview/feed/index.html | 580 ++++++ public/blog/tag/listview/index.html | 232 +++ public/blog/tag/load/feed/index.html | 180 ++ public/blog/tag/load/index.html | 214 ++ public/blog/tag/loading/feed/index.html | 84 + public/blog/tag/loading/index.html | 212 ++ public/blog/tag/luna/feed/index.html | 64 + public/blog/tag/luna/index.html | 212 ++ public/blog/tag/mark/feed/index.html | 141 ++ public/blog/tag/mark/index.html | 212 ++ public/blog/tag/matched/feed/index.html | 141 ++ public/blog/tag/matched/index.html | 212 ++ public/blog/tag/mental-work/feed/index.html | 151 ++ public/blog/tag/mental-work/index.html | 212 ++ public/blog/tag/migration/feed/index.html | 73 + public/blog/tag/migration/index.html | 212 ++ public/blog/tag/mode/feed/index.html | 61 + public/blog/tag/mode/index.html | 212 ++ public/blog/tag/mouse-wheel/feed/index.html | 55 + public/blog/tag/mouse-wheel/index.html | 212 ++ public/blog/tag/mouse/feed/index.html | 180 ++ public/blog/tag/mouse/index.html | 214 ++ public/blog/tag/multi-line/feed/index.html | 156 ++ public/blog/tag/multi-line/index.html | 214 ++ public/blog/tag/multi/feed/index.html | 67 + public/blog/tag/multi/index.html | 212 ++ .../blog/tag/multiline-items/feed/index.html | 67 + public/blog/tag/multiline-items/index.html | 212 ++ public/blog/tag/multiline/feed/index.html | 194 ++ public/blog/tag/multiline/index.html | 216 ++ public/blog/tag/native-look/feed/index.html | 71 + public/blog/tag/native-look/index.html | 212 ++ public/blog/tag/new-release/feed/index.html | 53 + public/blog/tag/new-release/index.html | 212 ++ public/blog/tag/newline/feed/index.html | 67 + public/blog/tag/newline/index.html | 212 ++ public/blog/tag/newlines/feed/index.html | 67 + public/blog/tag/newlines/index.html | 212 ++ public/blog/tag/nodes/feed/index.html | 94 + public/blog/tag/nodes/index.html | 212 ++ .../feed/index.html | 62 + .../non-selectable-list-view-items/index.html | 212 ++ .../blog/tag/non-selectable/feed/index.html | 89 + public/blog/tag/non-selectable/index.html | 214 ++ public/blog/tag/nonselectable/feed/index.html | 89 + public/blog/tag/nonselectable/index.html | 214 ++ public/blog/tag/odd/feed/index.html | 64 + public/blog/tag/odd/index.html | 212 ++ public/blog/tag/optimization/feed/index.html | 62 + public/blog/tag/optimization/index.html | 212 ++ public/blog/tag/over/feed/index.html | 151 ++ public/blog/tag/over/index.html | 212 ++ public/blog/tag/owner/feed/index.html | 508 +++++ public/blog/tag/owner/index.html | 220 ++ public/blog/tag/ownerdraw/feed/index.html | 183 ++ public/blog/tag/ownerdraw/index.html | 214 ++ public/blog/tag/ownerdrawing/feed/index.html | 151 ++ public/blog/tag/ownerdrawing/index.html | 212 ++ public/blog/tag/ownerdrawn/feed/index.html | 238 +++ public/blog/tag/ownerdrawn/index.html | 214 ++ public/blog/tag/padding/feed/index.html | 105 + public/blog/tag/padding/index.html | 214 ++ public/blog/tag/per-line/feed/index.html | 110 + public/blog/tag/per-line/index.html | 212 ++ public/blog/tag/performance/feed/index.html | 106 + public/blog/tag/performance/index.html | 214 ++ .../feed/index.html | 62 + .../index.html | 212 ++ public/blog/tag/preview/feed/index.html | 85 + public/blog/tag/preview/index.html | 212 ++ public/blog/tag/productivity/feed/index.html | 151 ++ public/blog/tag/productivity/index.html | 212 ++ .../programming-productivity/feed/index.html | 151 ++ .../tag/programming-productivity/index.html | 212 ++ public/blog/tag/progress/feed/index.html | 104 + public/blog/tag/progress/index.html | 214 ++ public/blog/tag/radio/feed/index.html | 66 + public/blog/tag/radio/index.html | 212 ++ public/blog/tag/radios/feed/index.html | 66 + public/blog/tag/radios/index.html | 212 ++ public/blog/tag/read-only/feed/index.html | 94 + public/blog/tag/read-only/index.html | 214 ++ public/blog/tag/readonly/feed/index.html | 94 + public/blog/tag/readonly/index.html | 214 ++ public/blog/tag/refresh/feed/index.html | 64 + public/blog/tag/refresh/index.html | 212 ++ .../feed/index.html | 151 ++ .../index.html | 212 ++ public/blog/tag/rename/feed/index.html | 107 + public/blog/tag/rename/index.html | 212 ++ public/blog/tag/reorder/feed/index.html | 69 + public/blog/tag/reorder/index.html | 212 ++ public/blog/tag/reordering/feed/index.html | 69 + public/blog/tag/reordering/index.html | 212 ++ public/blog/tag/right/feed/index.html | 61 + public/blog/tag/right/index.html | 212 ++ public/blog/tag/rows/feed/index.html | 64 + public/blog/tag/rows/index.html | 212 ++ public/blog/tag/runtime/feed/index.html | 64 + public/blog/tag/runtime/index.html | 212 ++ public/blog/tag/save/feed/index.html | 125 ++ public/blog/tag/save/index.html | 212 ++ public/blog/tag/scroll/feed/index.html | 70 + public/blog/tag/scroll/index.html | 212 ++ public/blog/tag/scrollbar/feed/index.html | 70 + public/blog/tag/scrollbar/index.html | 212 ++ public/blog/tag/scrollbars/feed/index.html | 70 + public/blog/tag/scrollbars/index.html | 212 ++ public/blog/tag/scrolling/feed/index.html | 55 + public/blog/tag/scrolling/index.html | 212 ++ public/blog/tag/search/feed/index.html | 141 ++ public/blog/tag/search/index.html | 212 ++ public/blog/tag/searching/feed/index.html | 141 ++ public/blog/tag/searching/index.html | 212 ++ public/blog/tag/selection/feed/index.html | 116 ++ public/blog/tag/selection/index.html | 212 ++ public/blog/tag/separators/feed/index.html | 62 + public/blog/tag/separators/index.html | 212 ++ public/blog/tag/serialization/feed/index.html | 125 ++ public/blog/tag/serialization/index.html | 212 ++ public/blog/tag/serialize/feed/index.html | 125 ++ public/blog/tag/serialize/index.html | 212 ++ public/blog/tag/shadows/feed/index.html | 75 + public/blog/tag/shadows/index.html | 212 ++ public/blog/tag/size/feed/index.html | 100 + public/blog/tag/size/index.html | 214 ++ public/blog/tag/sizes/feed/index.html | 70 + public/blog/tag/sizes/index.html | 212 ++ public/blog/tag/sort/feed/index.html | 69 + public/blog/tag/sort/index.html | 212 ++ public/blog/tag/sorting/feed/index.html | 69 + public/blog/tag/sorting/index.html | 212 ++ public/blog/tag/space/feed/index.html | 158 ++ public/blog/tag/space/index.html | 216 ++ public/blog/tag/spacing/feed/index.html | 105 + public/blog/tag/spacing/index.html | 214 ++ public/blog/tag/specific/feed/index.html | 110 + public/blog/tag/specific/index.html | 212 ++ public/blog/tag/state/feed/index.html | 177 ++ public/blog/tag/state/index.html | 214 ++ public/blog/tag/store/feed/index.html | 125 ++ public/blog/tag/store/index.html | 212 ++ public/blog/tag/styles/feed/index.html | 71 + public/blog/tag/styles/index.html | 212 ++ public/blog/tag/sub-item/feed/index.html | 173 ++ public/blog/tag/sub-item/index.html | 218 ++ public/blog/tag/sub-items/feed/index.html | 101 + public/blog/tag/sub-items/index.html | 214 ++ public/blog/tag/sub/feed/index.html | 69 + public/blog/tag/sub/index.html | 212 ++ public/blog/tag/subitem/feed/index.html | 130 ++ public/blog/tag/subitem/index.html | 216 ++ public/blog/tag/subitems/feed/index.html | 138 ++ public/blog/tag/subitems/index.html | 216 ++ public/blog/tag/support/feed/index.html | 64 + public/blog/tag/support/index.html | 212 ++ public/blog/tag/text/feed/index.html | 110 + public/blog/tag/text/index.html | 214 ++ public/blog/tag/theme/feed/index.html | 64 + public/blog/tag/theme/index.html | 212 ++ public/blog/tag/themes/feed/index.html | 71 + public/blog/tag/themes/index.html | 212 ++ .../blog/tag/thumbnail-view/feed/index.html | 75 + public/blog/tag/thumbnail-view/index.html | 212 ++ public/blog/tag/thumbnail/feed/index.html | 84 + public/blog/tag/thumbnail/index.html | 212 ++ .../blog/tag/thumbnailbrowser/feed/index.html | 84 + public/blog/tag/thumbnailbrowser/index.html | 212 ++ .../blog/tag/thumbnails-view/feed/index.html | 75 + public/blog/tag/thumbnails-view/index.html | 212 ++ public/blog/tag/thumbnails/feed/index.html | 130 ++ public/blog/tag/thumbnails/index.html | 214 ++ .../blog/tag/tips-and-tricks/feed/index.html | 55 + public/blog/tag/tips-and-tricks/index.html | 212 ++ public/blog/tag/tracking/feed/index.html | 154 ++ public/blog/tag/tracking/index.html | 212 ++ .../feed/index.html | 85 + .../tag/tree-structure-in-listview/index.html | 212 ++ public/blog/tag/tree/feed/index.html | 133 ++ public/blog/tag/tree/index.html | 214 ++ public/blog/tag/treeview/feed/index.html | 94 + public/blog/tag/treeview/index.html | 212 ++ public/blog/tag/underline/feed/index.html | 154 ++ public/blog/tag/underline/index.html | 212 ++ public/blog/tag/update/feed/index.html | 115 ++ public/blog/tag/update/index.html | 214 ++ public/blog/tag/variable/feed/index.html | 59 + public/blog/tag/variable/index.html | 212 ++ public/blog/tag/vertical/feed/index.html | 72 + public/blog/tag/vertical/index.html | 212 ++ public/blog/tag/view/feed/index.html | 59 + public/blog/tag/view/index.html | 212 ++ public/blog/tag/visibility/feed/index.html | 69 + public/blog/tag/visibility/index.html | 212 ++ public/blog/tag/visible/feed/index.html | 91 + public/blog/tag/visible/index.html | 214 ++ public/blog/tag/visual/feed/index.html | 71 + public/blog/tag/visual/index.html | 212 ++ public/blog/tag/whats-new/feed/index.html | 97 + public/blog/tag/whats-new/index.html | 214 ++ public/blog/tag/width/feed/index.html | 70 + public/blog/tag/width/index.html | 212 ++ public/blog/tag/winforms/feed/index.html | 84 + public/blog/tag/winforms/index.html | 212 ++ public/blog/tag/work-focus/feed/index.html | 151 ++ public/blog/tag/work-focus/index.html | 212 ++ public/blog/tag/working-on/feed/index.html | 104 + public/blog/tag/working-on/index.html | 214 ++ public/blog/tag/wrapping/feed/index.html | 72 + public/blog/tag/wrapping/index.html | 212 ++ public/blog/tag/xp/feed/index.html | 106 + public/blog/tag/xp/index.html | 214 ++ public/blog/tag/zen-coder/feed/index.html | 151 ++ public/blog/tag/zen-coder/index.html | 212 ++ public/blog/tag/zen-habits/feed/index.html | 151 ++ public/blog/tag/zen-habits/index.html | 212 ++ public/blog/tag/zen/feed/index.html | 151 ++ public/blog/tag/zen/index.html | 212 ++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../feed/index.html | 39 + .../index.html?replytocom=1092.html | 313 +++ .../feed/index.html | 26 + .../feed/index.html | 26 + .../plugins/akismet/_inc/form.js?ver=4.0.8 | 30 + .../componentowl/images/arrow-bullet.gif | Bin 0 -> 207 bytes .../themes/componentowl/images/bg.png | Bin 0 -> 258 bytes .../themes/componentowl/images/footer-bg.png | Bin 0 -> 304 bytes .../componentowl/images/icons/lightbulb.gif | Bin 0 -> 569 bytes .../themes/componentowl/images/rss.png | Bin 0 -> 1510 bytes .../themes/componentowl/images/search.gif | Bin 0 -> 409 bytes .../themes/componentowl/images/ss-bg.gif.html | 580 ++++++ .../themes/componentowl/images/twitter.png | Bin 0 -> 1367 bytes .../themes/componentowl/javascripts/theme.js | 32 + .../wp-content/themes/componentowl/style.css | 797 +++++++ .../uploads/2011/01/is-full-300x229.jpg | Bin 0 -> 23361 bytes .../wp-content/uploads/2011/01/is-full.jpg | Bin 0 -> 146683 bytes .../uploads/2011/01/is-highlight-300x229.jpg | Bin 0 -> 20401 bytes .../uploads/2011/01/is-highlight.jpg | Bin 0 -> 122327 bytes .../uploads/2011/01/stdl-full-300x206.jpg | Bin 0 -> 21672 bytes .../wp-content/uploads/2011/01/stdl-full.jpg | Bin 0 -> 128097 bytes .../2011/01/stdl-highlight-300x206.jpg | Bin 0 -> 18713 bytes .../uploads/2011/01/stdl-highlight.jpg | Bin 0 -> 108936 bytes .../uploads/2011/02/borders-150x150.jpg | Bin 0 -> 11270 bytes .../uploads/2011/02/borders-300x300.jpg | Bin 0 -> 30882 bytes .../wp-content/uploads/2011/02/borders.jpg | Bin 0 -> 54165 bytes .../2011/02/extra-graphics-150x150.png | Bin 0 -> 27816 bytes .../2011/02/extra-graphics-300x300.png | Bin 0 -> 57356 bytes .../uploads/2011/02/extra-graphics.png | Bin 0 -> 15189 bytes .../uploads/2011/02/screenshot-300x196.jpg | Bin 0 -> 20013 bytes .../wp-content/uploads/2011/02/screenshot.jpg | Bin 0 -> 83305 bytes .../uploads/2011/03/screen-styles-238x300.png | Bin 0 -> 84442 bytes .../uploads/2011/03/screen-styles.png | Bin 0 -> 13311 bytes .../uploads/2011/05/cowl-blog-1-300x176.png | Bin 0 -> 40544 bytes .../uploads/2011/05/cowl-blog-1.png | Bin 0 -> 23915 bytes .../uploads/2011/05/cowl-blog-2-300x134.png | Bin 0 -> 28071 bytes .../uploads/2011/05/cowl-blog-2.png | Bin 0 -> 9563 bytes .../uploads/2011/05/cowl-blog-3-300x103.png | Bin 0 -> 22536 bytes .../uploads/2011/05/cowl-blog-3.png | Bin 0 -> 9378 bytes .../uploads/2011/05/cowl-blog-4-300x61.png | Bin 0 -> 16099 bytes .../uploads/2011/05/cowl-blog-4.png | Bin 0 -> 7437 bytes .../uploads/2011/05/cowl-blog-5.png | Bin 0 -> 4469 bytes .../2011/06/blv-thumbnails-2-300x242.jpg | Bin 0 -> 18959 bytes .../uploads/2011/06/blv-thumbnails-2.jpg | Bin 0 -> 91810 bytes .../2011/06/blv-thumbnails-300x242.jpg | Bin 0 -> 24144 bytes .../uploads/2011/06/blv-thumbnails.jpg | Bin 0 -> 111239 bytes .../06/list-view-drag-drop-reordering-1.png | Bin 0 -> 14924 bytes .../06/list-view-drag-drop-reordering-2.png | Bin 0 -> 13437 bytes .../07/betterlistview2-overview1-300x279.png | Bin 0 -> 93559 bytes .../2011/07/betterlistview2-overview1.png | Bin 0 -> 171221 bytes .../07/betterlistview2-overview2-300x262.png | Bin 0 -> 82674 bytes .../2011/07/betterlistview2-overview2.png | Bin 0 -> 209300 bytes .../07/betterlistview2-overview3-300x280.png | Bin 0 -> 71809 bytes .../2011/07/betterlistview2-overview3.png | Bin 0 -> 40647 bytes .../uploads/2011/07/blv-aero-300x213.png | Bin 0 -> 49645 bytes .../wp-content/uploads/2011/07/blv-aero.png | Bin 0 -> 22378 bytes .../uploads/2011/07/blv-classic-300x213.png | Bin 0 -> 53551 bytes .../uploads/2011/07/blv-classic.png | Bin 0 -> 14976 bytes .../uploads/2011/07/blv-luna-300x213.png | Bin 0 -> 55549 bytes .../wp-content/uploads/2011/07/blv-luna.png | Bin 0 -> 16803 bytes .../2011/08/blv-fileexplorersample.png | Bin 0 -> 48457 bytes .../uploads/2011/08/column-hide-after.png | Bin 0 -> 4015 bytes .../2011/08/column-hide-before-300x82.png | Bin 0 -> 18859 bytes .../uploads/2011/08/column-hide-before.png | Bin 0 -> 5268 bytes .../uploads/2011/09/2611677_345f676344.jpg | Bin 0 -> 15339 bytes .../uploads/2011/09/vs-error-list-300x111.png | Bin 0 -> 4072 bytes .../uploads/2011/09/vs-error-list.png | Bin 0 -> 5776 bytes .../uploads/2011/10/samples-cs-vb-300x80.png | Bin 0 -> 24092 bytes .../uploads/2011/10/samples-cs-vb.png | Bin 0 -> 8909 bytes ...creen-keep-selection-highlight-300x178.png | Bin 0 -> 30893 bytes .../11/screen-keep-selection-highlight.png | Bin 0 -> 15393 bytes .../uploads/2011/11/screen-multi-line-2.png | Bin 0 -> 7940 bytes .../11/screen-multiple-hot-items-300x176.png | Bin 0 -> 36398 bytes .../2011/11/screen-multiple-hot-items.png | Bin 0 -> 13705 bytes .../2011/11/screen-wrapping-300x70.png | Bin 0 -> 21599 bytes .../uploads/2011/11/screen-wrapping.png | Bin 0 -> 4548 bytes .../2011/11/screenshot-newlines-295x300.png | Bin 0 -> 95081 bytes .../uploads/2011/11/screenshot-newlines.png | Bin 0 -> 14369 bytes ...text-formatting-vertical-align-300x264.png | Bin 0 -> 45060 bytes .../11/text-formatting-vertical-align.png | Bin 0 -> 19174 bytes .../2011/12/screen-dynamic-300x157.gif | Bin 0 -> 8426 bytes .../uploads/2011/12/screen-dynamic.gif | Bin 0 -> 15242 bytes .../uploads/2012/01/blv-combineditems1.png | Bin 0 -> 12524 bytes .../uploads/2012/01/blv-combineditems2.png | Bin 0 -> 13870 bytes .../2012/01/blv-nonselectable-1-150x150.png | Bin 0 -> 20239 bytes .../2012/01/blv-nonselectable-1-300x300.png | Bin 0 -> 68325 bytes .../uploads/2012/01/blv-nonselectable-1.png | Bin 0 -> 13640 bytes .../2012/01/blv-nonselectable-2-150x150.png | Bin 0 -> 23105 bytes .../2012/01/blv-nonselectable-2-300x300.png | Bin 0 -> 80265 bytes .../uploads/2012/01/blv-nonselectable-2.png | Bin 0 -> 18566 bytes .../2012/01/blv-readonly-1-300x229.png | Bin 0 -> 51071 bytes .../uploads/2012/01/blv-readonly-1.png | Bin 0 -> 10634 bytes .../2012/01/blv-readonly-2-300x229.png | Bin 0 -> 47002 bytes .../uploads/2012/01/blv-readonly-2.png | Bin 0 -> 7567 bytes .../2012/01/blv-readonly-3-300x229.png | Bin 0 -> 47445 bytes .../uploads/2012/01/blv-readonly-3.png | Bin 0 -> 8972 bytes .../2012/01/blv-showdefaultgroup1-300x202.png | Bin 0 -> 34247 bytes .../uploads/2012/01/blv-showdefaultgroup1.png | Bin 0 -> 12384 bytes .../2012/01/blv-showdefaultgroup2-300x202.png | Bin 0 -> 33294 bytes .../uploads/2012/01/blv-showdefaultgroup2.png | Bin 0 -> 12005 bytes .../uploads/2012/01/metadata-view-194x300.png | Bin 0 -> 44429 bytes .../uploads/2012/01/metadata-view.png | Bin 0 -> 21366 bytes .../2012/02/blv-invisibleitems-257x300.gif | Bin 0 -> 13369 bytes .../uploads/2012/02/blv-invisibleitems.gif | Bin 0 -> 17997 bytes .../2012/02/distraction-junkie-coder.png.png | Bin 0 -> 86092 bytes .../wp-content/uploads/2012/02/zen-coder.png | Bin 0 -> 39052 bytes .../uploads/2012/03/blv-customheight.png | Bin 0 -> 5164 bytes .../2012/03/screen-custom-spacing-150x150.png | Bin 0 -> 14637 bytes .../uploads/2012/03/screen-custom-spacing.png | Bin 0 -> 10128 bytes .../2012/03/screen-pixel-share-300x158.png | Bin 0 -> 34288 bytes .../uploads/2012/03/screen-pixel-share.png | Bin 0 -> 14629 bytes .../2012/04/blv-embedded-1-300x136.png | Bin 0 -> 24549 bytes .../uploads/2012/04/blv-embedded-1.png | Bin 0 -> 5684 bytes .../uploads/2012/04/blv-embedded-2.png | Bin 0 -> 3638 bytes .../2012/04/rightalign-group2-300x261.png | Bin 0 -> 40329 bytes .../uploads/2012/04/rightalign-group2.png | Bin 0 -> 13941 bytes .../wp-content/uploads/2012/04/rightalign.png | Bin 0 -> 5344 bytes .../wp-content/uploads/2012/08/anigif.gif | Bin 0 -> 15636 bytes .../uploads/2012/09/custom-selection.png | Bin 0 -> 3824 bytes .../uploads/2012/12/chapter-drag-drop.html | 580 ++++++ .../2012/12/chapter-embedded-controls.html | 719 +++++++ .../uploads/2012/12/chapter-empty-text.html | 580 ++++++ .../uploads/2012/12/chapter-label-edit.html | 580 ++++++ .../uploads/2012/12/embedded-control.png.html | 580 ++++++ .../wp-content/uploads/2012/12/label-edit.gif | Bin 0 -> 39966 bytes .../uploads/2012/12/lang-vb.js.html | 580 ++++++ .../uploads/2012/12/prettify.css.html | 580 ++++++ .../uploads/2012/12/prettify.js.html | 580 ++++++ .../wp-content/uploads/2012/12/style.css.html | 580 ++++++ .../wp-content/uploads/2012/12/w8-theme.jpg | Bin 0 -> 73061 bytes .../blog/wp-content/uploads/2012/index.html | 580 ++++++ .../uploads/2012/resources/main.css.html | 580 ++++++ .../uploads/2012/resources/overview.gif.html | 580 ++++++ .../uploads/2013/01/chapter-save-load.html | 580 ++++++ .../uploads/2013/01/chapter-search.html | 238 +++ .../2013/01/chapter-serialization.html | 580 ++++++ .../uploads/2013/01/lang-vb.js.html | 580 ++++++ .../uploads/2013/01/prettify.css.html | 580 ++++++ .../uploads/2013/01/prettify.js.html | 580 ++++++ .../wp-content/uploads/2013/01/properties.png | Bin 0 -> 18843 bytes .../uploads/2013/01/screen-blv-binding1.png | Bin 0 -> 3827 bytes .../uploads/2013/01/screen-blv-binding2.png | Bin 0 -> 3817 bytes .../uploads/2013/01/screen-blv-binding3.png | Bin 0 -> 7420 bytes .../uploads/2013/01/search-highlight-1.gif | Bin 0 -> 28169 bytes .../uploads/2013/01/search-highlight-2.gif | Bin 0 -> 21609 bytes .../wp-content/uploads/2013/01/style.css.html | 580 ++++++ .../uploads/2013/02/chapter-multi-line.html | 580 ++++++ .../uploads/2013/02/chapter-owner-draw.html | 334 +++ .../uploads/2013/02/chapter-performance.html | 580 ++++++ .../uploads/2013/02/hot-item-backcolor.gif | Bin 0 -> 50190 bytes .../uploads/2013/02/lang-vb.js.html | 580 ++++++ .../uploads/2013/02/owner-draw.png.html | 580 ++++++ .../uploads/2013/02/prettify.css.html | 580 ++++++ .../uploads/2013/02/prettify.js.html | 580 ++++++ .../wp-content/uploads/2013/02/style.css.html | 580 ++++++ .../wp-content/uploads/2013/03/blv-fading.png | Bin 0 -> 4097 bytes .../uploads/2013/03/blv-scroll-size.png | Bin 0 -> 9032 bytes .../blog/wp-content/uploads/2013/index.html | 580 ++++++ .../uploads/2013/resources/main.css.html | 580 ++++++ .../uploads/2013/resources/overview.gif.html | 580 ++++++ .../blog/wp-content/uploads/2014/02/image.gif | Bin 0 -> 5322 bytes .../uploads/2014/04/blv-alternating-rows.png | Bin 0 -> 2442 bytes .../uploads/2014/04/blv-gridlines-1.png | Bin 0 -> 4237 bytes .../uploads/2014/04/blv-gridlines-2.png | Bin 0 -> 4277 bytes .../2014/07/blv-sub-item-checkboxes.png | Bin 0 -> 3077 bytes .../uploads/2014/08/blv-overlay.png | Bin 0 -> 27840 bytes .../js/comment-reply.min.js?ver=4.9.8 | 1 + .../js/jquery/jquery-migrate.min.js?ver=1.4.1 | 2 + .../js/jquery/jquery.js?ver=1.12.4 | 6 + .../wp-includes/js/wp-embed.min.js?ver=4.9.8 | 1 + public/blog/wp-includes/wlwmanifest.xml | 43 + public/blog/wp-json/index.html | 1 + ...s-and-how-to-solve-them%2F&format=xml.html | 580 ++++++ ...ation-issues-and-how-to-solve-them%2F.html | 580 ++++++ ...rows-in-better-listview%2F&format=xml.html | 580 ++++++ ...lternating-rows-in-better-listview%2F.html | 580 ++++++ ...-listview-1-50-released%2F&format=xml.html | 580 ++++++ ...og%2Fbetter-listview-1-50-released%2F.html | 580 ++++++ ...-listview-1-52-released%2F&format=xml.html | 580 ++++++ ...og%2Fbetter-listview-1-52-released%2F.html | 580 ++++++ ...iew-2-0-samples-preview%2F&format=xml.html | 580 ++++++ ...etter-listview-2-0-samples-preview%2F.html | 580 ++++++ ...m-hierarchy-groups-more%2F&format=xml.html | 580 ++++++ ...ak-peek-item-hierarchy-groups-more%2F.html | 580 ++++++ ...-listview-2-00-released%2F&format=xml.html | 580 ++++++ ...og%2Fbetter-listview-2-00-released%2F.html | 580 ++++++ ...or-features-and-testing%2F&format=xml.html | 580 ++++++ ...ns-done-minor-features-and-testing%2F.html | 580 ++++++ ...-listview-2-10-released%2F&format=xml.html | 580 ++++++ ...og%2Fbetter-listview-2-10-released%2F.html | 580 ++++++ ...etter-listview-released%2F&format=xml.html | 580 ++++++ ...%2Fblog%2Fbetter-listview-released%2F.html | 580 ++++++ ...t-devproconnections-com%2F&format=xml.html | 580 ++++++ ...-reviewed-at-devproconnections-com%2F.html | 580 ++++++ ...o-draw-custom-selection%2F&format=xml.html | 580 ++++++ ...w-tip-how-to-draw-custom-selection%2F.html | 580 ++++++ ...wser-component-released%2F&format=xml.html | 580 ++++++ ...umbnail-browser-component-released%2F.html | 580 ++++++ ...ages-in-better-listview%2F&format=xml.html | 580 ++++++ ...Fbinding-images-in-better-listview%2F.html | 580 ++++++ ...v-and-internet-explorer%2F&format=xml.html | 580 ++++++ ...2Fblog%2Fblv-and-internet-explorer%2F.html | 580 ++++++ ...tter-listview-sub-items%2F&format=xml.html | 580 ++++++ ...mages-in-better-listview-sub-items%2F.html | 580 ++++++ ...tems-in-better-listview%2F&format=xml.html | 580 ++++++ ...Fcombined-items-in-better-listview%2F.html | 580 ++++++ ...timized-for-performance%2F&format=xml.html | 580 ++++++ ...view-2-1-optimized-for-performance%2F.html | 580 ++++++ ...ders-in-better-listview%2F&format=xml.html | 580 ++++++ ...f-group-headers-in-better-listview%2F.html | 580 ++++++ ...view-of-better-listview%2F&format=xml.html | 580 ++++++ ...in-details-view-of-better-listview%2F.html | 580 ++++++ ...sion-in-better-listview%2F&format=xml.html | 580 ++++++ ...thout-extension-in-better-listview%2F.html | 580 ++++++ ...size-in-better-listview%2F&format=xml.html | 580 ++++++ ...scroll-bar-size-in-better-listview%2F.html | 580 ++++++ ...n-items-in-details-view%2F&format=xml.html | 580 ++++++ ...cing-between-items-in-details-view%2F.html | 580 ++++++ ...line-in-better-listview%2F&format=xml.html | 580 ++++++ ...l-for-each-line-in-better-listview%2F.html | 580 ++++++ ...ths-borders-and-shadows%2F&format=xml.html | 580 ++++++ ...umbnails-withs-borders-and-shadows%2F.html | 580 ++++++ ...iline-items-in-listview%2F&format=xml.html | 580 ++++++ ...playingmultiline-items-in-listview%2F.html | 580 ++++++ ...ight-in-better-listview%2F&format=xml.html | 580 ++++++ ...earch-highlight-in-better-listview%2F.html | 580 ++++++ ...er-with-better-listview%2F&format=xml.html | 580 ++++++ ...file-explorer-with-better-listview%2F.html | 580 ++++++ ...ders-in-better-listview%2F&format=xml.html | 580 ++++++ ...-column-headers-in-better-listview%2F.html | 580 ++++++ ...tems-in-better-listview%2F&format=xml.html | 580 ++++++ ...%2Fhiding-items-in-better-listview%2F.html | 580 ++++++ ...tems-in-better-listview%2F&format=xml.html | 580 ++++++ ...-tracking-items-in-better-listview%2F.html | 580 ++++++ ...pace-in-better-listview%2F&format=xml.html | 580 ++++++ ...-in-empty-space-in-better-listview%2F.html | 580 ++++++ ...ouse-wheel-scroll-speed%2F&format=xml.html | 580 ++++++ ...list-view-mouse-wheel-scroll-speed%2F.html | 580 ++++++ ...-items-in-custom-states%2F&format=xml.html | 580 ++++++ ...-to-display-items-in-custom-states%2F.html | 580 ++++++ ...lly-resize-focused-item%2F&format=xml.html | 580 ++++++ ...to-dynamically-resize-focused-item%2F.html | 580 ++++++ ...lumn-in-better-listview%2F&format=xml.html | 580 ++++++ ...o-hide-a-column-in-better-listview%2F.html | 580 ++++++ ...dges-in-better-listview%2F&format=xml.html | 580 ++++++ ...fading-on-edges-in-better-listview%2F.html | 580 ++++++ ...n-a-string-user-request%2F&format=xml.html | 580 ++++++ ...w-content-in-a-string-user-request%2F.html | 580 ++++++ ...-drop-item-reorder-sort%2F&format=xml.html | 580 ++++++ ...ew-drag-and-drop-item-reorder-sort%2F.html | 580 ++++++ ...tems-in-better-listview%2F&format=xml.html | 580 ++++++ ...electable-items-in-better-listview%2F.html | 580 ++++++ ...mode-in-better-listview%2F&format=xml.html | 580 ++++++ ...Fread-only-mode-in-better-listview%2F.html | 580 ++++++ ...ages-in-better-listview%2F&format=xml.html | 580 ++++++ ...-aligned-images-in-better-listview%2F.html | 580 ++++++ ...ring-in-better-listview%2F&format=xml.html | 580 ++++++ ...earch-filtering-in-better-listview%2F.html | 580 ++++++ ...oxes-in-better-listview%2F&format=xml.html | 580 ++++++ ...tem-check-boxes-in-better-listview%2F.html | 580 ++++++ ...ew-and-our-applications%2F&format=xml.html | 580 ++++++ ...tter-listview-and-our-applications%2F.html | 580 ++++++ ...item-hierarchy-features%2F&format=xml.html | 580 ++++++ ...groups-and-item-hierarchy-features%2F.html | 580 ++++++ ...e-classic-net-framework%2F&format=xml.html | 580 ++++++ ...has-over-the-classic-net-framework%2F.html | 580 ++++++ ...ping-in-better-listview%2F&format=xml.html | 580 ++++++ ...d-text-wrapping-in-better-listview%2F.html | 580 ++++++ ...-item-hierarchy-support%2F&format=xml.html | 580 ++++++ ...g-on-groups-item-hierarchy-support%2F.html | 580 ++++++ ...port-in-better-listview%2F&format=xml.html | 580 ++++++ ...s-theme-support-in-better-listview%2F.html | 580 ++++++ ...r-vs-distraction-junkie%2F&format=xml.html | 580 ++++++ ...%2Fzen-coder-vs-distraction-junkie%2F.html | 580 ++++++ public/blog/xmlrpc.php.html | 580 ++++++ public/blog/xmlrpc.php?rsd | 14 + .../feed/index.html | 161 ++ .../index.html?replytocom=1217.html | 1188 +++++++++++ .../index.html?replytocom=1218.html | 1188 +++++++++++ .../index.html?replytocom=1219.html | 1188 +++++++++++ .../index.html?replytocom=1220.html | 1188 +++++++++++ .../index.html?replytocom=1221.html | 1188 +++++++++++ .../index.html?replytocom=1222.html | 1188 +++++++++++ .../index.html?replytocom=1224.html | 1188 +++++++++++ .../index.html?replytocom=1225.html | 1188 +++++++++++ .../index.html?replytocom=1226.html | 1188 +++++++++++ .../index.html?replytocom=1227.html | 1188 +++++++++++ .../index.html?replytocom=1228.html | 1188 +++++++++++ .../index.html?replytocom=1229.html | 1188 +++++++++++ .../index.html?replytocom=1232.html | 1188 +++++++++++ .../index.html?replytocom=1233.html | 1188 +++++++++++ .../index.html?replytocom=1234.html | 1188 +++++++++++ .../index.html?replytocom=1235.html | 1188 +++++++++++ .../index.html?replytocom=1236.html | 1188 +++++++++++ .../index.html?replytocom=1237.html | 1188 +++++++++++ .../index.html?replytocom=1238.html | 1188 +++++++++++ .../index.html?replytocom=1239.html | 1188 +++++++++++ .../index.html?replytocom=1241.html | 1188 +++++++++++ .../index.html?replytocom=1242.html | 1188 +++++++++++ .../index.html?replytocom=1243.html | 1188 +++++++++++ .../index.html?replytocom=1244.html | 1188 +++++++++++ .../index.html?replytocom=1245.html | 1188 +++++++++++ .../index.html?replytocom=1246.html | 1188 +++++++++++ .../index.html?replytocom=1247.html | 1188 +++++++++++ .../index.html?replytocom=1248.html | 1188 +++++++++++ .../index.html?replytocom=1249.html | 1188 +++++++++++ .../index.html?replytocom=1250.html | 1188 +++++++++++ .../index.html?replytocom=1251.html | 1188 +++++++++++ .../index.html?replytocom=1252.html | 1188 +++++++++++ .../index.html?replytocom=1253.html | 1188 +++++++++++ .../index.html?replytocom=1254.html | 1188 +++++++++++ .../index.html?replytocom=1255.html | 1188 +++++++++++ .../index.html?replytocom=1256.html | 1188 +++++++++++ .../index.html?replytocom=1257.html | 1188 +++++++++++ .../index.html?replytocom=1258.html | 1188 +++++++++++ .../index.html?replytocom=1259.html | 1188 +++++++++++ .../index.html?replytocom=1262.html | 1188 +++++++++++ .../index.html?replytocom=1263.html | 1188 +++++++++++ .../index.html?replytocom=1264.html | 1188 +++++++++++ .../index.html?replytocom=1265.html | 1188 +++++++++++ .../index.html?replytocom=1266.html | 1188 +++++++++++ .../index.html?replytocom=1269.html | 1188 +++++++++++ .../index.html?replytocom=1270.html | 1188 +++++++++++ .../index.html?replytocom=1272.html | 1188 +++++++++++ .../index.html?replytocom=1273.html | 1188 +++++++++++ .../index.html?replytocom=1274.html | 1188 +++++++++++ .../index.html?replytocom=1275.html | 1188 +++++++++++ .../index.html?replytocom=1282.html | 1188 +++++++++++ .../index.html?replytocom=1283.html | 1188 +++++++++++ .../index.html?replytocom=1288.html | 1188 +++++++++++ .../index.html?replytocom=1365.html | 1188 +++++++++++ .../index.html?replytocom=1397.html | 1188 +++++++++++ "public/download/\\\".html" | 580 ++++++ public/download/better-listview.html | 276 +++ public/javascripts/app_packaged.js?1455269826 | 16 + public/javascripts/dextronet.js | 200 ++ .../javascripts/plugins/jquery.validation.js | 49 + public/sitemap.html | 398 ++++ .../base_packaged.css?1455269822.css | 1 + 1036 files changed, 277162 insertions(+) create mode 100644 public/articles.html create mode 100644 "public/articles/\\\".html" create mode 100644 public/articles/visual-studio-toolbox-control-integration.html create mode 100644 public/better-listview-express.html create mode 100644 "public/better-listview-express/\\\".html" create mode 100644 public/better-listview-express/comparison-with-full-version.html create mode 100644 public/better-listview-express/documentation.html create mode 100644 public/better-listview-express/quick-start-guide.html create mode 100644 public/better-listview-express/releases?since=3.14.0.html create mode 100644 public/blog/2011/01/index.html create mode 100644 public/blog/2011/02/displaying-thumbnails-withs-borders-and-shadows/index.html create mode 100644 public/blog/2011/02/index.html create mode 100644 public/blog/2011/02/page/2/index.html create mode 100644 public/blog/2011/02/what-we-are-working-on-groups-item-hierarchy-support/index.html create mode 100644 public/blog/2011/03/index.html create mode 100644 public/blog/2011/03/page/2/index.html create mode 100644 public/blog/2011/05/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/index.html create mode 100644 public/blog/2011/05/index.html create mode 100644 public/blog/2011/06/index.html create mode 100644 public/blog/2011/07/index.html create mode 100644 public/blog/2011/07/windows-theme-support-in-better-listview/index.html create mode 100644 public/blog/2011/08/index.html create mode 100644 public/blog/2011/09/index.html create mode 100644 public/blog/2011/10/index.html create mode 100644 public/blog/2011/11/index.html create mode 100644 public/blog/2011/11/page/2/index.html create mode 100644 public/blog/2011/11/vertical-alignment-and-text-wrapping-in-better-listview/index.html create mode 100644 public/blog/2011/12/how-to-dynamically-resize-focused-item/index.html create mode 100644 public/blog/2011/12/index.html create mode 100644 public/blog/2012/01/index.html create mode 100644 public/blog/2012/01/page/2/index.html create mode 100644 public/blog/2012/01/read-only-mode-in-better-listview/index.html create mode 100644 public/blog/2012/02/index.html create mode 100644 public/blog/2012/03/index.html create mode 100644 public/blog/2012/04/index.html create mode 100644 public/blog/2012/08/index.html create mode 100644 public/blog/2012/09/index.html create mode 100644 public/blog/2012/12/index.html create mode 100644 public/blog/2013/01/index.html create mode 100644 public/blog/2013/02/index.html create mode 100644 public/blog/2013/03/index.html create mode 100644 public/blog/2014/02/index.html create mode 100644 public/blog/2014/04/index.html create mode 100644 public/blog/2014/07/index.html create mode 100644 public/blog/2014/08/index.html create mode 100644 public/blog/2016/11/index.html create mode 100644 public/blog/2017/02/index.html create mode 100644 public/blog/2017/03/index.html create mode 100644 public/blog/activation-issues-and-how-to-solve-them/feed/index.html create mode 100644 public/blog/alternating-rows-in-better-listview/feed/index.html create mode 100644 public/blog/better-listview-1-50-released/feed/index.html create mode 100644 public/blog/better-listview-1-52-released/feed/index.html create mode 100644 public/blog/better-listview-2-0-samples-preview/feed/index.html create mode 100644 public/blog/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/feed/index.html create mode 100644 public/blog/better-listview-2-00-released/feed/index.html create mode 100644 public/blog/better-listview-2-1-optimizations-done-minor-features-and-testing/feed/index.html create mode 100644 public/blog/better-listview-2-10-released/feed/index.html create mode 100644 public/blog/better-listview-released/feed/index.html create mode 100644 public/blog/better-listview-reviewed-at-devproconnections-com/feed/index.html create mode 100644 public/blog/better-listview-tip-how-to-draw-custom-selection/feed/index.html create mode 100644 public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1285.html create mode 100644 public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1286.html create mode 100644 public/blog/better-thumbnail-browser-component-released/feed/index.html create mode 100644 public/blog/better-thumbnail-browser-component-released/index.html?replytocom=1289.html create mode 100644 public/blog/binding-images-in-better-listview/feed/index.html create mode 100644 public/blog/blv-and-internet-explorer/feed/index.html create mode 100644 public/blog/category/announcements/feed/index.html create mode 100644 public/blog/category/announcements/index.html create mode 100644 public/blog/category/better-listview/feed/index.html create mode 100644 public/blog/category/better-listview/index.html create mode 100644 public/blog/category/components/feed/index.html create mode 100644 public/blog/category/components/index.html create mode 100644 public/blog/category/programming/feed/index.html create mode 100644 public/blog/category/programming/index.html create mode 100644 public/blog/category/tutorials/feed/index.html create mode 100644 public/blog/category/tutorials/index.html create mode 100644 public/blog/centering-images-in-better-listview-sub-items/feed/index.html create mode 100644 public/blog/combined-items-in-better-listview/feed/index.html create mode 100644 public/blog/coming-soon-better-listview-2-1-optimized-for-performance/feed/index.html create mode 100644 public/blog/comments/feed/index.html create mode 100644 public/blog/custom-behavior-of-group-headers-in-better-listview/feed/index.html create mode 100644 public/blog/custom-item-height-in-details-view-of-better-listview/feed/index.html create mode 100644 public/blog/custom-label-edit-how-to-rename-file-names-without-extension-in-better-listview/feed/index.html create mode 100644 public/blog/custom-scroll-bar-size-in-better-listview/feed/index.html create mode 100644 public/blog/custom-scroll-bar-size-in-better-listview/index.html?replytocom=1340.html create mode 100644 public/blog/custom-scroll-bar-size-in-better-listview/index.html?replytocom=1344.html create mode 100644 public/blog/custom-scroll-bar-size-in-better-listview/index.html?replytocom=1345.html create mode 100644 public/blog/custom-scroll-bar-size-in-better-listview/index.html?replytocom=1346.html create mode 100644 public/blog/custom-spacing-between-items-in-details-view/feed/index.html create mode 100644 public/blog/customize-label-editing-embedded-control-for-each-line-in-better-listview/feed/index.html create mode 100644 public/blog/customize-label-editing-embedded-control-for-each-line-in-better-listview/index.html?replytocom=1280.html create mode 100644 public/blog/customize-label-editing-embedded-control-for-each-line-in-better-listview/index.html?replytocom=1281.html create mode 100644 public/blog/displaying-thumbnails-withs-borders-and-shadows/feed/index.html create mode 100644 public/blog/displayingmultiline-items-in-listview/feed/index.html create mode 100644 public/blog/enabling-search-highlight-in-better-listview/feed/index.html create mode 100644 public/blog/enabling-search-highlight-in-better-listview/index.html?replytocom=1290.html create mode 100644 public/blog/feed/index.html create mode 100644 public/blog/file-explorer-with-better-listview/feed/index.html create mode 100644 public/blog/hiding-column-headers-in-better-listview/feed/index.html create mode 100644 public/blog/hiding-items-in-better-listview/feed/index.html create mode 100644 public/blog/hot-tracking-items-in-better-listview/feed/index.html create mode 100644 public/blog/how-to-add-grid-lines-in-empty-space-in-better-listview/feed/index.html create mode 100644 public/blog/how-to-change-list-view-mouse-wheel-scroll-speed/feed/index.html create mode 100644 public/blog/how-to-display-items-in-custom-states/feed/index.html create mode 100644 public/blog/how-to-dynamically-resize-focused-item/feed/index.html create mode 100644 public/blog/how-to-hide-a-column-in-better-listview/feed/index.html create mode 100644 public/blog/how-to-make-items-fading-on-edges-in-better-listview/feed/index.html create mode 100644 public/blog/how-to-store-better-listview-content-in-a-string-user-request/feed/index.html create mode 100644 public/blog/index.html?p=103.html create mode 100644 public/blog/index.html?p=119.html create mode 100644 public/blog/index.html?p=129.html create mode 100644 public/blog/index.html?p=189.html create mode 100644 public/blog/index.html?p=204.html create mode 100644 public/blog/index.html?p=213.html create mode 100644 public/blog/index.html?p=232.html create mode 100644 public/blog/index.html?p=260.html create mode 100644 public/blog/index.html?p=278.html create mode 100644 public/blog/index.html?p=287.html create mode 100644 public/blog/index.html?p=304.html create mode 100644 public/blog/index.html?p=330.html create mode 100644 public/blog/index.html?p=34.html create mode 100644 public/blog/index.html?p=340.html create mode 100644 public/blog/index.html?p=348.html create mode 100644 public/blog/index.html?p=359.html create mode 100644 public/blog/index.html?p=373.html create mode 100644 public/blog/index.html?p=398.html create mode 100644 public/blog/index.html?p=40.html create mode 100644 public/blog/index.html?p=437.html create mode 100644 public/blog/index.html?p=450.html create mode 100644 public/blog/index.html?p=468.html create mode 100644 public/blog/index.html?p=476.html create mode 100644 public/blog/index.html?p=478.html create mode 100644 public/blog/index.html?p=480.html create mode 100644 public/blog/index.html?p=482.html create mode 100644 public/blog/index.html?p=546.html create mode 100644 public/blog/index.html?p=664.html create mode 100644 public/blog/index.html?p=753.html create mode 100644 public/blog/index.html?p=760.html create mode 100644 public/blog/index.html?p=771.html create mode 100644 public/blog/index.html?p=780.html create mode 100644 public/blog/index.html?p=796.html create mode 100644 public/blog/index.html?p=803.html create mode 100644 public/blog/index.html?p=808.html create mode 100644 public/blog/index.html?p=823.html create mode 100644 public/blog/index.html?p=831.html create mode 100644 public/blog/index.html?p=843.html create mode 100644 public/blog/index.html?p=850.html create mode 100644 public/blog/index.html?p=861.html create mode 100644 public/blog/index.html?p=868.html create mode 100644 public/blog/index.html?p=878.html create mode 100644 public/blog/index.html?p=882.html create mode 100644 public/blog/index.html?p=888.html create mode 100644 public/blog/index.html?p=894.html create mode 100644 public/blog/index.html?p=901.html create mode 100644 public/blog/index.html?p=906.html create mode 100644 public/blog/index.html?p=914.html create mode 100644 public/blog/index.html?p=921.html create mode 100644 public/blog/index.html?p=927.html create mode 100644 public/blog/index.html?p=93.html create mode 100644 public/blog/list-view-drag-and-drop-item-reorder-sort/feed/index.html create mode 100644 public/blog/non-selectable-items-in-better-listview/feed/index.html create mode 100644 public/blog/page/3/index.html create mode 100644 public/blog/page/4/index.html create mode 100644 public/blog/page/5/index.html create mode 100644 public/blog/page/6/index.html create mode 100644 public/blog/read-only-mode-in-better-listview/feed/index.html create mode 100644 public/blog/right-aligned-images-in-better-listview/feed/index.html create mode 100644 public/blog/search-filtering-in-better-listview/feed/index.html create mode 100644 public/blog/search-filtering-in-better-listview/index.html?replytocom=1353.html create mode 100644 public/blog/search-filtering-in-better-listview/index.html?replytocom=1369.html create mode 100644 public/blog/sub-item-check-boxes-in-better-listview/feed/index.html create mode 100644 public/blog/synergy-of-better-listview-and-our-applications/feed/index.html create mode 100644 public/blog/tag/1-52/feed/index.html create mode 100644 public/blog/tag/1-52/index.html create mode 100644 public/blog/tag/2-00/feed/index.html create mode 100644 public/blog/tag/2-00/index.html create mode 100644 public/blog/tag/2-01/feed/index.html create mode 100644 public/blog/tag/2-01/index.html create mode 100644 public/blog/tag/aero/feed/index.html create mode 100644 public/blog/tag/aero/index.html create mode 100644 public/blog/tag/align/feed/index.html create mode 100644 public/blog/tag/align/index.html create mode 100644 public/blog/tag/aligned/feed/index.html create mode 100644 public/blog/tag/aligned/index.html create mode 100644 public/blog/tag/alignment/feed/index.html create mode 100644 public/blog/tag/alignment/index.html create mode 100644 public/blog/tag/alternating/feed/index.html create mode 100644 public/blog/tag/alternating/index.html create mode 100644 public/blog/tag/backcolor/feed/index.html create mode 100644 public/blog/tag/backcolor/index.html create mode 100644 public/blog/tag/background/feed/index.html create mode 100644 public/blog/tag/background/index.html create mode 100644 public/blog/tag/bars/feed/index.html create mode 100644 public/blog/tag/bars/index.html create mode 100644 public/blog/tag/behavior/feed/index.html create mode 100644 public/blog/tag/behavior/index.html create mode 100644 public/blog/tag/below/feed/index.html create mode 100644 public/blog/tag/below/index.html create mode 100644 public/blog/tag/better-listview-2/feed/index.html create mode 100644 public/blog/tag/better-listview-2/index.html create mode 100644 public/blog/tag/better/feed/index.html create mode 100644 public/blog/tag/better/index.html create mode 100644 public/blog/tag/between/feed/index.html create mode 100644 public/blog/tag/between/index.html create mode 100644 public/blog/tag/bind/feed/index.html create mode 100644 public/blog/tag/bind/index.html create mode 100644 public/blog/tag/binding/feed/index.html create mode 100644 public/blog/tag/binding/index.html create mode 100644 public/blog/tag/borders/feed/index.html create mode 100644 public/blog/tag/borders/index.html create mode 100644 public/blog/tag/bound/feed/index.html create mode 100644 public/blog/tag/bound/index.html create mode 100644 public/blog/tag/boundaries/feed/index.html create mode 100644 public/blog/tag/boundaries/index.html create mode 100644 public/blog/tag/box/feed/index.html create mode 100644 public/blog/tag/box/index.html create mode 100644 public/blog/tag/boxes/feed/index.html create mode 100644 public/blog/tag/boxes/index.html create mode 100644 public/blog/tag/browser/feed/index.html create mode 100644 public/blog/tag/browser/index.html create mode 100644 public/blog/tag/buttons/feed/index.html create mode 100644 public/blog/tag/buttons/index.html create mode 100644 public/blog/tag/cell/feed/index.html create mode 100644 public/blog/tag/cell/index.html create mode 100644 public/blog/tag/cells/feed/index.html create mode 100644 public/blog/tag/cells/index.html create mode 100644 public/blog/tag/center/feed/index.html create mode 100644 public/blog/tag/center/index.html create mode 100644 public/blog/tag/changelog/feed/index.html create mode 100644 public/blog/tag/changelog/index.html create mode 100644 public/blog/tag/check/feed/index.html create mode 100644 public/blog/tag/check/index.html create mode 100644 public/blog/tag/checkbox/feed/index.html create mode 100644 public/blog/tag/checkbox/index.html create mode 100644 public/blog/tag/checkboxes/feed/index.html create mode 100644 public/blog/tag/checkboxes/index.html create mode 100644 public/blog/tag/child-items-in-listview/feed/index.html create mode 100644 public/blog/tag/child-items-in-listview/index.html create mode 100644 public/blog/tag/classic/feed/index.html create mode 100644 public/blog/tag/classic/index.html create mode 100644 public/blog/tag/clean-focus/feed/index.html create mode 100644 public/blog/tag/clean-focus/index.html create mode 100644 public/blog/tag/coder-productivity/feed/index.html create mode 100644 public/blog/tag/coder-productivity/index.html create mode 100644 public/blog/tag/collapse/feed/index.html create mode 100644 public/blog/tag/collapse/index.html create mode 100644 public/blog/tag/collapsible/feed/index.html create mode 100644 public/blog/tag/collapsible/index.html create mode 100644 public/blog/tag/color/feed/index.html create mode 100644 public/blog/tag/color/index.html create mode 100644 public/blog/tag/colored/feed/index.html create mode 100644 public/blog/tag/colored/index.html create mode 100644 public/blog/tag/colors/feed/index.html create mode 100644 public/blog/tag/colors/index.html create mode 100644 public/blog/tag/column/feed/index.html create mode 100644 public/blog/tag/column/index.html create mode 100644 public/blog/tag/columns/feed/index.html create mode 100644 public/blog/tag/columns/index.html create mode 100644 public/blog/tag/combined/feed/index.html create mode 100644 public/blog/tag/combined/index.html create mode 100644 public/blog/tag/coming-soon/feed/index.html create mode 100644 public/blog/tag/coming-soon/index.html create mode 100644 public/blog/tag/component/feed/index.html create mode 100644 public/blog/tag/component/index.html create mode 100644 public/blog/tag/computer-work/feed/index.html create mode 100644 public/blog/tag/computer-work/index.html create mode 100644 public/blog/tag/content/feed/index.html create mode 100644 public/blog/tag/content/index.html create mode 100644 public/blog/tag/control/feed/index.html create mode 100644 public/blog/tag/control/index.html create mode 100644 public/blog/tag/controls/feed/index.html create mode 100644 public/blog/tag/controls/index.html create mode 100644 public/blog/tag/crlf/feed/index.html create mode 100644 public/blog/tag/crlf/index.html create mode 100644 public/blog/tag/custom/feed/index.html create mode 100644 public/blog/tag/custom/index.html create mode 100644 public/blog/tag/customize-groups-in-listview/feed/index.html create mode 100644 public/blog/tag/customize-groups-in-listview/index.html create mode 100644 public/blog/tag/customize-list-view-group-headers/feed/index.html create mode 100644 public/blog/tag/customize-list-view-group-headers/index.html create mode 100644 public/blog/tag/customized/feed/index.html create mode 100644 public/blog/tag/customized/index.html create mode 100644 public/blog/tag/data/feed/index.html create mode 100644 public/blog/tag/data/index.html create mode 100644 public/blog/tag/databinding/feed/index.html create mode 100644 public/blog/tag/databinding/index.html create mode 100644 public/blog/tag/databound/feed/index.html create mode 100644 public/blog/tag/databound/index.html create mode 100644 public/blog/tag/default/feed/index.html create mode 100644 public/blog/tag/default/index.html create mode 100644 public/blog/tag/details/feed/index.html create mode 100644 public/blog/tag/details/index.html create mode 100644 public/blog/tag/different/feed/index.html create mode 100644 public/blog/tag/different/index.html create mode 100644 public/blog/tag/disable-item-selection/feed/index.html create mode 100644 public/blog/tag/disable-item-selection/index.html create mode 100644 public/blog/tag/disabled/feed/index.html create mode 100644 public/blog/tag/disabled/index.html create mode 100644 public/blog/tag/display-multiline/feed/index.html create mode 100644 public/blog/tag/display-multiline/index.html create mode 100644 public/blog/tag/display/feed/index.html create mode 100644 public/blog/tag/display/index.html create mode 100644 public/blog/tag/distraction-junkie/feed/index.html create mode 100644 public/blog/tag/distraction-junkie/index.html create mode 100644 public/blog/tag/distractions/feed/index.html create mode 100644 public/blog/tag/distractions/index.html create mode 100644 public/blog/tag/documentation/feed/index.html create mode 100644 public/blog/tag/documentation/index.html create mode 100644 public/blog/tag/drag-and-drop-item-reordering/feed/index.html create mode 100644 public/blog/tag/drag-and-drop-item-reordering/index.html create mode 100644 public/blog/tag/drag-and-drop-item-sort/feed/index.html create mode 100644 public/blog/tag/drag-and-drop-item-sort/index.html create mode 100644 public/blog/tag/drag-and-drop-reordering/feed/index.html create mode 100644 public/blog/tag/drag-and-drop-reordering/index.html create mode 100644 public/blog/tag/draw/feed/index.html create mode 100644 public/blog/tag/draw/index.html create mode 100644 public/blog/tag/drawing/feed/index.html create mode 100644 public/blog/tag/drawing/index.html create mode 100644 public/blog/tag/drawn/feed/index.html create mode 100644 public/blog/tag/drawn/index.html create mode 100644 public/blog/tag/drop-shadow/feed/index.html create mode 100644 public/blog/tag/drop-shadow/index.html create mode 100644 public/blog/tag/dropdown/feed/index.html create mode 100644 public/blog/tag/dropdown/index.html create mode 100644 public/blog/tag/dynamic/feed/index.html create mode 100644 public/blog/tag/dynamic/index.html create mode 100644 public/blog/tag/edge/feed/index.html create mode 100644 public/blog/tag/edge/index.html create mode 100644 public/blog/tag/edges/feed/index.html create mode 100644 public/blog/tag/edges/index.html create mode 100644 public/blog/tag/edit/feed/index.html create mode 100644 public/blog/tag/edit/index.html create mode 100644 public/blog/tag/editing/feed/index.html create mode 100644 public/blog/tag/editing/index.html create mode 100644 public/blog/tag/efficient-work-on-computer/feed/index.html create mode 100644 public/blog/tag/efficient-work-on-computer/index.html create mode 100644 public/blog/tag/embedded/feed/index.html create mode 100644 public/blog/tag/embedded/index.html create mode 100644 public/blog/tag/empty/feed/index.html create mode 100644 public/blog/tag/empty/index.html create mode 100644 public/blog/tag/enabled/feed/index.html create mode 100644 public/blog/tag/enabled/index.html create mode 100644 public/blog/tag/even/feed/index.html create mode 100644 public/blog/tag/even/index.html create mode 100644 public/blog/tag/explorer/feed/index.html create mode 100644 public/blog/tag/explorer/index.html create mode 100644 public/blog/tag/extension/feed/index.html create mode 100644 public/blog/tag/extension/index.html create mode 100644 public/blog/tag/extensions/feed/index.html create mode 100644 public/blog/tag/extensions/index.html create mode 100644 public/blog/tag/fading/feed/index.html create mode 100644 public/blog/tag/fading/index.html create mode 100644 public/blog/tag/fast-listview/feed/index.html create mode 100644 public/blog/tag/fast-listview/index.html create mode 100644 public/blog/tag/fast/feed/index.html create mode 100644 public/blog/tag/fast/index.html create mode 100644 public/blog/tag/faster/feed/index.html create mode 100644 public/blog/tag/faster/index.html create mode 100644 public/blog/tag/features/feed/index.html create mode 100644 public/blog/tag/features/index.html create mode 100644 public/blog/tag/feed/feed/index.html create mode 100644 public/blog/tag/file/feed/index.html create mode 100644 public/blog/tag/file/index.html create mode 100644 public/blog/tag/filename/feed/index.html create mode 100644 public/blog/tag/filename/index.html create mode 100644 public/blog/tag/files/feed/index.html create mode 100644 public/blog/tag/files/index.html create mode 100644 public/blog/tag/focus/feed/index.html create mode 100644 public/blog/tag/focus/index.html create mode 100644 public/blog/tag/focused/feed/index.html create mode 100644 public/blog/tag/focused/index.html create mode 100644 public/blog/tag/folder/feed/index.html create mode 100644 public/blog/tag/folder/index.html create mode 100644 public/blog/tag/font/feed/index.html create mode 100644 public/blog/tag/font/index.html create mode 100644 public/blog/tag/gradient/feed/index.html create mode 100644 public/blog/tag/gradient/index.html create mode 100644 public/blog/tag/grid/feed/index.html create mode 100644 public/blog/tag/grid/index.html create mode 100644 public/blog/tag/gridlines/feed/index.html create mode 100644 public/blog/tag/gridlines/index.html create mode 100644 public/blog/tag/group-header/feed/index.html create mode 100644 public/blog/tag/group-header/index.html create mode 100644 public/blog/tag/group/feed/index.html create mode 100644 public/blog/tag/group/index.html create mode 100644 public/blog/tag/groups/feed/index.html create mode 100644 public/blog/tag/groups/index.html create mode 100644 public/blog/tag/header/feed/index.html create mode 100644 public/blog/tag/header/index.html create mode 100644 public/blog/tag/headers/feed/index.html create mode 100644 public/blog/tag/headers/index.html create mode 100644 public/blog/tag/height/feed/index.html create mode 100644 public/blog/tag/height/index.html create mode 100644 public/blog/tag/hide/feed/index.html create mode 100644 public/blog/tag/hide/index.html create mode 100644 public/blog/tag/hiding/feed/index.html create mode 100644 public/blog/tag/hiding/index.html create mode 100644 public/blog/tag/hierarchy/feed/index.html create mode 100644 public/blog/tag/hierarchy/index.html create mode 100644 public/blog/tag/highlight/feed/index.html create mode 100644 public/blog/tag/highlight/index.html create mode 100644 public/blog/tag/highlighting/feed/index.html create mode 100644 public/blog/tag/highlighting/index.html create mode 100644 public/blog/tag/hot/feed/index.html create mode 100644 public/blog/tag/hot/index.html create mode 100644 public/blog/tag/hottrack/feed/index.html create mode 100644 public/blog/tag/hottrack/index.html create mode 100644 public/blog/tag/hottracking/feed/index.html create mode 100644 public/blog/tag/hottracking/index.html create mode 100644 public/blog/tag/hover/feed/index.html create mode 100644 public/blog/tag/hover/index.html create mode 100644 public/blog/tag/hovers/feed/index.html create mode 100644 public/blog/tag/hovers/index.html create mode 100644 public/blog/tag/how-to/feed/index.html create mode 100644 public/blog/tag/how-to/index.html create mode 100644 public/blog/tag/hyperlink/feed/index.html create mode 100644 public/blog/tag/hyperlink/index.html create mode 100644 public/blog/tag/hyperlinks/feed/index.html create mode 100644 public/blog/tag/hyperlinks/index.html create mode 100644 public/blog/tag/icon/feed/index.html create mode 100644 public/blog/tag/icon/index.html create mode 100644 public/blog/tag/icons/feed/index.html create mode 100644 public/blog/tag/icons/index.html create mode 100644 public/blog/tag/image-borders/feed/index.html create mode 100644 public/blog/tag/image-borders/index.html create mode 100644 public/blog/tag/image/feed/index.html create mode 100644 public/blog/tag/image/index.html create mode 100644 public/blog/tag/imagekey/feed/index.html create mode 100644 public/blog/tag/imagekey/index.html create mode 100644 public/blog/tag/imagelist/feed/index.html create mode 100644 public/blog/tag/imagelist/index.html create mode 100644 public/blog/tag/images/feed/index.html create mode 100644 public/blog/tag/images/index.html create mode 100644 public/blog/tag/internet-addiction/feed/index.html create mode 100644 public/blog/tag/internet-addiction/index.html create mode 100644 public/blog/tag/invisible/feed/index.html create mode 100644 public/blog/tag/invisible/index.html create mode 100644 public/blog/tag/item-height-in-list-view/feed/index.html create mode 100644 public/blog/tag/item-height-in-list-view/index.html create mode 100644 public/blog/tag/item-height/feed/index.html create mode 100644 public/blog/tag/item-height/index.html create mode 100644 public/blog/tag/item-hierarchy/feed/index.html create mode 100644 public/blog/tag/item-hierarchy/index.html create mode 100644 public/blog/tag/item-reorder/feed/index.html create mode 100644 public/blog/tag/item-reorder/index.html create mode 100644 public/blog/tag/item-sort/feed/index.html create mode 100644 public/blog/tag/item-sort/index.html create mode 100644 public/blog/tag/item/feed/index.html create mode 100644 public/blog/tag/item/index.html create mode 100644 public/blog/tag/items/feed/index.html create mode 100644 public/blog/tag/items/index.html create mode 100644 public/blog/tag/label/feed/index.html create mode 100644 public/blog/tag/label/index.html create mode 100644 public/blog/tag/labeledit/feed/index.html create mode 100644 public/blog/tag/labeledit/index.html create mode 100644 public/blog/tag/large/feed/index.html create mode 100644 public/blog/tag/large/index.html create mode 100644 public/blog/tag/larger/feed/index.html create mode 100644 public/blog/tag/larger/index.html create mode 100644 public/blog/tag/layout/feed/index.html create mode 100644 public/blog/tag/layout/index.html create mode 100644 public/blog/tag/lf/feed/index.html create mode 100644 public/blog/tag/lf/index.html create mode 100644 public/blog/tag/line/feed/index.html create mode 100644 public/blog/tag/line/index.html create mode 100644 public/blog/tag/linefeed/feed/index.html create mode 100644 public/blog/tag/linefeed/index.html create mode 100644 public/blog/tag/lines/feed/index.html create mode 100644 public/blog/tag/lines/index.html create mode 100644 public/blog/tag/links/feed/index.html create mode 100644 public/blog/tag/links/index.html create mode 100644 public/blog/tag/list-view-group-headers/feed/index.html create mode 100644 public/blog/tag/list-view-group-headers/index.html create mode 100644 public/blog/tag/list/feed/index.html create mode 100644 public/blog/tag/list/index.html create mode 100644 public/blog/tag/listview-tree/feed/index.html create mode 100644 public/blog/tag/listview-tree/index.html create mode 100644 public/blog/tag/listview/feed/index.html create mode 100644 public/blog/tag/listview/index.html create mode 100644 public/blog/tag/load/feed/index.html create mode 100644 public/blog/tag/load/index.html create mode 100644 public/blog/tag/loading/feed/index.html create mode 100644 public/blog/tag/loading/index.html create mode 100644 public/blog/tag/luna/feed/index.html create mode 100644 public/blog/tag/luna/index.html create mode 100644 public/blog/tag/mark/feed/index.html create mode 100644 public/blog/tag/mark/index.html create mode 100644 public/blog/tag/matched/feed/index.html create mode 100644 public/blog/tag/matched/index.html create mode 100644 public/blog/tag/mental-work/feed/index.html create mode 100644 public/blog/tag/mental-work/index.html create mode 100644 public/blog/tag/migration/feed/index.html create mode 100644 public/blog/tag/migration/index.html create mode 100644 public/blog/tag/mode/feed/index.html create mode 100644 public/blog/tag/mode/index.html create mode 100644 public/blog/tag/mouse-wheel/feed/index.html create mode 100644 public/blog/tag/mouse-wheel/index.html create mode 100644 public/blog/tag/mouse/feed/index.html create mode 100644 public/blog/tag/mouse/index.html create mode 100644 public/blog/tag/multi-line/feed/index.html create mode 100644 public/blog/tag/multi-line/index.html create mode 100644 public/blog/tag/multi/feed/index.html create mode 100644 public/blog/tag/multi/index.html create mode 100644 public/blog/tag/multiline-items/feed/index.html create mode 100644 public/blog/tag/multiline-items/index.html create mode 100644 public/blog/tag/multiline/feed/index.html create mode 100644 public/blog/tag/multiline/index.html create mode 100644 public/blog/tag/native-look/feed/index.html create mode 100644 public/blog/tag/native-look/index.html create mode 100644 public/blog/tag/new-release/feed/index.html create mode 100644 public/blog/tag/new-release/index.html create mode 100644 public/blog/tag/newline/feed/index.html create mode 100644 public/blog/tag/newline/index.html create mode 100644 public/blog/tag/newlines/feed/index.html create mode 100644 public/blog/tag/newlines/index.html create mode 100644 public/blog/tag/nodes/feed/index.html create mode 100644 public/blog/tag/nodes/index.html create mode 100644 public/blog/tag/non-selectable-list-view-items/feed/index.html create mode 100644 public/blog/tag/non-selectable-list-view-items/index.html create mode 100644 public/blog/tag/non-selectable/feed/index.html create mode 100644 public/blog/tag/non-selectable/index.html create mode 100644 public/blog/tag/nonselectable/feed/index.html create mode 100644 public/blog/tag/nonselectable/index.html create mode 100644 public/blog/tag/odd/feed/index.html create mode 100644 public/blog/tag/odd/index.html create mode 100644 public/blog/tag/optimization/feed/index.html create mode 100644 public/blog/tag/optimization/index.html create mode 100644 public/blog/tag/over/feed/index.html create mode 100644 public/blog/tag/over/index.html create mode 100644 public/blog/tag/owner/feed/index.html create mode 100644 public/blog/tag/owner/index.html create mode 100644 public/blog/tag/ownerdraw/feed/index.html create mode 100644 public/blog/tag/ownerdraw/index.html create mode 100644 public/blog/tag/ownerdrawing/feed/index.html create mode 100644 public/blog/tag/ownerdrawing/index.html create mode 100644 public/blog/tag/ownerdrawn/feed/index.html create mode 100644 public/blog/tag/ownerdrawn/index.html create mode 100644 public/blog/tag/padding/feed/index.html create mode 100644 public/blog/tag/padding/index.html create mode 100644 public/blog/tag/per-line/feed/index.html create mode 100644 public/blog/tag/per-line/index.html create mode 100644 public/blog/tag/performance/feed/index.html create mode 100644 public/blog/tag/performance/index.html create mode 100644 public/blog/tag/prevent-item-selection-in-list-view/feed/index.html create mode 100644 public/blog/tag/prevent-item-selection-in-list-view/index.html create mode 100644 public/blog/tag/preview/feed/index.html create mode 100644 public/blog/tag/preview/index.html create mode 100644 public/blog/tag/productivity/feed/index.html create mode 100644 public/blog/tag/productivity/index.html create mode 100644 public/blog/tag/programming-productivity/feed/index.html create mode 100644 public/blog/tag/programming-productivity/index.html create mode 100644 public/blog/tag/progress/feed/index.html create mode 100644 public/blog/tag/progress/index.html create mode 100644 public/blog/tag/radio/feed/index.html create mode 100644 public/blog/tag/radio/index.html create mode 100644 public/blog/tag/radios/feed/index.html create mode 100644 public/blog/tag/radios/index.html create mode 100644 public/blog/tag/read-only/feed/index.html create mode 100644 public/blog/tag/read-only/index.html create mode 100644 public/blog/tag/readonly/feed/index.html create mode 100644 public/blog/tag/readonly/index.html create mode 100644 public/blog/tag/refresh/feed/index.html create mode 100644 public/blog/tag/refresh/index.html create mode 100644 public/blog/tag/relaxing-when-working-on-computer/feed/index.html create mode 100644 public/blog/tag/relaxing-when-working-on-computer/index.html create mode 100644 public/blog/tag/rename/feed/index.html create mode 100644 public/blog/tag/rename/index.html create mode 100644 public/blog/tag/reorder/feed/index.html create mode 100644 public/blog/tag/reorder/index.html create mode 100644 public/blog/tag/reordering/feed/index.html create mode 100644 public/blog/tag/reordering/index.html create mode 100644 public/blog/tag/right/feed/index.html create mode 100644 public/blog/tag/right/index.html create mode 100644 public/blog/tag/rows/feed/index.html create mode 100644 public/blog/tag/rows/index.html create mode 100644 public/blog/tag/runtime/feed/index.html create mode 100644 public/blog/tag/runtime/index.html create mode 100644 public/blog/tag/save/feed/index.html create mode 100644 public/blog/tag/save/index.html create mode 100644 public/blog/tag/scroll/feed/index.html create mode 100644 public/blog/tag/scroll/index.html create mode 100644 public/blog/tag/scrollbar/feed/index.html create mode 100644 public/blog/tag/scrollbar/index.html create mode 100644 public/blog/tag/scrollbars/feed/index.html create mode 100644 public/blog/tag/scrollbars/index.html create mode 100644 public/blog/tag/scrolling/feed/index.html create mode 100644 public/blog/tag/scrolling/index.html create mode 100644 public/blog/tag/search/feed/index.html create mode 100644 public/blog/tag/search/index.html create mode 100644 public/blog/tag/searching/feed/index.html create mode 100644 public/blog/tag/searching/index.html create mode 100644 public/blog/tag/selection/feed/index.html create mode 100644 public/blog/tag/selection/index.html create mode 100644 public/blog/tag/separators/feed/index.html create mode 100644 public/blog/tag/separators/index.html create mode 100644 public/blog/tag/serialization/feed/index.html create mode 100644 public/blog/tag/serialization/index.html create mode 100644 public/blog/tag/serialize/feed/index.html create mode 100644 public/blog/tag/serialize/index.html create mode 100644 public/blog/tag/shadows/feed/index.html create mode 100644 public/blog/tag/shadows/index.html create mode 100644 public/blog/tag/size/feed/index.html create mode 100644 public/blog/tag/size/index.html create mode 100644 public/blog/tag/sizes/feed/index.html create mode 100644 public/blog/tag/sizes/index.html create mode 100644 public/blog/tag/sort/feed/index.html create mode 100644 public/blog/tag/sort/index.html create mode 100644 public/blog/tag/sorting/feed/index.html create mode 100644 public/blog/tag/sorting/index.html create mode 100644 public/blog/tag/space/feed/index.html create mode 100644 public/blog/tag/space/index.html create mode 100644 public/blog/tag/spacing/feed/index.html create mode 100644 public/blog/tag/spacing/index.html create mode 100644 public/blog/tag/specific/feed/index.html create mode 100644 public/blog/tag/specific/index.html create mode 100644 public/blog/tag/state/feed/index.html create mode 100644 public/blog/tag/state/index.html create mode 100644 public/blog/tag/store/feed/index.html create mode 100644 public/blog/tag/store/index.html create mode 100644 public/blog/tag/styles/feed/index.html create mode 100644 public/blog/tag/styles/index.html create mode 100644 public/blog/tag/sub-item/feed/index.html create mode 100644 public/blog/tag/sub-item/index.html create mode 100644 public/blog/tag/sub-items/feed/index.html create mode 100644 public/blog/tag/sub-items/index.html create mode 100644 public/blog/tag/sub/feed/index.html create mode 100644 public/blog/tag/sub/index.html create mode 100644 public/blog/tag/subitem/feed/index.html create mode 100644 public/blog/tag/subitem/index.html create mode 100644 public/blog/tag/subitems/feed/index.html create mode 100644 public/blog/tag/subitems/index.html create mode 100644 public/blog/tag/support/feed/index.html create mode 100644 public/blog/tag/support/index.html create mode 100644 public/blog/tag/text/feed/index.html create mode 100644 public/blog/tag/text/index.html create mode 100644 public/blog/tag/theme/feed/index.html create mode 100644 public/blog/tag/theme/index.html create mode 100644 public/blog/tag/themes/feed/index.html create mode 100644 public/blog/tag/themes/index.html create mode 100644 public/blog/tag/thumbnail-view/feed/index.html create mode 100644 public/blog/tag/thumbnail-view/index.html create mode 100644 public/blog/tag/thumbnail/feed/index.html create mode 100644 public/blog/tag/thumbnail/index.html create mode 100644 public/blog/tag/thumbnailbrowser/feed/index.html create mode 100644 public/blog/tag/thumbnailbrowser/index.html create mode 100644 public/blog/tag/thumbnails-view/feed/index.html create mode 100644 public/blog/tag/thumbnails-view/index.html create mode 100644 public/blog/tag/thumbnails/feed/index.html create mode 100644 public/blog/tag/thumbnails/index.html create mode 100644 public/blog/tag/tips-and-tricks/feed/index.html create mode 100644 public/blog/tag/tips-and-tricks/index.html create mode 100644 public/blog/tag/tracking/feed/index.html create mode 100644 public/blog/tag/tracking/index.html create mode 100644 public/blog/tag/tree-structure-in-listview/feed/index.html create mode 100644 public/blog/tag/tree-structure-in-listview/index.html create mode 100644 public/blog/tag/tree/feed/index.html create mode 100644 public/blog/tag/tree/index.html create mode 100644 public/blog/tag/treeview/feed/index.html create mode 100644 public/blog/tag/treeview/index.html create mode 100644 public/blog/tag/underline/feed/index.html create mode 100644 public/blog/tag/underline/index.html create mode 100644 public/blog/tag/update/feed/index.html create mode 100644 public/blog/tag/update/index.html create mode 100644 public/blog/tag/variable/feed/index.html create mode 100644 public/blog/tag/variable/index.html create mode 100644 public/blog/tag/vertical/feed/index.html create mode 100644 public/blog/tag/vertical/index.html create mode 100644 public/blog/tag/view/feed/index.html create mode 100644 public/blog/tag/view/index.html create mode 100644 public/blog/tag/visibility/feed/index.html create mode 100644 public/blog/tag/visibility/index.html create mode 100644 public/blog/tag/visible/feed/index.html create mode 100644 public/blog/tag/visible/index.html create mode 100644 public/blog/tag/visual/feed/index.html create mode 100644 public/blog/tag/visual/index.html create mode 100644 public/blog/tag/whats-new/feed/index.html create mode 100644 public/blog/tag/whats-new/index.html create mode 100644 public/blog/tag/width/feed/index.html create mode 100644 public/blog/tag/width/index.html create mode 100644 public/blog/tag/winforms/feed/index.html create mode 100644 public/blog/tag/winforms/index.html create mode 100644 public/blog/tag/work-focus/feed/index.html create mode 100644 public/blog/tag/work-focus/index.html create mode 100644 public/blog/tag/working-on/feed/index.html create mode 100644 public/blog/tag/working-on/index.html create mode 100644 public/blog/tag/wrapping/feed/index.html create mode 100644 public/blog/tag/wrapping/index.html create mode 100644 public/blog/tag/xp/feed/index.html create mode 100644 public/blog/tag/xp/index.html create mode 100644 public/blog/tag/zen-coder/feed/index.html create mode 100644 public/blog/tag/zen-coder/index.html create mode 100644 public/blog/tag/zen-habits/feed/index.html create mode 100644 public/blog/tag/zen-habits/index.html create mode 100644 public/blog/tag/zen/feed/index.html create mode 100644 public/blog/tag/zen/index.html create mode 100644 public/blog/tedious-work-with-groups-and-item-hierarchy-features/feed/index.html create mode 100644 public/blog/the-three-main-advantages-componentowl-has-over-the-classic-net-framework/feed/index.html create mode 100644 public/blog/vertical-alignment-and-text-wrapping-in-better-listview/feed/index.html create mode 100644 public/blog/vertical-alignment-and-text-wrapping-in-better-listview/index.html?replytocom=1092.html create mode 100644 public/blog/what-we-are-working-on-groups-item-hierarchy-support/feed/index.html create mode 100644 public/blog/windows-theme-support-in-better-listview/feed/index.html create mode 100644 public/blog/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8 create mode 100644 public/blog/wp-content/themes/componentowl/images/arrow-bullet.gif create mode 100644 public/blog/wp-content/themes/componentowl/images/bg.png create mode 100644 public/blog/wp-content/themes/componentowl/images/footer-bg.png create mode 100644 public/blog/wp-content/themes/componentowl/images/icons/lightbulb.gif create mode 100644 public/blog/wp-content/themes/componentowl/images/rss.png create mode 100644 public/blog/wp-content/themes/componentowl/images/search.gif create mode 100644 public/blog/wp-content/themes/componentowl/images/ss-bg.gif.html create mode 100644 public/blog/wp-content/themes/componentowl/images/twitter.png create mode 100644 public/blog/wp-content/themes/componentowl/javascripts/theme.js create mode 100644 public/blog/wp-content/themes/componentowl/style.css create mode 100644 public/blog/wp-content/uploads/2011/01/is-full-300x229.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/is-full.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/is-highlight-300x229.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/is-highlight.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/stdl-full-300x206.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/stdl-full.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/stdl-highlight-300x206.jpg create mode 100644 public/blog/wp-content/uploads/2011/01/stdl-highlight.jpg create mode 100644 public/blog/wp-content/uploads/2011/02/borders-150x150.jpg create mode 100644 public/blog/wp-content/uploads/2011/02/borders-300x300.jpg create mode 100644 public/blog/wp-content/uploads/2011/02/borders.jpg create mode 100644 public/blog/wp-content/uploads/2011/02/extra-graphics-150x150.png create mode 100644 public/blog/wp-content/uploads/2011/02/extra-graphics-300x300.png create mode 100644 public/blog/wp-content/uploads/2011/02/extra-graphics.png create mode 100644 public/blog/wp-content/uploads/2011/02/screenshot-300x196.jpg create mode 100644 public/blog/wp-content/uploads/2011/02/screenshot.jpg create mode 100644 public/blog/wp-content/uploads/2011/03/screen-styles-238x300.png create mode 100644 public/blog/wp-content/uploads/2011/03/screen-styles.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-1-300x176.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-1.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-2-300x134.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-2.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-3-300x103.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-3.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-4-300x61.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-4.png create mode 100644 public/blog/wp-content/uploads/2011/05/cowl-blog-5.png create mode 100644 public/blog/wp-content/uploads/2011/06/blv-thumbnails-2-300x242.jpg create mode 100644 public/blog/wp-content/uploads/2011/06/blv-thumbnails-2.jpg create mode 100644 public/blog/wp-content/uploads/2011/06/blv-thumbnails-300x242.jpg create mode 100644 public/blog/wp-content/uploads/2011/06/blv-thumbnails.jpg create mode 100644 public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-1.png create mode 100644 public/blog/wp-content/uploads/2011/06/list-view-drag-drop-reordering-2.png create mode 100644 public/blog/wp-content/uploads/2011/07/betterlistview2-overview1-300x279.png create mode 100644 public/blog/wp-content/uploads/2011/07/betterlistview2-overview1.png create mode 100644 public/blog/wp-content/uploads/2011/07/betterlistview2-overview2-300x262.png create mode 100644 public/blog/wp-content/uploads/2011/07/betterlistview2-overview2.png create mode 100644 public/blog/wp-content/uploads/2011/07/betterlistview2-overview3-300x280.png create mode 100644 public/blog/wp-content/uploads/2011/07/betterlistview2-overview3.png create mode 100644 public/blog/wp-content/uploads/2011/07/blv-aero-300x213.png create mode 100644 public/blog/wp-content/uploads/2011/07/blv-aero.png create mode 100644 public/blog/wp-content/uploads/2011/07/blv-classic-300x213.png create mode 100644 public/blog/wp-content/uploads/2011/07/blv-classic.png create mode 100644 public/blog/wp-content/uploads/2011/07/blv-luna-300x213.png create mode 100644 public/blog/wp-content/uploads/2011/07/blv-luna.png create mode 100644 public/blog/wp-content/uploads/2011/08/blv-fileexplorersample.png create mode 100644 public/blog/wp-content/uploads/2011/08/column-hide-after.png create mode 100644 public/blog/wp-content/uploads/2011/08/column-hide-before-300x82.png create mode 100644 public/blog/wp-content/uploads/2011/08/column-hide-before.png create mode 100644 public/blog/wp-content/uploads/2011/09/2611677_345f676344.jpg create mode 100644 public/blog/wp-content/uploads/2011/09/vs-error-list-300x111.png create mode 100644 public/blog/wp-content/uploads/2011/09/vs-error-list.png create mode 100644 public/blog/wp-content/uploads/2011/10/samples-cs-vb-300x80.png create mode 100644 public/blog/wp-content/uploads/2011/10/samples-cs-vb.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight-300x178.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-keep-selection-highlight.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-multi-line-2.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items-300x176.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-multiple-hot-items.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-wrapping-300x70.png create mode 100644 public/blog/wp-content/uploads/2011/11/screen-wrapping.png create mode 100644 public/blog/wp-content/uploads/2011/11/screenshot-newlines-295x300.png create mode 100644 public/blog/wp-content/uploads/2011/11/screenshot-newlines.png create mode 100644 public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align-300x264.png create mode 100644 public/blog/wp-content/uploads/2011/11/text-formatting-vertical-align.png create mode 100644 public/blog/wp-content/uploads/2011/12/screen-dynamic-300x157.gif create mode 100644 public/blog/wp-content/uploads/2011/12/screen-dynamic.gif create mode 100644 public/blog/wp-content/uploads/2012/01/blv-combineditems1.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-combineditems2.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-150x150.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-nonselectable-1-300x300.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-nonselectable-1.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-150x150.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-nonselectable-2-300x300.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-nonselectable-2.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-readonly-1-300x229.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-readonly-1.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-readonly-2-300x229.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-readonly-2.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-readonly-3-300x229.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-readonly-3.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1-300x202.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup1.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2-300x202.png create mode 100644 public/blog/wp-content/uploads/2012/01/blv-showdefaultgroup2.png create mode 100644 public/blog/wp-content/uploads/2012/01/metadata-view-194x300.png create mode 100644 public/blog/wp-content/uploads/2012/01/metadata-view.png create mode 100644 public/blog/wp-content/uploads/2012/02/blv-invisibleitems-257x300.gif create mode 100644 public/blog/wp-content/uploads/2012/02/blv-invisibleitems.gif create mode 100644 public/blog/wp-content/uploads/2012/02/distraction-junkie-coder.png.png create mode 100644 public/blog/wp-content/uploads/2012/02/zen-coder.png create mode 100644 public/blog/wp-content/uploads/2012/03/blv-customheight.png create mode 100644 public/blog/wp-content/uploads/2012/03/screen-custom-spacing-150x150.png create mode 100644 public/blog/wp-content/uploads/2012/03/screen-custom-spacing.png create mode 100644 public/blog/wp-content/uploads/2012/03/screen-pixel-share-300x158.png create mode 100644 public/blog/wp-content/uploads/2012/03/screen-pixel-share.png create mode 100644 public/blog/wp-content/uploads/2012/04/blv-embedded-1-300x136.png create mode 100644 public/blog/wp-content/uploads/2012/04/blv-embedded-1.png create mode 100644 public/blog/wp-content/uploads/2012/04/blv-embedded-2.png create mode 100644 public/blog/wp-content/uploads/2012/04/rightalign-group2-300x261.png create mode 100644 public/blog/wp-content/uploads/2012/04/rightalign-group2.png create mode 100644 public/blog/wp-content/uploads/2012/04/rightalign.png create mode 100644 public/blog/wp-content/uploads/2012/08/anigif.gif create mode 100644 public/blog/wp-content/uploads/2012/09/custom-selection.png create mode 100644 public/blog/wp-content/uploads/2012/12/chapter-drag-drop.html create mode 100644 public/blog/wp-content/uploads/2012/12/chapter-embedded-controls.html create mode 100644 public/blog/wp-content/uploads/2012/12/chapter-empty-text.html create mode 100644 public/blog/wp-content/uploads/2012/12/chapter-label-edit.html create mode 100644 public/blog/wp-content/uploads/2012/12/embedded-control.png.html create mode 100644 public/blog/wp-content/uploads/2012/12/label-edit.gif create mode 100644 public/blog/wp-content/uploads/2012/12/lang-vb.js.html create mode 100644 public/blog/wp-content/uploads/2012/12/prettify.css.html create mode 100644 public/blog/wp-content/uploads/2012/12/prettify.js.html create mode 100644 public/blog/wp-content/uploads/2012/12/style.css.html create mode 100644 public/blog/wp-content/uploads/2012/12/w8-theme.jpg create mode 100644 public/blog/wp-content/uploads/2012/index.html create mode 100644 public/blog/wp-content/uploads/2012/resources/main.css.html create mode 100644 public/blog/wp-content/uploads/2012/resources/overview.gif.html create mode 100644 public/blog/wp-content/uploads/2013/01/chapter-save-load.html create mode 100644 public/blog/wp-content/uploads/2013/01/chapter-search.html create mode 100644 public/blog/wp-content/uploads/2013/01/chapter-serialization.html create mode 100644 public/blog/wp-content/uploads/2013/01/lang-vb.js.html create mode 100644 public/blog/wp-content/uploads/2013/01/prettify.css.html create mode 100644 public/blog/wp-content/uploads/2013/01/prettify.js.html create mode 100644 public/blog/wp-content/uploads/2013/01/properties.png create mode 100644 public/blog/wp-content/uploads/2013/01/screen-blv-binding1.png create mode 100644 public/blog/wp-content/uploads/2013/01/screen-blv-binding2.png create mode 100644 public/blog/wp-content/uploads/2013/01/screen-blv-binding3.png create mode 100644 public/blog/wp-content/uploads/2013/01/search-highlight-1.gif create mode 100644 public/blog/wp-content/uploads/2013/01/search-highlight-2.gif create mode 100644 public/blog/wp-content/uploads/2013/01/style.css.html create mode 100644 public/blog/wp-content/uploads/2013/02/chapter-multi-line.html create mode 100644 public/blog/wp-content/uploads/2013/02/chapter-owner-draw.html create mode 100644 public/blog/wp-content/uploads/2013/02/chapter-performance.html create mode 100644 public/blog/wp-content/uploads/2013/02/hot-item-backcolor.gif create mode 100644 public/blog/wp-content/uploads/2013/02/lang-vb.js.html create mode 100644 public/blog/wp-content/uploads/2013/02/owner-draw.png.html create mode 100644 public/blog/wp-content/uploads/2013/02/prettify.css.html create mode 100644 public/blog/wp-content/uploads/2013/02/prettify.js.html create mode 100644 public/blog/wp-content/uploads/2013/02/style.css.html create mode 100644 public/blog/wp-content/uploads/2013/03/blv-fading.png create mode 100644 public/blog/wp-content/uploads/2013/03/blv-scroll-size.png create mode 100644 public/blog/wp-content/uploads/2013/index.html create mode 100644 public/blog/wp-content/uploads/2013/resources/main.css.html create mode 100644 public/blog/wp-content/uploads/2013/resources/overview.gif.html create mode 100644 public/blog/wp-content/uploads/2014/02/image.gif create mode 100644 public/blog/wp-content/uploads/2014/04/blv-alternating-rows.png create mode 100644 public/blog/wp-content/uploads/2014/04/blv-gridlines-1.png create mode 100644 public/blog/wp-content/uploads/2014/04/blv-gridlines-2.png create mode 100644 public/blog/wp-content/uploads/2014/07/blv-sub-item-checkboxes.png create mode 100644 public/blog/wp-content/uploads/2014/08/blv-overlay.png create mode 100644 public/blog/wp-includes/js/comment-reply.min.js?ver=4.9.8 create mode 100644 public/blog/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1 create mode 100644 public/blog/wp-includes/js/jquery/jquery.js?ver=1.12.4 create mode 100644 public/blog/wp-includes/js/wp-embed.min.js?ver=4.9.8 create mode 100644 public/blog/wp-includes/wlwmanifest.xml create mode 100644 public/blog/wp-json/index.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Factivation-issues-and-how-to-solve-them%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Factivation-issues-and-how-to-solve-them%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Falternating-rows-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Falternating-rows-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-1-50-released%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-1-50-released%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-1-52-released%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-1-52-released%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-0-samples-preview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-0-samples-preview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-0-sneak-peek-item-hierarchy-groups-more%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-0-sneak-peek-item-hierarchy-groups-more%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-00-released%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-00-released%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-1-optimizations-done-minor-features-and-testing%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-1-optimizations-done-minor-features-and-testing%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-10-released%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-2-10-released%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-released%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-released%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-reviewed-at-devproconnections-com%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-reviewed-at-devproconnections-com%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-tip-how-to-draw-custom-selection%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-listview-tip-how-to-draw-custom-selection%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-thumbnail-browser-component-released%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbetter-thumbnail-browser-component-released%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbinding-images-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fbinding-images-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fblv-and-internet-explorer%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcentering-images-in-better-listview-sub-items%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcombined-items-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcombined-items-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcoming-soon-better-listview-2-1-optimized-for-performance%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcoming-soon-better-listview-2-1-optimized-for-performance%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-behavior-of-group-headers-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-behavior-of-group-headers-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-item-height-in-details-view-of-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-item-height-in-details-view-of-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-label-edit-how-to-rename-file-names-without-extension-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-label-edit-how-to-rename-file-names-without-extension-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-scroll-bar-size-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-scroll-bar-size-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-spacing-between-items-in-details-view%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustom-spacing-between-items-in-details-view%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustomize-label-editing-embedded-control-for-each-line-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fcustomize-label-editing-embedded-control-for-each-line-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fdisplaying-thumbnails-withs-borders-and-shadows%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fdisplaying-thumbnails-withs-borders-and-shadows%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fdisplayingmultiline-items-in-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fdisplayingmultiline-items-in-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fenabling-search-highlight-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fenabling-search-highlight-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Ffile-explorer-with-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Ffile-explorer-with-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhiding-column-headers-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhiding-column-headers-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhiding-items-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhiding-items-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhot-tracking-items-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhot-tracking-items-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-add-grid-lines-in-empty-space-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-add-grid-lines-in-empty-space-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-change-list-view-mouse-wheel-scroll-speed%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-change-list-view-mouse-wheel-scroll-speed%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-display-items-in-custom-states%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-display-items-in-custom-states%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-dynamically-resize-focused-item%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-dynamically-resize-focused-item%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-hide-a-column-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-hide-a-column-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-make-items-fading-on-edges-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-make-items-fading-on-edges-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-store-better-listview-content-in-a-string-user-request%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fhow-to-store-better-listview-content-in-a-string-user-request%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Flist-view-drag-and-drop-item-reorder-sort%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Flist-view-drag-and-drop-item-reorder-sort%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fnon-selectable-items-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fnon-selectable-items-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fread-only-mode-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fread-only-mode-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fright-aligned-images-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fright-aligned-images-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsearch-filtering-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsearch-filtering-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsub-item-check-boxes-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsynergy-of-better-listview-and-our-applications%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fsynergy-of-better-listview-and-our-applications%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Ftedious-work-with-groups-and-item-hierarchy-features%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Ftedious-work-with-groups-and-item-hierarchy-features%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fthe-three-main-advantages-componentowl-has-over-the-classic-net-framework%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fvertical-alignment-and-text-wrapping-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fvertical-alignment-and-text-wrapping-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fwhat-we-are-working-on-groups-item-hierarchy-support%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fwhat-we-are-working-on-groups-item-hierarchy-support%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fwindows-theme-support-in-better-listview%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fwindows-theme-support-in-better-listview%2F.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fzen-coder-vs-distraction-junkie%2F&format=xml.html create mode 100644 public/blog/wp-json/oembed/1.0/embed?url=http:%2F%2Fwww.componentowl.com%2Fblog%2Fzen-coder-vs-distraction-junkie%2F.html create mode 100644 public/blog/xmlrpc.php.html create mode 100644 public/blog/xmlrpc.php?rsd create mode 100644 public/blog/zen-coder-vs-distraction-junkie/feed/index.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1217.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1218.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1219.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1220.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1221.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1222.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1224.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1225.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1226.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1227.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1228.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1229.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1232.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1233.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1234.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1235.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1236.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1237.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1238.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1239.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1241.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1242.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1243.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1244.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1245.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1246.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1247.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1248.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1249.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1250.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1251.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1252.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1253.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1254.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1255.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1256.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1257.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1258.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1259.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1262.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1263.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1264.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1265.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1266.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1269.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1270.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1272.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1273.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1274.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1275.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1282.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1283.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1288.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1365.html create mode 100644 public/blog/zen-coder-vs-distraction-junkie/index.html?replytocom=1397.html create mode 100644 "public/download/\\\".html" create mode 100644 public/download/better-listview.html create mode 100644 public/javascripts/app_packaged.js?1455269826 create mode 100644 public/javascripts/dextronet.js create mode 100644 public/javascripts/plugins/jquery.validation.js create mode 100644 public/sitemap.html create mode 100644 public/stylesheets/base_packaged.css?1455269822.css diff --git a/public/articles.html b/public/articles.html new file mode 100644 index 0000000..7060405 --- /dev/null +++ b/public/articles.html @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+ +
Articles for .NET developers
+ + + +
+ +
+ +
+
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git "a/public/articles/\\\".html" "b/public/articles/\\\".html" new file mode 100644 index 0000000..d659db7 --- /dev/null +++ "b/public/articles/\\\".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/articles/visual-studio-toolbox-control-integration.html b/public/articles/visual-studio-toolbox-control-integration.html new file mode 100644 index 0000000..40155ac --- /dev/null +++ b/public/articles/visual-studio-toolbox-control-integration.html @@ -0,0 +1,1838 @@ + + + + + + + + + + + + + + + +Visual Studio Toolbox Control Integration - visual studio + + + + + + + +
+ + + + + + + +
+
+
+ +
+ +
Articles for .NET developers
+ +

Visual Studio Toolbox Control Integration

+ +
+ + + + +

The Most Complete Guide to Visual Studio Toolbox Control Integration

+

Libor +Tinka, Lead Developer, ComponentOwl.com

+

+

+

Contents

+

1. Introduction
+2. Prerequisites
+3. Creating a Sample Control
+4. Manual Toolbox Integration
+5. Toolbox Integration using TCI
+6. Toolbox Integration using DTE
+7. Toolbox Integration using VSI Packages
+8. Toolbox Integration using VSPackages
+9. Toolbox Integration using VSIX Packages
+10. Supporting Multiple Version of .NET Framework
+11. Sample Source Code

+

1. Introduction

+

This tutorial is intended for developers who would like to distribute their +WPF or WinForms controls and automatically put them into Visual Studio Toolbox +during installation.

+

I struggled with Toolbox integration earlier because there are several possible +approaches (harder to decide between them). Each approach have its own pros and cons and +no overall comparison is provided. I wrote this tutorial to shed some light on the topic +and spare you hours, maybe days of research and experimenting with aspects of +Visual Studio (Toolbox) extensibility.

+

We will first take a look on Toolbox control integration in general to get a +big picture. Each approach will be then discussed in detail and the following +question will be answered:

+
    +
  • How to install control in Visual Studio Toolbox?
  • +
  • How to update the control?
  • +
  • How to uninstall/remove the control?
  • +
  • How to support multiple Visual Studio versions?
  • +

+

There are several options on how to integrate your controls with Visual +Studio Toolbox:

+
    +
  • Manual installation
  • +
  • Toolbox Control Installer (TCI)
  • +
  • Visual Studio Automation Object Model (DTE)
  • +
  • VSPackage
  • +
  • VSI package
  • +
  • VSIX package
  • +
+

Manual installation

+

The simplest way of adding control into Visual Studio Toolbox is from within +the IDE.

+

This approach have one crucial drawback, which is that you leave Toolbox +integration to the user. Many developers are not that experienced with Visual +Studio and when your component is shipped, even if you provide appropriate +step-by-step guide, they may find it too complicated and rather try +another component which "just works". I thought that every developer using +Visual Studio is experienced enough to know how to add new items in VS Toolbox, +but I received few e-mails from users who uninstalled the product just because +the component have not appeared in the Toolbox and they thought it is broken +(without reading our documentation, of course). On the other hand, there is +a group of users who are not experienced developers, but are in charge of trying +some products in a given company (e.g. project managers). These people can +install the component, play with it and they would really appreciate if it just +works. This increases chance they will actually purchase your product.

+

Advantages: zero effort
+Disadvantages: require experienced users, slows user +producitivity, updating controls is not intuitive

+

Toolbox Control Installer (TCI)

+

Visual Studio 2005 SDK contained a VSPackage called Toolbox Control +Installer. This package comes pre-installed with Visual Studio 2008 and newer. +Its job is to simplify the specific task of extending Visual Studio Toolbox. +This approach requires you to install your assembly in GAC (Global Assembly +Cache) and create a key in Windows Registry.

+

Advantages: simple and fast component installation, updating +and removing
+Disadvantages: requires installation in GAC (not always +wanted), VS 2005 supported with SDK only

+

Visual Studio Automation Object Model (DTE)

+

If you are not afraid of COM, you can try DTE (Development Tools Environment) approach. +There is already a project on CodePlex called +Visual Studio Toolbox Manager, +which solves the toolbox integration problem using a simple command-line +application. The project is outdated since it does not support Visual Studio +2010 and newer. I made a project called DteToolboxInstaller, which +is also a command-line application and does support Visual Studio 2013, 2012, 2010, +2008 and 2005. You can use the project as you like. The main disadvantage of DTE +approach is the speed. The installer have to run devenv.exe using the automation interface, create a +fake VS Solution, open Toolbox, add the stuff and then close the Solution. The +whole process take no less than 10 seconds. If you want to integrate with two or +three versions of Visual Studio, it can take well over a minute.

+

Advantages: does not require updating registry or GAC, full +control over Toolbox
+Disadvantages: very slow, separate installation required for +every version of Visual Studio

+

VSPackage

+

A VSPackage seems to be a natural option. VSPackages allow any type +of Visual Studio extension and you can manipulate Toolbox as well. There was a trouble +with VSPackages in providing a Package Load Key (PLK) which can be +generated only manually using web form. The requirement for PLK vanished with +Visual Studio 2010 (hooray!). The nice thing about VSPackage approcach is that it does not slow +down the installation process. The package is loaded and the controls are installed +on-demand (when the Toolbox is opened for the first time after installation). +After trying all the approaches, using VSPackage seems to be fastest and most +universal one.

+

Advantages: quick installation, appearance in About box and +other extensibility features
+Disadvantages: cmplicated setup, each component requires its +own package if shipped separately

+

VSI Package

+

VSI packages are quite old but you can use them for integration with Visual +Studio 2005 and newer. It have very simple structure and you can create one even +without Visual Studio. The only trouble with VSI compared to other +approaches is invoking a wizard form which cannot be suppressed. The +installation just cannot run in "quiet" mode. Another trouble with VSI is that a +digital signature is required in order to get rid of a warning dialog. Your control will be always installed under "My Controls" tab in the +Toolbox, which is not always desirable.

+

Advantages: simple creation, installer provided by Visual +Studio, automated creation and signing requires several specific steps
+Disadvantages: no quiet mode (extra steps when custom installer +is used), manual uninstallation

+

VSIX Package

+

VSIX packages came with Visual Studio 2010 so you can integrate with 2010 or +newer. the .VSI and .VSIX file extensions are associated with Visual Studio so +you can simply double-click it or run it via shell. You can also run +VsixInstaller.exe utility that performs the installation. Good news: No more +nag screens when VSIX is not signed - the installer only contains a dialog with +simple text: "This extension does not contain a digital signature." +Even better news: The VsixInstaller supports quiet mode!

+

Please note that VSI and VSIX package installers contain features like +displaying EULA, choosing which components to install or localization. When +deploying your controls for use in Visual Studio, you won't need an installer on +top of the package.

+

Advantages: installer provided by Visual Studio, quiet mode, +fast installation
+Disadvantages: package project required, automated creation is +complicated, no support for VS 2005 and 2008

+

Comparison of Approaches

+

Here is a table summarizing features of the discussed approaches. As you can +see, the VSPackage approach gives you the most freedom, but is also hardest +to implement. We will discuss every approach so +that you will be able to impement the one that suits you best.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 20052008201020122013SpeedInstall AutomationUninstall automation 
Manual installationdepends on user
TCIfast 
EnvDTEslow 
VSImoderate 
VSIXmoderate (faster than VSI) 
VSPackagefast 
+ +

2. Prerequisites

+

We will focus on integration with Visual Studio 2010, 2012 and 2013. Hence you will need:

+
    +
  • Visual Studio 2010 (or 2012, 2013)
  • +
  • Visual Studio 2010 SDK (or 2012 SDK, 2013 SDK)
  • +
  • Microsoft Windows SDK
  • +
+

The VS SDK contains regpkg.exe tool and project templates discussed in VSIX +and VSPackage approaches.

+

The Windows SDK contains gacutil.exe, guidgen.exe, signtool.exe and other +useful tools.

+

There are two kinds of versioning used for Visual Studio. One is based on the +release name (e.g. Visual Studio 2008) and the other is a classic version number +(e.g. 8.0). Both will be used, so it should be noted which version numbers +correspond to which versions of Visual Studio:

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Release nameVersion number
Visual Studio 20058.0
Visual Studio 20089.0
Visual Studio 201010.0
Visual Studio 201211.0
Visual Studio 201312.0
+

3. Creating a Sample Control

+

We will start by creating simple WinForms control for integration in VS +Toolbox.

+

You can start with File - New - Project... (Control+Shift+N) and select +Windows Forms Controls Library template.

+

Of course, you can also create empty Class Library project, add references to +System.Drawing and System.Windows.Forms and create a new control. In fact, any +DLL containing public classes derived from Control will +suffice.

+

We want to support .NET Runtime version 4.0 and 4.5, so the control should be +built against .NET 4.0 to ensure compatibility (the lower framework version you +use, the wider range of compatible frameworks since they are backward +compatible). It should be noted that .NET 4.5 is an in-place update of .NET 4.0 +and hence the 4.5 assemblies will work on machines with 4.0 runtime installed +unless you use some feature specific to 4.5.

+

If you have multiple controls in your assembly and don't want to use some of +them in Toolbox, decorate them with ToolboxItem attribute with +defaultType parameter set to false:

+
+[ToolboxItem(false)]
+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

+

Icons for Toolbox are 16 by 16 pixel images. Various image formats are supported +(BMP, JPEG, PNG and ICO). However, you need to +create 256-color BMP image to ensure transparency. The transparent color is determined by bottom left +pixel of the icon. Transparency works for magenta (#ff00ff):

+

+

The icon file should have same name as the control class (i.e. +SampleControl.BMP).

+

Finally, use ToolboxBitmapAttribute to link icon with the control class:

+
+[ToolboxBitmap(typeof(SampleControl), "Resources.SampleControl.bmp")]
+public partial class SampleControl : UserControl
+{
+	...
+}
+
+

Note that icon location matters, at least in C#. Since I have added +the icon under custom folder named Resources, I need to reference +Resources.SampleControl.bmp instead of just SampleControl.bmp.

+

Here is the resulting transparent icon in Toolbox:

+

+

Marking the Control as Toolbox Item

+

We can mark control as toolbox item by adding a ToolboxItemAttribute +with defaultType parameter set to true:

+
+[ToolboxItem(true)]
+public partial class SampleControl : UserControl
+...
+
+

This decoration is optional since the controls within assembly are +considered toolbox items by default. However, we can mark certain control +classes with ToolboxItem(false) to hide them from Toolbox. This +comes in handy when we have multiple projects and there are too many controls in +the Toolbox because loaded from all the other projects.

+

Signing the Assembly

+

The assembly containing controls (SampleControl.dll in our +case) should be strongly named if we want them installed in GAC +(Global Assembly Cache) later on. This is optional in most cases, but the Toolbox Controls +Installer approach requires the assembly being installed in GAC, hence the +strong name is necessary there.

+

To give an assembly a strong name, open project properties and find +Signing tab:

+

+

Check the "Sign the assembly" option and select "<New...>" +from the combo box. This will create a new .SNK file in your project which will +be used to sign the assembly. You can also browse for existing key file. If you +want to distribute multiple assemblies with custom controls, it is a best +practice to use same strong name key for each assembly (it is possible to have +one .SNK file located in Solution folder and put just a link to that file in +each project; when we browse for the key under the Signing tab, the link will be +used without copying the file).

+

The SNK (Strong Name Key) file is basically a private key to digitally sign +your assembly. There is also a public key which can be used to verify the +assembly and its shorter variant called "public key token" for assembly +identification.

+

4. Manual Toolbox Integration

+

Installing

+

To install component into Visual Studio Toolbox manually, open some form or +control in designer, open the Toolbox window (Control+Alt+X), right-click on the +Toolbox window and select "Choose Items...":

+

+

The "Choose Toolbox Items" dialog will show up:

+

+

You can browse for DLL file with your component by clicking the "Browse..." +button.

+

This is the simplest way of putting component in the Toolbox without extra +actions required.

+

This can be unpleasant for end-users since it means many clicks they have +to perform. I will explain how to integrate a component a little bit more so that it +will be visible under the ".NET Framework Components" tab in the above dialog box and +possibly show up in Toolbox automatically without extra effort of the user.

+

Making the Control Visible in "Choose Toolbox Items" Dialog Box

+

As you can see on the above picture, the SampleControl component is already +displayed in the dialog box under ".NET Framework Components" tab.

+

This is because the folder containing our control is registered as "assembly folder" in the +registry and hence is searched when the above dialog is populated.

+

You can register your own assembly this way by creating a key in registry:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\<your control name>
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AssemblyFolders\<your control name>
+

You can also create key for specific version of .NET runtime (this comes in +handy if you distribute different components for different versions of .NET):

+
32-bit OS: HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\<your control name>
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\<your control name>
+

In both cases, the default value for the key is a string with full path to +the folder with your assembly.

+

You can specify Toolbox tab in which the component should show up by adding +subkey named "Toolbox" with single string value "TabName" this value has Toolbox +tab name as data. When you add such control in the Toolbox, it will reside under +new tab with the specified name:

+

+

+

The control should also appear in "Choose Toolbox Items" dialog box if it +is installed in Global Assembly Cache.

+

The control pops up in the Toolbox automatically in +its own tab in Visual Studio 2012/2013.

+

Installing the Control in GAC

+

The benefit of GAC (Global Assembly Cache) is that the user needs not to +browse for your control. He will just select it form the above dialog box +without having to know where it is actually installed (the dialog is populated +by controls from "assembly folders" and from the GAC).

+

The GAC have one useful feature and disadvantage at the same time: It allows +holding multiple versions of the same assembly. When user makes reference to +your control from GAC and set "Specific Version" to true in +Reference Properties window, it will be tied to that version. When you install an +"update", a new version will be added to GAC, but the user will stay with the +older one. Of course, the "Choose Toolbox Items" dialog will show both versions, +so the user can just replace old reference with the new one.

+

You can make the installer removing any older versions from GAC during +installation and add/keep just the newest one. This will force the user to +replace the reference since it breaks the build.

+

You can work with GAC by using tool called gacutil.exe or +from code. We will discuss both approaches.

+

The gacutil.exe is located in Microsoft Windows SDK directory. There are two +such extecutables:

+
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil.exe
+c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe
+

The former is for .NET Framework up to version 3.5. The latter is for +.NET 4.0 and higher. This is for compatibility reasons as a separate GAC have +been introduced with .NET 4.0.

+

You can install an assembly to GAC by calling:

+
gacutil.exe /i SampleControl.dll
+

To uninstall it, we refer to our assembly by its assembly name, not file +name:

+
gacutil.exe /u SampleControl
+

Finally, you can check if the assembly is installed in GAC by listing any +instances of the provided name:

+
gacutil.exe /l SampleControl
+

It is not wise, however, to use gacutil.exe from a custom +installer as it is located in SDK that user might not have installed. +Furthermore, the SDK license does not allow bundling gacutil.exe +with your installer.

+

Some installers like Inno Setup or MSI allow installing in GAC anyway.

+

You can also work with GAC using +System.EnterpriseServices.Internal.Publish class. The class have two +methods: GacInstall and GacRemove. Both +methods take just path to assembly file as a parameter, so for example:

+
(new Publish()).GacInstall(assemblyPath);
+

will install the specified assembly in GAC.

+

Updating

+

Updating the control depends on how it is installed and referenced.

+

If you have added component in the Toolbox manually via "Choose Toolbox Items" +dialog box and "Browse..." button, i.e. as a file reference, the +default property of such reference is that it simply points to the specified +file no matter which version it have (unless user sets "Specific Version" to +true in reference properties window; the default is +false in this case). Simply replacing the DLL with the control by a newer +file will suffice. If the user have specified "Specific Version" to true, +the build will break because the reference is no longer valid. He needs to +replace the reference by a new one pointing on the same file which now have +newer version.

+

If you have added the component from GAC (these components also appear in the +"Choose Toolbox Items" dialog box), the "Specific Version" property of the +reference is true by default:

+

+

This means that even if you install a newer version of the component in GAC, +the project will still reference the older version and both versions will reside +in GAC.

+

If you remove all versions of the component from GAC (e.g. using +gacutil.exe) and then install just the newest one, the build will break +unless the user changed "Specific Version" property to false.

+

Removing

+

Removing the manually installed control consists of just reverting all the +steps done during the installation.

+

In case of file references, deleting the file is sufficient.

+

In case of tighter integration (GAC, registry), the registry keys need to be +deleted and the control can be removed from GAC (e.g. using gacutil.exe).

+

Resetting Toolbox and Clearing the Toolbox Cache

+

The Toolbox can fall into state where it does not display some items, some are +duplicate and some can be disabled. Sometimes the only remedy is to let Visual +Studio rebuild the +Toolbox from scratch.

+

To do that, right-click on the Toolbox window and select "Reset +Toolbox". Visual Studio will go through all the installed packages and reloads +components into the Toolbox.

+

If this won't help, you can perform hard reset of the Toolbox. Exit +Visual Studio and delete all .TBD files in the following folder:

+
\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

+

Installing

+

Toolbox Control Installer is a VS package pre-installed in Visual Studio 2008 and +newer. It looks in Windows registry for components and loads them in the +Toolbox.

+

Before using TCI, one can check if it is installed in the given version of +VS. For example, the following registry key should exist if the Visual Studio +2010 have TCI installed:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{2c298b35-07da-45f1-96a3-be55d91c8d7a}
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Packages\{2c298b35-07da-45f1-96a3-be55d91c8d7a}
+

The TCI package GUID is always the same so you can make the check for any +version of Visual Studio with the above key (only change the version number from +10.0 to corresponding version number, of course).

+

The only prerequisites for the assembly is that it should have strong name +(i.e. to be signed). See section "Creating the Sample Control" for more +information.

+

The installation consists of putting the control in GAC (see previous +section for more information) and creating registry keys.

+

Suppose we have the SampleControl installed in GAC:

+

+

We will make reference to this assembly from registry by creating the +following key:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
+

The default value for the key is the Toolbox tab name name you would like to +have for the component(s), e.g. "Component Owl".

+

Installing in Visual Studio 2012 and 2013

+

One extra step is required to make this work in Visual Studio 2012/2013, which is +adding the registry key also in its user config hive, i.e.:

+
HKCU\Software\Microsoft\VisualStudio\11.0_Config\ToolboxControlsInstaller\SampleControl, Version=3.7.0.0, Culture=neutral, PublicKeyToken=3cc4c7b61201d46c
+

for VS 2012. Use 12.0_Config for VS 2013.

+

Updating

+

Updating the component is very simple. Just modify the above registry keys by +changing the version number.

+

Removing

+

To remove the component, delete the above registry keys. You should also +remove the corresponding assembly from GAC.

+

Automating Integration with TCI using TciToolboxInstaller

+

I made a simple command-line application called TciToolboxInstaller +which does all the described steps. The usage is simple:

+
TciToolboxInstaller.exe [install|uninstall] [vs2005|vs2008|vs2010|vs2012|vs2013] [tab name] [assembly path]
+

For example, if you like to install SampleControl.dll in Visual Studio 2012 +Toolbox, just call:

+
TciToolboxInstaller.exe install vs2012 "Component Owl" SampleControl.dll
+

You can use quotes for the last two parameters if they contain spaces.

+

The TciToolboxInstaller project is contained in sample +source code.

+

6. Toolbox Integration using DTE

+

Installing

+

The +DTE (Development Tools Environment) approach does not require working +with GAC or registry. It remotely manipulates Visual Studio Toolbox and +adds/removes items as needed.

+

The whole installation is done from (managed) code using COM wrappers. It +works in the following steps:

+
    +
  • Check if an instance of Visual Studio is not running. If not, continue.
  • +
  • Retrieve an EnvDTE.DTE object corresponding to the + version of Visual Studio we want to integrate with.
  • +
  • Create a "dummy" project using the DTE object
  • +
  • Obtain Toolbox window and ToolBox object from it.
  • +
  • Find or create ToolBoxTab object.
  • +
  • Add item in the Toolbox tab (ToolBoxTab.ToolBoxItems.Add).
  • +
  • Wait until current instance of Visual Studio stops running.
  • +
+

Here are some of the step/strongs in C# code - it is an excerpt from +DteToolboxInstaller project provided in sample source code:

+
+// obtain a DTE object
+Type typeDTE = Type.GetTypeFromProgID("VisualStudio.DTE.11.0");
+
+DTE dte = (DTE)Activator.CreateInstance(typeDTE, true);
+
+// create a temporary file
+string tempFile = Path.GetFileNameWithoutExtension(Path.GetTempFileName());
+string tempDirectory = string.Format("{0}{1}", Path.GetTempPath(), tempFile);
+
+// create Visual Studio Solution
+Solution4 solution = (dte.Solution as Solution4);
+
+string templatePath = solution.GetProjectTemplate(TemplateName, "CSharp");
+
+solution.AddFromTemplate(templatePath, tempDirectory, DummyProjectName, false);
+
+// get Toolbox window
+Window window = dte.Windows.Item(Constants.vsWindowKindToolbox);
+
+// get Toolbox
+ToolBox toolBox = (ToolBox)window.Object;
+
+// get Toolbox tab
+ToolBoxTab toolBoxTab = (GetToolBoxTab(toolBox.ToolBoxTabs) ?? toolBox.ToolBoxTabs.Add(this.tabName));
+
+// add new item under the Toolbox tab
+toolBoxTab.ToolBoxItems.Add(assemblyName, this.assemblyPath, vsToolBoxItemFormat.vsToolBoxItemFormatDotNETComponent);
+
+// select the Toolbox tab
+toolBoxTab.Activate();
+
+// cleanup
+dte.Solution.Close(false);
+dte.Quit();
+Marshal.ReleaseComObject(dte);
+
+// wait till Visual Studio turns off completely
+if (IsVisualStudioRunning())
+{
+	Thread.Sleep(VisualStudioProcessTimeout);
+}
+
+

There are several obstacles on implementing the DTE approach.

+

First of all, we need to ensure that Visual Studio is not running during the +installation - this is because we want messages sent to Visual Studio instance +will arrive in the "invisible" one ran from our code and not the one which the +user have currently opened.

+

Similarly, we would like to wait a while until the instance terminates after +installation. This is necessary when integrating with multiple versions of +Visual Studio when just a single instance have to be running at a time. Doing two +installations too quickly in succession may cause the previous one to fail +because a Visual Studio instance is still running.

+

The communication between our code and Visual Studio is mediated by OLE +message filter which needs to be implemented. You can take a look on +DteToolboxInstaller (see below) source code, where is a working installer +implemented that uses this approach.

+

Updating and Removing

+

Since we have full control over the Toolbox with this approach, updating or +removing items/tabs is done with the corresponding DTE objects.

+

Automatic Integration with DTE using DteToolboxInstaller

+

I made a simple command-line application called DteToolboxInstaller +which does all the necessary steps and solves the deals with the discussed +obstacles. The usage is simple:

+
DteToolboxInstaller.exe [install|uninstall] [vs2005|vs2008|vs2010|vs2012|vs2013] [tab name] [assembly path]
+

For example, if you like to install SampleControl.dll in Visual Studio 2012 +Toolbox, just call:

+
DteToolboxInstaller.exe install vs2012 "Component Owl" SampleControl.dll
+

You can use quotes for the last two parameters if they contain spaces.

+

The DteToolboxInstaller project is contained in sample +source code.

+

7. Toolbox Integration using VSI Packages

+

Let's consider you don't have a custom installer and want to distribute your +components in some kind of simple extension package that Visual Studio +understands.

+

Visual Studio contains an installer for so called VSI packages that will +do the integration work for you. If you have Visual Studio installed, the .VSI +extension is already associated with the Visual Studio Content Installer.

+

Creating the VSI Package

+

I have created an empty folder and copied SampleControl.dll in +it. All that is needed to make a VSI package is to create a .VSCONTENT file, +which is simply a XML file satisfying +Visual Studio Content Installer schema:

+
+<VSContent xmlns="http://schemas.microsoft.com/developer/vscontent/2005"> 
+    <Content>
+        <FileName>SampleControl.dll</FileName>
+        <DisplayName>SampleControl</DisplayName>
+        <Description>ComponentOwl.com SampleControl</Description>
+        <FileContentType>Toolbox Control</FileContentType>
+        <ContentVersion>2.0</ContentVersion>
+    </Content>
+</VSContent>
+
+

The content is readable and pretty straightforward. The +ContentVersion element can contain either "1.0" (support for Visual +Studio 2005, 2008 and 2010) or "2.0" (support for Visual Studio 2008, 2010, +2012, 2013).

+

Now we zip the two files and rename extension of the archive to .VSI. We +should end up with the following three files:

+

+

If you double-click the SampleControl.vsi, the Visual Studio +Content Installer opens up. You can start the installer from command line as +well:

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

+

Because we cannot sign ZIP files, we need to convert the .VSI file (which is +actually a ZIP archive with just an altered extension) to self-extracting archive that the Visual Studio Content +Installer recognizes. There is a tool called MakeZipExe +to do this task:

+
MakeZipExe.exe -zipfile:SampleControl.vsi -output:SampleControl-unsigned.vsi -overwrite
+

The MakeZipExe tool is located at Visual Studio's binary +folder:

+
c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\MakeZipExe.exe
+

The second step is signing the .EXE file using signtool.exe. +You can find signtool.exe in Microsoft Windows SDK, i.e.:

+
c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe
+

Here is a sample usage of signtool.exe:

+
signtool.exe sign /du "http://www.componentowl.com/sample-control" /f certificate.pfx /p abc123 /t "http://timestamp.comodoca.com/authenticode" "SampleControl-signed.vsi"
+

When signed, the "Publisher" and "Information URL" labels are filled in the +installer and no dialog box appears. The benefit of signing is obvious - your +users will know they are installing trusted, possibly high-quality software and there +is a higher chance of your software being used more widely (for example, the +government sector usually require such certified software).

+

You can also add an EULA to your VSI package. This can be done by adding a +comment metadata in the archive by ZIP archiver that supports such feature (e.g. +WinZip).

+

Uninstalling the Control from Toolbox

+

As far as I know, the control cannot be removed from the Toolbox +programmatically. You need to delete the control's DLL located at

+
c:\Users\<user>\Documents\Visual Studio 2010\Controls\
+

the same should be done for every version of Visual Studio installed.

+

In Visual Studio, right-click on Toolbox and select "Reset Toolbox". The +component will not be found and disappear. Similarly, you can just +delete the control from the Toolbox or select "Choose Items..." from context +menu and untick the control there:

+

 

+

Drawbacks of Using VSI Package

+

One drawback of using VSI package is that the installer runs every version of +VS IDE you have installed and which is supported by the package. The form will +disappear eventually, but it lowers user experience.

+

Another drawback is that when you want to update your control, the installer +offers whether to rename, replace or skip the file (e.g. SampleControl.dll). User have to decide to +update, which also slows down installation and requires user interaction.

+

You also cannot specify custom Toolbox tab. All controls are installed under +"My Controls" tab:

+

+

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.

+

Although VSPackage and our sample control can be packed within the same +assembly, we will create a separate Visual Studio Package project.

+

When user opens Toolbox in VS for the first time after installation, the IDE +will look in registry for any registered packages and load them (if not loaded +previously).

+

Creating VSPackage Project

+

We would like to have our VSPackage compatible with VS 2010, 2012 +and 2013, so we will work in Visual Studio 2010.

+

Select "File - New - Project.." (Control+Shift+N) and +select the "Visual Studio Package" template:

+

+

This will start a "Visual Studio Package Wizard":

+

+

You can leave most options in the wizard on defaults. Leave all the check boxes unchecked +on "Page 3 of 7" and "Page 7 of 7":

+

+

+

Now we will take a look on the generated files. Open the Guids.cs +file:

+
+// Guids.cs
+// MUST match guids.h
+using System;
+
+namespace ComponentOwl.ToolboxIntegration
+{
+    static class GuidList
+    {
+        public const string GuidSampleVSPackagePkgString = "00000000-8fdf-48b6-98f8-4ff21a3a4def";
+        public const string GuidSampleVSPackageCmdSetString = "def6519d-5ace-4062-95d6-4ee43f4a5de9";
+
+        public static readonly Guid GuidSampleVSPackageCmdSet = new Guid(GuidSampleVSPackageCmdSetString);
+    };
+}
+
+

Here are the GUIDs that +uniquely identify your package. I have edited the first four hex digits of +package identifier to "00000000" so that we can find it more easily later. This is +just for purpose of convenience in our sample project. Always use randomly generated GUID +in a real-world application. Visual Studio will generate a new GUID +whenever you create a new VSPackage project.

+

You can also generate new GUIDs any time, for example using +online GUID +generator or guidgen.exe utility from Windows SDK. When these numbers are changed, your package will be different from +Visual Studio's point of view.

+

Another important file here is source.extension.vsixmanifest. +If you double-click on the file in Solution Explorer, the VSIX Manifest Designer +will show up:

+

+

Not all the fields are mandatory, but I will fill all of them nevertheless:

+
    +
  • ID - Unique product "Identity" - the ID is limited to + 100 characters and the recommended format is "Company.Product.Feature.Name". + We can leave the VSPackage's GUID here.
  • +
  • Product Name - This field is used for Toolbox Tab name, + so I will put "Component Owl Controls" here.
  • +
  • Author - Your name or company name - + "ComponentOwl.com", for example.
  • +
  • Version - This is version of the package and its + contents. The format is same as for assembly versions: + Major.Minor.Build.Revision. I will put "1.4.0.128" here.
  • +
  • Description - Speaks for itself.
  • +
  • Locale - Language for the package.
  • +
  • Supported VS Editions - Here you can specify which + editions of Visual Studio 2010 you would like to support. Of course, it can + support VS 2012/2013 as well, but for now I will just check Ultimate, Premium and + Professional editions.
  • +
  • Supported Framework Runtime - Minimum and maximum .NET + Framework Runtime versions your extension supports. Since my component will + support 4.0 and 4.5 runtime, I will put 4.0 and 4.5 here.
  • +
+

Adding Support for Visual Studio 2012/2013

+

We have specified supported Visual Studio Editions in VSIX Manifest Designer, +through the "Visual Studio Version and Edition" dialog box:

+

+

As you can see, only Visual Studio 2010 is supported here because VSIX is new +to 2010 and of course VS 2010 does not know about 2012/2013. We have to +source.extensions.vsixmanifest file for manual editing. Select the file +in Solution Explorer and press F7 (View Code):

+
+<?xml version="1.0" encoding="utf-8"?>
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+  <Identifier Id="aaaaaaaa-8fdf-48b6-98f8-4ff21a3a4def">
+    <Name>SampleVsPackage</Name>
+    <Author>ComponentOwl.com</Author>
+    <Version>1.0</Version>
+    <Description xml:space="preserve">Information about my package</Description>
+    <Locale>1033</Locale>
+    <InstalledByMsi>false</InstalledByMsi>
+    <SupportedProducts>
+      <VisualStudio Version="10.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+    </SupportedProducts>
+    <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5" />
+  </Identifier>
+  <References>
+    <Reference Id="Microsoft.VisualStudio.MPF" MinVersion="10.0">
+      <Name>Visual Studio MPF</Name>
+    </Reference>
+  </References>
+  <Content>
+    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
+  </Content>
+</Vsix>
+
+

Take a look on the Vsix/Identifier/SupportedProducts/VisualStudio +element (highlighted in bold). Copy and paste this element and modify +Version attribute on the second one to "11.0":

+
+<VisualStudio Version="11.0">
+  <Edition>Ultimate</Edition>
+  <Edition>Premium</Edition>
+  <Edition>Pro</Edition>
+</VisualStudio>
+
+

The edition tags are valid for version 11.0 because Visual Studio 2012 +template generates the same edition names.

+

Writing Package Code

+

Now we will take a look on the VSPackage code itself. Open the +SampleVSPackage.cs +file. I kept only the necessary code and added the ProvideToolboxItems attribute:

+
+[PackageRegistration(UseManagedResourcesOnly = true)]
+[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
+[Guid(GuidList.guidSampleVsPackagePkgString)]
+[ProvideToolboxItems(1)]
+public sealed class SampleVsPackage : Package
+{
+}
+
+

Our VSPackage implementation inherits from +Microsoft.VisualStudio.Shell.Package class and is decorated by three +attributes:

+
    +
  • PackageRegistrationAttribute - Specifies that package + registration tool should look for additional attributes (will be discussed + later).
  • +
  • InstalledProductRegistrationAttribute - Provides + information for the Visual Studio splash screen and About box.
  • +
  • GuidAttribute - Provides custom GUID for the class + because automatic GUID is undesirable here (Visual Studio need to be able to trace our + package by its unique ID).
  • +
  • ProvideToolboxItemsAttribute - Specifies that the + package provides toolbox items. There are various uses of VSPackages, but we + are interested in intalling controls to Visual Studio Toolbox, hence this + attribute.
  • +
+

The strings "#110" and "#112" in +InstalledProductRegistrationAttribute refer to keys in +VSPackage.resx. You can open this file and edit package name and +description there:

+

+

Now we write methods within SampleVsPackage class that work with the Toolbox:

+
+private const string ComponentFile = "SampleControl.dll";
+private const string TabName = "Component Owl";
+
+private void InstallToolboxItems()
+{
+    IToolboxService toolboxService = (IToolboxService)GetService(typeof(IToolboxService));
+
+    foreach (ToolboxItem item in ToolboxService.GetToolboxItems(GetAssemblyName()))
+    {
+        toolboxService.AddToolboxItem(item, TabName);
+    }
+}
+
+private void RemoveToolboxItems()
+{
+    IToolboxService toolboxService = (IToolboxService)GetService(typeof(IToolboxService));
+
+    foreach (ToolboxItem item in ToolboxService.GetToolboxItems(GetAssemblyName()))
+    {
+        toolboxService.RemoveToolboxItem(item);
+    }
+}
+
+private AssemblyName GetAssemblyName()
+{
+    string pathAssembly = String.Concat(
+        Path.GetDirectoryName(GetType().Assembly.Location),
+        Path.DirectorySeparatorChar,
+        ComponentFile);
+
+    return AssemblyName.GetAssemblyName(pathAssembly);
+}
+
+

The method names InstallToolboxItems and +RemoveToolboxItems +speak for themselves. Both methods look for SampleControl.dll in the same +location as the VSPackage's assembly. They get all toolbox items from the +assembly and either put them under "Component Owl" tab or remove them.

+

The ToolboxService class comes from +System.Drawing.Design and we need to add reference to this asssembly in +order to use ToolboxService.

+

Building the Package

+

Before building the SampleVsPackage project, open project +properties, find the VSIX tab and uncheck all the options:

+

+

Finally, build the project. Just two files, SampleVsPackage.dll +and SampleVsPackage.pdb, should be generated.

+

Registering the Package

+

Until the package can be loaded by Visual Studio, it needs to be +registered. +The registration is simply writing specific keys into Windows Registry.

+

To do that, find the Package Registration Utility (RegPkg.exe). It should be +located in Visual Studio SDK directory, e.g.:

+
32-bit OS: c:\Program Files\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe
+64-bit OS: c:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\VisualStudioIntegration\Tools\Bin\RegPkg.exe
+

You can copy the tool where it suits you.

+

Here is a sample usage of RegPkg:

+
32-bit OS: RegPkg.exe /root:SOFTWARE\Microsoft\VisualStudio\11.0 /codebase SampleVsPackage.dll
+64-bit OS: RegPkg.exe /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0 /codebase SampleVsPackage.dll
+

This will write package registration information into the Windows Registry, +hence registers the package. Similar call have to be done by your custom installer in +order to register the package.

+

Instead of writing into registry, RegPkg.exe can gereate a REG file (several +other formats are available) so that you can write package information into +registry using the file. To do that, use /regfile parameter:

+
32-bit OS: RegPkg.exe /root:SOFTWARE\Microsoft\VisualStudio\11.0 /regfile:SampleVsPackage.ref /codebase SampleVsPackage.dll
+64-bit OS: RegPkg.exe /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\11.0 /regfile:SampleVsPackage.ref /codebase SampleVsPackage.dll
+

This creates SampleVsPackge.reg file you can use any time +later instead of RegPkg.exe itself.

+

There are two other options for specifying how the package will be registered: +codebase and assembly. When /codebase +parameter is used (as in the sample above), the registry will point to the location on disk where your +package is located (see + +Assembly.CodeBase property for more information).

+

Another option is the /assembly parameter - this assumbes +that your VSPackage assembly is located in GAC (Global Assembly Cache). See +section Installing the Control in GAC for more information.

+

You can check out the registry after the package registration:

+

+

Package Registration for Visual Studio 2012/2013

+

Regrettably, simply registering package is not enough for Visual Studio 2012/2013 to load +it (see this + +blog post). Because of performance optimizations, VS developers removed +feature that looks for changes in VS registry root and thus we need to call

+
devenv.exe /Setup
+

In order to finish package registration.

+

This call can be very time consuming since Visual Studio 2012/2013 goes through all +extensions and looks for changes. On the other hand, I tried running devenv.exe with /Setup +parameter on fresh install of Visual Studio 2012/2013 and it was instant. On older +installation, however, the operation took well over a minute (it behaves just +like Microsoft Windows, which progressively slows down during its lifetime).

+

We can speed things up by a little hack. One of the things the /Setup +does is copying registry keys from HKLM to Visual Studio's 11.0_Config hive (or 12.0_Config, respectively). We can just write registry under this key +instead of calling devenv.exe and avoid possibly lengthy operation.

+

The hive is located in +HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config.

+

So let's open and edit the SampleVsPackage.reg file we have +generated using RegPkg.exe earlier. Here is the modified version where only the +registry root has been changed:

+
+REGEDIT4
+
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\InstalledProducts\SampleVsPackage]
+@="#110"
+"Package"="{00000000-8fdf-48b6-98f8-4ff21a3a4def}"
+"PID"="1.0"
+"ProductDetails"="#112"
+"LogoID"="#400"
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\{00000000-8fdf-48b6-98f8-4ff21a3a4def}]
+@="ComponentOwl.ToolboxIntegration.SampleVsPackage, SampleVsPackage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30782fc44cbe0af5"
+"InprocServer32"="C:\\Windows\\SYSTEM32\\MSCOREE.DLL"
+"Class"="ComponentOwl.ToolboxIntegration.SampleVsPackage"
+"CodeBase"="C:\\projects\\articles\\2012-10-22 Visual Studio Toolbox Control Integration\\ToolboxIntegration\\SampleVsPackage\\bin\\Debug\\SampleVsPackage.DLL"
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\{00000000-8fdf-48b6-98f8-4ff21a3a4def}]
+[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\{00000000-8fdf-48b6-98f8-4ff21a3a4def}\Toolbox]
+"Default Items"=dword:00000001
+
+

The highlighted parts have been edited.

+

So in addition to standard package registration, we also write in the +registry where Visual Studio 2012/2013 user config hive resides. This is sufficient +for our VSPackage to load.

+

However, this is really a hack - editing of user configuration in registry +may cause Visual Studio to not load your user settings and show up as when +running for the first time. I tried this hack on my machine and it worked, but +there may be some hidden glitches. If you want to follow standard procedure, +just call "devenv.exe /Setup".

+

Loading VSPackage

+

If you did all the previous steps, your package should load when you open +Windows Forms Designer and show Toolbox (Cotrol+Alt+X). You can notice your +package name displaying in status bar for a while, then SampleControl should show up in the +Toolbox under "Component Owl" tab:

+

+

Displaying Your Extension in VS About Box

+

If you want information about your extension to be visible in Visual Studio +splash screen and About Box, implement IVsInstalledProduct +interface:

+
+...
+
+public sealed class SampleVsPackage : Package, IVsInstalledProduct
+{
+
+...
+
+	int IVsInstalledProduct.IdBmpSplash(out uint pIdBmp)
+	{
+	    pIdBmp = 0;
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.IdIcoLogoForAboutbox(out uint pIdIco)
+	{
+	    pIdIco = 400;
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.OfficialName(out string pbstrName)
+	{
+	    pbstrName = "ComponentOwl SampleControl";
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.ProductDetails(out string pbstrProductDetails)
+	{
+	    pbstrProductDetails = "SampleControl control.\r\nFor more information see http://www.componentowl.com";
+	    return 0;
+	}
+	
+	int IVsInstalledProduct.ProductID(out string pbstrPID)
+	{
+	    pbstrPID = "3.3.0.0";
+	    return 0;
+	}
+	
+	...
+	
+}
+
+

This code causes the component to show up in the list of "Installed Products" +in Visual Studio about box:

+

+

As for the splash screen, Visual Studio 2008 used to display extensions in +its splash screen, but later version do not:

+

    +    +

+

Troubleshooting Package Load Failures

+

You may encounter this dialog when playing with packages:

+

+

When you click "No", the package will be skipped later when loading packages. +You can re-enable loading all packages by running

+
devenv.exe /ResetSkipPkgs
+

To debug package load problem, you can do just what the dialog says. Run

+
devenv.exe /log
+

and then take a look on the ActivityLog.xml (path is shown +in the dialog). There you can find cause of the problem in one of the "entry" +elements:

+
+...
+<entry>
+  <record>106</record>
+  <time>2012/10/26 06:07:36.920</time>
+  <type>Error</type>
+  <source>VisualStudio</source>
+  <description>CreateInstance failed for package [ComponentOwl.ToolboxIntegration.SampleVSPackage, SampleVSPackage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=87379c2b0cde9bc3]</description>
+  <guid>{761F0CB7-64C1-4695-91D2-6E3C26C12314}</guid>
+  <hr>80070002</hr>
+  <errorinfo>Could not load file or assembly 'file:///C:\projects\articles\2012-10-22 Visual Studio Toolbox Control Integration\ToolboxIntegration\SampleVSPackage\bin\SampleVSPackage.DLL' or one of its dependencies. The system cannot find the file specified.</errorinfo>
+</entry>
+...
+
+

In this particular case, the problem was caused by changing output path from +"bin\SampleVSPackage.dll" to "bin\Debug\SampleVSPackage.dll" +so the file does not longer exist at the location for which it is registered. +The solution is to either change the location back or unregister the package +(i.e. remove the corresponding registry entries - the GUID is provided in the +log).

+

Past Troubles with Package Load Keys

+

The above problem with package load failure happened on Visual Studio 2005 +and 2008 because a Package Load Key (PLK) had to be provided by the VSPackage. +The PLK is basically a hashcode computed from metadata about package (name, +author/company, version). The PLK had to be obtained from a website provided by +Microsoft.

+

I believe PLK caused many troubles and headaches to developers, including +myself.

+

This is no longer relevant for Visual Studio 2010 and newer (requirement for +PLKs removed), so we won't discuss this topic in more depth

+

Update Control Already Installed in Toolbox

+

Suppose we have already integrated SampleControl version 3.3.0.0 in the +Visual Sudio Toolbox:

+

+

We would like to update this control to version 3.4.0.0.

+

First of all, we update assembly information of the SampleControl +project:

+

+

If we "deploy" (copy) SampleControl.dll to the folder with +SampleVsPackage.dll where it is registered, the SampleControl will no longer be +visible in Toolbox, because the control in Toolbox should still be 3.3.0.0 and +this version is no longer to be found.

+

You don't need to increment assembly version of the SampleVsPackage project, +but at least you have to increment parameter of the ProvideToolboxItems attribute:

+
+[PackageRegistration(UseManagedResourcesOnly = true)]
+[InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)]
+[Guid(GuidList.guidSampleVsPackagePkgString)]
+[ProvideToolboxItems(2)]
+public sealed class SampleVsPackage : Package, IVsInstalledProduct
+{
+	...
+}
+
+

The package need to be re-registered (see section Registering the Package) +which will effectively update just the "Default Items" value in the Toolbox key:

+

+

This will cause Visual Studio to update your control in the Toolbox:

+

+

Remove Control from the Toolbox

+

Now we would like to remove control from the Visual Studio Toolbox. This +step can be done by custom uninstaller.

+

One way to do that is to simply unregister the VSPackage using +RegPkg.exe:

+
32-bit OS: RegPkg.exe /unregister /root:SOFTWARE\Microsoft\VisualStudio\10.0 SampleVsPackage.dll
+64-bit OS: RegPkg.exe /First of all, we update assembly information of the unregisFirst of all, we update assembly information of the ter /root:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0 SampleVsPackage.dll
+

You can also do this manually by simply removing the registry entry of the +corresponding package, e.g.:

+
32-bit OS: HKLM\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{a9696de6-e209-414d-bbec-a0506fb0e924}
+64-bit OS: HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\Packages\{a9696de6-e209-414d-bbec-a0506fb0e924}
+

On Visual Studio 2012/2013, the key need to be removed in user config registry +hive or call "devenv.exe /Setup" after removing the registry key in HKLM. For +more information, see section Package Registration for Visual Studio 2012/2013.

+

9. Toolbox Integration using VSIX Packages

+

Microsoft have removed most /po +f the drawbacks of VSI packages by introducing VSIX. The +price is that VSIX is a little bit more complicated and Visual Studio 2008 is no +longer supported.

+

There are two versions of VSIX Schema. Version 1.0 is what Visual Studio 2010 +understand. There is also version 2.0 for Visual Studio 2012/2013. We want a VSIX +Package compatible with both, so we will work in Visual Studio 2010.

+

Create a new Project from Template

+

If you have Visual Studio 2010 SDK installed, you can create a new VSIX +package project with control from a template.

+

Select "File - New - Project.." (Control+Shift+N) and +then select the "Windows Forms Toolbox Control" or "WPF +Toolbox Control" template:

+

+

The projects is basically a VSPackage wrapped in VSIX container after +build. The package assembly also contain the control class named +ToolboxControl.

+

There are three important files generated by the template:

+
    +
  • ProvideToolboxControlAttribute.cs - This is attribute + for ToolboxControl class. We will discuss it later.
  • +
  • source.extension.vsixmanifest - This is manifest XML + file for our VSIX package. It contains all information about the package and + what it contains.
  • +
  • ToolboxControl.cs - This is a sample control to be + installed in Visual Studio Toolbox.
  • +
+

Create a new Project from VSPackage

+

We can also start with VSPackage like the one we have already created in +previous section. I will create a new VSPackage project (as in previous +chapter), name it SampleVsixPackage and configure it according +to "Windows Forms Toolbox Control" template to show you all the differences.

+

The basic configuration of source.extension.vsixmanifest is +the same as in previous chapter.

+

Project properties differs from VSPackage we have created earlier on the VSIX +tab, where we have the first two check boxes checked:

+

+

Update the Manifest File

+

Double-click on the source.extension.vsixmanifest file to +open up the VSIX Manifest Designer:

+

+

If you are not sure about some part of the form, please take a look on +section Create VSPackage Project, where the form is described in more +detail.

+

In addition to previous VSPackage project, I have also filled the following +optional boxes:

+
    +
  • License Terms - If you have EULA or other licence in + TXT or RTF format, you can browse for it.
  • +
  • Icon - You can browse for an icon representing the + extension. It should be 32x32 pixels large, PNG, BMP, JPEG or ICO image + format.
  • +
  • Preview Image - Thumbnail image representing the + extension. It should be 200x200 pixels large, PNG, BMP or JPEG image format.
  • +
  • More Info URL - URL of a website containing more + information about the extension.
  • +
  • Getting Started Guide - URL of a website with + documentation; you can also provide relative path to HTML file with the + local documentation.
  • +
+

Add Control

+

Let's create a new WPF control within the SampleVsixPackage +project itself. I will name it SampleWpfControl to distinguish +it from SampleControl we have created earlier.

+

To ensure our control will show up in Toolbox of Visual Studio 2012/2013, we have +to decorate the SampleWpfControl class by +ProvideToolboxControlAttribute:

+
+[ProvideToolboxControl("SampleWpfControl", true)]
+public partial class SampleWpfControl : UserControl
+{
+	...
+}
+
+

You also have to provide implementation of the attribute class:

+
+[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+[System.Runtime.InteropServices.ComVisibleAttribute(false)]
+public sealed class ProvideToolboxControlAttribute : RegistrationAttribute
+{
+	private const string ToolboxControlsInstallerPath = "ToolboxControlsInstaller";
+
+	public ProvideToolboxControlAttribute(string name, bool isWpfControls)
+	{
+		if (name == null)
+		{
+			throw new ArgumentException("name");
+		}
+
+		this.Name = name;
+		this.IsWpfControls = isWpfControls;
+	}
+
+	private bool IsWpfControls { get; set; }
+	private string Name { get; set; }
+
+	public override void Register(RegistrationAttribute.RegistrationContext context)
+	{
+		if (context == null)
+		{
+			throw new ArgumentNullException("context");
+		}
+
+		using (Key key = context.CreateKey(String.Format(CultureInfo.InvariantCulture, "{0}\\{1}",
+														 ToolboxControlsInstallerPath,
+														 context.ComponentType.Assembly.FullName)))
+		{
+			key.SetValue(String.Empty, this.Name);
+			key.SetValue("Codebase", context.CodeBase);
+			if (this.IsWpfControls)
+			{
+				key.SetValue("WPFControls", "1");
+			}
+		}
+
+	}
+
+	public override void Unregister(RegistrationAttribute.RegistrationContext context)
+	{
+		if (context != null)
+		{
+			context.RemoveKey(String.Format(CultureInfo.InvariantCulture, "{0}\\{1}",
+														 ToolboxControlsInstallerPath,
+														 context.ComponentType.AssemblyQualifiedName));
+		}
+	}
+}
+
+

This code is generated if you create project from template.

+

The project in Solution Explorer should look like this:

+

+

+

Adding Controls from Other Projects

+

What if we would like to use SampleControl.dll as in the VSI +package scenario?

+

Of course, we can click "Add Content" in the VSIX Manifest designer and +simply add "Toolbox Control" content from other project:

+

+

However, this is possible only if the SampleControl project +itself is a package project!

+

Lucklily, since the VSIX package is still just a ZIP archive, we can take a +look on how to add such external DLLs to it manually.

+

Setting Up VSIX Installer

+

The VSIX Installer tool (VsixInstaller.exe) is located in +Visual Studio's binary folder:

+
32-bit OS: c:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe
+64-bit OS: c:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe
+

You can hit F6 and Visual Studio will build your project to create +SampleVsixPackage.vsix file. This is our VSIX package.

+

The VSIX Installer should be associated with the .VSIX file extension, so it is +usually possible +to just double-click on the file and see the VSIX installer.

+

The installation can fail in the very first step:

+

+

This problem appears if you have invalid manifest file. If this happen, open +source.extension.vsixmanifest and fill in all missing data. +Furthermore, you can check if the XML is valid according to +VSIX Extension +Schema.

+

Now we are able to rebuild and run the VSIX installer again:

+

+

Make the VSIX Package Compatible with Visual Studio 2012/2013

+

To make our VSIX package working with Visual Studio 2012 and newer, we need +to manually update the manifest file. Select the +source.extension.vsixmanifest file and press F7 (View Code):

+
+<?xml version="1.0" encoding="utf-8"?>
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+  <Identifier Id="ComponentOwl.ToolboxControl.Express">
+    <Name>Component Owl</Name>
+    <Author>ComponentOwl.com</Author>
+    <Version>1.0</Version>
+    <Description xml:space="preserve">Windows Forms Toolbox Control</Description>
+    <Locale>1033</Locale>
+    <MoreInfoUrl>http://www.componentowl.com/toolbox-control</MoreInfoUrl>
+    <License>license.rtf</License>
+    <GettingStartedGuide>http://www.componentowl.com/documentation/toolbox-control</GettingStartedGuide>
+    <Icon>icon.png</Icon>
+    <PreviewImage>overview.jpg</PreviewImage>
+    <SupportedProducts>
+      <VisualStudio Version="10.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+      <VisualStudio Version="11.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+      <VisualStudio Version="12.0">
+        <Edition>Ultimate</Edition>
+        <Edition>Premium</Edition>
+        <Edition>Pro</Edition>
+      </VisualStudio>
+    </SupportedProducts>
+    <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="5.0" />
+  </Identifier>
+  <References />
+  <Content>
+    <ToolboxControl>|%CurrentProject%;PkgdefProjectOutputGroup|</ToolboxControl>
+  </Content>
+</Vsix>
+
+

The bolded text have been added. I have simply added a new +VisualStudio element with higher version and all the editions (they are +relevant for VS 2012 and 2013 as its own template also generates these).

+

The VSIX installer will show Visual Studio 2012 options as +well after this update (if installed, of course):

+

+

Please note that Visual Studio 2012/2013 also works with 2.0 version of the +schema, so if you create VSIX package in Visual Studio 2012/2013, it won't be +compatible with 2010. The solution is hence to use 1.0 version of the schema +and add support for newer Visual Studio as described earlier.

+

A great advantage over VSI package is that installation of Toolbox control is +really fast with VSIX.

+

Regrettably, the control won't show up in Visual Studio 2012/2013 Toolbox in its +default configuration. You need to enable loading-per user extensions (this +option is enabled by default in Visual Studio 2010):

+

+

Signing the VSIX Package

+

Unlike older VSI package, there is no nag screen when the package is not +signed. Instead, a label appears informing user that the package is not +signed.

+

To sign a VSIX package, we need PackageSignatureManager from +System.IO.Packaging (WindowsBase.dll). I made a simple command-line application called SignVsix (you can +find it in sample source code) that takes three arguments (VSIX file path, PFX +certificate path and password for the certificate):

+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.IO.Packaging;
+using System.Security.Cryptography;
+using System.Security.Cryptography.X509Certificates;
+
+internal class Program
+{
+	private static void Main(string[] args)
+	{
+		// first argument - path to VSIX package
+		string paramPathPackage = args[0].Replace("\"", "");
+		// second argument - path to PFX certificate
+		string paramPathCertificate = args[1].Replace("\"", "");
+		// third argument - password for the certificate
+		string paramPassword = args[2];
+
+		// open VSIX package
+		Package package = Package.Open(paramPathPackage, FileMode.Open);
+
+		// load certificate
+		byte[] certificate = File.ReadAllBytes(paramPathCertificate);
+
+		// sign all parts of the package
+		var signatureManager = new PackageDigitalSignatureManager(package)
+		{
+			CertificateOption = CertificateEmbeddingOption.InSignaturePart
+		};
+
+		List<Uri> partsToSign = new List<Uri>();
+
+		foreach (PackagePart packagePart in package.GetParts())
+		{
+			partsToSign.Add(packagePart.Uri);
+		}
+
+		partsToSign.Add(PackUriHelper.GetRelationshipPartUri(signatureManager.SignatureOrigin));
+		partsToSign.Add(signatureManager.SignatureOrigin);
+		partsToSign.Add(PackUriHelper.GetRelationshipPartUri(new Uri("/", UriKind.RelativeOrAbsolute)));
+
+		try
+		{
+			signatureManager.Sign(partsToSign, new X509Certificate2(certificate, paramPassword));
+		}
+		catch (CryptographicException cryptographicException)
+		{
+			Console.WriteLine("Signing failed: {0}", cryptographicException.Message);
+		}
+	}
+}
+
+

The usage is very simple:

+
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 +Visual Studio 2010 SDK and we cannot expect this dependency present on end-user's machine. This +library contains ProvideToolboxControlAttribute class, which is +used by our ToolboxControl.

+

Since a software development company may want to develop many components, it would be nice to have an +universal VSIX package which can be adjusted for any control.

+

Let's take a look on the ToolboxControl.vsix. It is simply a +ZIP archive containing the manifest, resources, ToolboxControl binary and a +ToolboxControl.pkgdef file. If we look through all its content, +we easily generate our own VSIX packages on demand, even without Visual Studio. +There should also be a programmatic way on generating VSIX packages using +classes from System.IO.Packaging.

+

Update Toolbox Control via VSIX Package

+

If you made changes to your control and want to re-install the package, an +error message appear:

+

+

In order to provide an update, you need to increment version number in the +VSIX manifest:

+

+

You can also increment version number in the Package class attribute, but +this is not necessary for the VSIX to perform update:

+
+[InstalledProductRegistration("#110", "#112", "2.0", IconResourceID = 400)]
+[Guid(GuidList.guidSampleVsixPackagePkgString)]
+public sealed class SampleVsixPackage : Package
+{
+	...
+}
+
+

Of course, you can also increment version of the assembly.

+

Uninstall the VSIX Package

+

The VSIX Installer can be used to uninstall control from the Toolbox via +/uninstall parameter followed by package ID (the constant located in +Guids.cs: GuidList.guidSampleVsixPackagePkgString):

+
VSIXInstaller.exe /uninstall:e3dfd099-d0ab-4b8e-b26d-639032c29ad9
+

It is also possible to uninstall VSIX Package manually using +Extension Manager (Tools - Extension Manager...). In Visual Studio +2012/2013, the corresponding dialog is called Extensions and Updates +(Tools - Extensions and Updates...).

+

+

Quiet Mode

+

Both installation and uninstallation can be performed in quiet mode by using /quiet parameter. This will suppress +user interface of the installer, which is handy when you want to automate +Toolbox control integration with your custom installer.

+

10. Supporting Multiple Version of .NET Framework

+

Since .NET Framework is backward-compatible, building a component on lowest +possible framework ensures compatibility with higher versions as well.

+

I heard from several users that the component may not be displayed in Toolbox +although it seems that the Toolbox respects the .NET compatibility and display +.NET 2.0 component even when working in .NET 4.0 (Client Profile) project.

+

There is also a scenario where you want to support additional features from +higher version of .NET (for example, drawing text using GDI+ in .NET 2.0 and +drawing text using WPF in .NET 3.5 and higher). You may also want to add +extensive Windows Forms Designer support, which is not available in Client +Profile framework.

+

The solution to this is to build several DLLs, each with different features +and possibly different target frameworks. Then integrate all the assemblies.

+

This does not pose a problem when DTE approach is used, +alhtough it is better to give each version of the component unique name or place +them in separate tabs (e.g. "Component Owl WinForms - .NET 2.0").

+

When TCI approach is used, each version of the assembly +requires different public key token, because they have to reside in GAC +side-by-side. Furthermore, they need a separate registry key based on the public +key token.

+

The VSI and VSIX approaches require +renaming the component or customizing Toolbox tab in the +ProvideToolboxControlAttribute (see part Toolbox Control Integration using +VSIX Packages for more information).

+

The VSPackage approach allows you to place all the versions +in Visual Studio Toolbox under their respective tabs.

+

When manual approach is used, you can of course add each +version of the assembly separately and also create separate tabs in the Toolbox.

+ +

11. Sample Source Code

+ +

The attached sample source is a Visual Studio 2010 Solution containing +implementations of all the presented approaches. The binaries are contained +under "bin\Release" subfolders and batch files (.CMD extension) are provided +where appropriate.

+ +

+Download sample source code (212 KB) +

+ +

You can find the following folders in the archive:

+

DteToolboxInstaller - A command-line application for +installing/uninstalling assemblies in VS Toolbox using Visual Studio Automation +Object Model (DTE). Custom tab name and VS version can be specified. The tool +can be used in real-world application.

+

SampleControl - Windows Forms control for testing the +integration.

+

SampleVsixPackage - VSIX package project (basically a +VSPackage that is further packaged with the sample control), the resulting +package can be installed by VSIX Installer that comes with Visual Studio.

+

SampleVsPackage - VSPackage that is able to install all +control assemblies located in its own folder. Contains batch files for package +registration/unregistration.

+

SignVsix - A command-line application for signing VSIX +packages. Sample batch file is provided. Valid PFX certificate need to be +provided by the user.

+

TciToolboxInstaller - A command-line application for +installing/uninstalling assemblies in VS Toolbox using Toolbox Control Installer +package (but does not depend on it). Custom tab name and VS version can be +specified. The tool can be used in real-world application.

+

VSI - Basic setting for creating VSI package and a sample +VSI package created from the files. Batch file for signing the VSI package is +provided.

+

 

+ +

+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 +
+ +
+ +
+ + + + + +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/better-listview-express.html b/public/better-listview-express.html new file mode 100644 index 0000000..ab51a74 --- /dev/null +++ b/public/better-listview-express.html @@ -0,0 +1,448 @@ + + + + + + + + + + + + + + + +Free list-view control for .NET WinForms (C#, VB.net) - freeware Better LIstView Express by Component Owl + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView Express edition: Free .NET listview control

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ Free Download + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + + + + + +
+ Share this page if you like it: +
+ +
+
+ + + + +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git "a/public/better-listview-express/\\\".html" "b/public/better-listview-express/\\\".html" new file mode 100644 index 0000000..6386908 --- /dev/null +++ "b/public/better-listview-express/\\\".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/better-listview-express/comparison-with-full-version.html b/public/better-listview-express/comparison-with-full-version.html new file mode 100644 index 0000000..95a9675 --- /dev/null +++ b/public/better-listview-express/comparison-with-full-version.html @@ -0,0 +1,900 @@ + + + + + + + + + + + + + + + +Comparison of Better ListView, Better ListView Express, and regular .NET list-view components + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView Express edition: Free .NET listview control

+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ Free Download + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + + + + + +
+ Share this page if you like it: +
+ +
+
+ + + + +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/better-listview-express/documentation.html b/public/better-listview-express/documentation.html new file mode 100644 index 0000000..2702484 --- /dev/null +++ b/public/better-listview-express/documentation.html @@ -0,0 +1,228 @@ + + + + + +Better ListView Documentation + + + +
+

+ Better ListView Express Documentation + +

+ + +

+ + Introduction, Comparison + +
What this documentation covers; brief comparison to regular .NET + ListView +

+

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

+

+ + 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 +

+

+ + Embedded Controls + +
Custom item and sub-item editing controls +

+

+ + 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 Hierarchy + +
Setting-up tree-like item hierarchy (parent and child items), item + indentation +

+

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

+

+ + Items + +
Working with ListView items +

+

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

+

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

+

+ + 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 +

+

+ + Text Formatting + +
Text alignment and trimming +

+

+ + Tooltips + +
Displaying customized tooltips on control and its parts +

+

+ + Views + +
Ways of displaying items, detecting view change +

+ + + + +
+ diff --git a/public/better-listview-express/quick-start-guide.html b/public/better-listview-express/quick-start-guide.html new file mode 100644 index 0000000..2bc917c --- /dev/null +++ b/public/better-listview-express/quick-start-guide.html @@ -0,0 +1,303 @@ + + + + +Quick Start + + + + +
+
+ + + + +

Quick Start

+ +

Table of Contents

+

Tutorial Prerequisites

+

Step-by-step tutorial

+

Installation + Troubleshooting

+

Migrating from .NET ListView

+

Learning Resources and Getting + Support

+ + + + +

+Tutorial Prerequisites

+ + + +

+Step-by-step Tutorial

+ + +

Start with a new "Windows Forms Application" + project. A designer with empty Form appears. Display the + Toolbox window (View - + Toolbox):

+ +

+ +

The Toolbox should contain a new tab called + "ComponentOwl" containing all the installed component + from ComponentOwl, including Better ListView.

+ +

+

Express editions of ComponentOwl Controls are listed in separate + tab called "ComponentOwl (Express Controls)".

+
+

If you chose not to integrate component in + Visual Studio during installation or the component have not been + successfully integrated, please follow the next steps.

+ +

Right-click on empty area of the Toolbox window and select + "Choose Items...":

+ +

+ +

In the "Choose Toolbox Items" dialog, select + the ".NET Framework Components" tab. If the comonent + has been properly installed, it will be already listed here. If you find + it, make sure the newest version is checked (e.g. 2.5.2.0 instead of + 1.0.0.0) and click "OK":

+ +

+ +

If you need other than installed version (e.g. DLL to match for + specific .NET Framework version) click on the + "Browse..." button:

+ +

+ +

Browse for the betterlistview.dll file containing the + component.

+ +

+

If you use Better ListView Express edition, + locate component named BetterListViewExpress or DLL named + betterlistviewexpress.dll.

+
+

The location depends on where you installed the product. The default + location is:

+ +
C:\Program Files\Component Owl\Better ListView\Redistributable
+ +

You can choose the file right within + "Redistributable" folder. This is .NET 2.0 component + compatible with .NET Framework 2.0 or higher. If you want binary for a + specific .NET version, choose the file from ".NET Framework + Specific" folder:

+ +

+ +

Make sure the check box next to + "BetterListView" is checked and click + "OK":

+ +

+ +

Now the component should appear in your Toolbox:

+ +

+ +

Select the component and place it on designer surface:

+ +

+ +

Now you can design Better ListView the same way as any other + control:

+ +

+ + +

+Installation + Troubleshooting

+ + +

If the component does not appear in Toolbox, make sure that your + target framework version is a full-featured .NET Framework 2.0, 3.0, 3.5 + or 4.0. The Compact Framework or Client Profile are not supported.

+ +

You can also try the "Reset Toolbox" option + from the Toolbox context menu, restart Visual Studio and try to add the + control again.

+ +

Sometimes even the Toolbox can get corrupted (known issue on Visual + Studio 2010) and its cache needs to be cleared. Simply remove all + ".tbd" files from this folder:

+ +

Vista/Windows 7:

+ +
\Users\<user>\AppData\Local\Microsoft\VisualStudio\10.0\*.tbd
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\Local Settings\Application Data\Microsoft\VisualStudio\10.0\*.tbd
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ + + + + + +

+Migrating from .NET ListView

+ + +

We did our best to make Better ListView as similar to regular .NET + ListView as possible. Better ListView, however, is not a ListView-derived + control - it is completely autonomous WinForms control. The following + rules of thumb will help you to migrate from ListView to Better + ListView:

+ + +

To compare usage of .NET ListView and Better ListView, consider the + following code using the regular .NET + ListView:

+ +

C#

+
BetterListView listView = new BetterListView();
+
+BetterListViewItem item = new BetterListViewItem("new item");
+
+listView.Items.Add(item);
+
+listView.View = BetterListViewView.List;
+
+// ...
+
+BetterListViewHitTestInfo hitTestInfo = listView.HitTest(new Point(0, 0));
+ +

Visual Basic

+
Dim listView As New BetterListView()
+
+Dim item As New BetterListViewItem("new item")
+
+listView.Items.Add(item)
+
+listView.View = BetterListViewView.List
+
+' ...
+
+Dim hitTestInfo As BetterListViewHitTestInfo = listView.HitTest(New Point(0, 0))
+ + +

+Learning resources and getting + support

+ + +

The documentation and learning resources include:

+ + +

You can find all these resources in Start Menu - Better + ListView.

+ +

The C# and Visual Basic Samples are located at:

+ +

Vista/Windows 7:

+ +
\Users\<user>\Documents\ComponentOwl\Better ListView Samples
+ +

Windows XP:

+ +
\Documents and Settings\<user directory>\My Documents\ComponentOwl\Better ListView Samples
+ +

Make sure the Visual Studio is not running when removing the files. + The Toolbox should reload its default items when opened.

+ +

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.

+ + + +
+ + + + + +
+ + + +
+ diff --git a/public/better-listview-express/releases?since=3.14.0.html b/public/better-listview-express/releases?since=3.14.0.html new file mode 100644 index 0000000..89ba94d --- /dev/null +++ b/public/better-listview-express/releases?since=3.14.0.html @@ -0,0 +1,592 @@ + + + + + + + + + + + + + + + +Better ListView .NET control: Improved List View control for C# and VB.NET (Windows Forms) + + + + + + + +
+ + + + + + + +
+
+
+

Better ListView Express edition: Free .NET listview control

+ + + +
+ +
+ + + + + + + + + +
+ +
+ +
+ Free Download + +

Version 3.15 / May 27, 2015

+
+ +
+

Seamless integration with .NET 2.0 and higher

+ +
+ + + + + + + + +
+ Share this page if you like it: +
+ +
+
+ + + + +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/public/blog/2011/01/index.html b/public/blog/2011/01/index.html new file mode 100644 index 0000000..e4d3e32 --- /dev/null +++ b/public/blog/2011/01/index.html @@ -0,0 +1,213 @@ + + + + + + + +January « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/02/displaying-thumbnails-withs-borders-and-shadows/index.html b/public/blog/2011/02/displaying-thumbnails-withs-borders-and-shadows/index.html new file mode 100644 index 0000000..4a002b8 --- /dev/null +++ b/public/blog/2011/02/displaying-thumbnails-withs-borders-and-shadows/index.html @@ -0,0 +1,292 @@ + + + + + + + +Displaying Thumbnails with Borders and Shadows « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Displaying Thumbnails with Borders and Shadows

+ + + +
+

We’ve just released Better ListView version 1.50 with some new features – thumbnails view, image borders support (inc. shadows), and more.

+

Our great inspiration for designing Better ListView is nothing less than the mighty Windows Explorer. This file manager uses obviously much more powerful control that the regular .NET list-view alone is.

+

It supports some extra views, line Contents and Extra Large Icons. It is also possible to adjust image size by rolling a mouse wheel while holding Control key.

+

Better ListView has the capability of displaying item icons with arbitrary sizes, but we also extended it with one extra view: Thumbnails:

+
Thumbnails Sample

Thumbnails Sample

+

This view aligns items in the center while keeping constant spacing between items. Thumbnails also keep just single line of text for compactness. On the other hand, LargeIcon view varies horizontal space between items to fill client area evenly and breaks long text into several lines.

+

The constant spacing is inspired by various photo managers, where image thumbnails are better viewed side-by-side (and the view looks also more organized).

+

Image thumbnails also look better with some kind border or frame. We added this new feature in Better ListView 1.5 and it works in all views. There are several pre-defined types of borders, but user can draw his own:

+
    +
  • None – simply no border at all
  • +
  • Single – single line border
  • +
  • SingleOffset – single line with a spacing between image and the border
  • +
  • SymmetricShadow – smooth shadow around image
  • +
  • DropShadow – smooth shadow on the right bottom part of the image
  • +
+

Thumbnails use DropShadow by default, but it can be adjusted for every view separately. One can also adjust thickness of the border/shadow and define custom spacing around image.

+

Take a look at one possible setting:

+
Image Borders

Image Borders

+

This is SingleOffset border of width 3 pixels. Notice that also column header images can have its borders (these are SymmetricShadow).

+

When the border is defined and image size should be kept the same, some spacing have to be added around image. You can adjust this spacing to draw you own borders or any additional graphics (such as overlay icons). Here is an example –

+
Thumbnail with Extra Icons

Thumbnail with Extra Icons

+

Download Better ListView

+

You can download Better ListView and play with it yourself.

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

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/02/index.html b/public/blog/2011/02/index.html new file mode 100644 index 0000000..4e957f6 --- /dev/null +++ b/public/blog/2011/02/index.html @@ -0,0 +1,213 @@ + + + + + + + +February « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/02/page/2/index.html b/public/blog/2011/02/page/2/index.html new file mode 100644 index 0000000..5a67419 --- /dev/null +++ b/public/blog/2011/02/page/2/index.html @@ -0,0 +1,253 @@ + + + + + + + + Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + + + +
+

BLV and Internet Explorer

+ + + +
+

As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+
+ + + +
+ + +
+

Centering Images in Better ListView Sub-items

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

+
+ + + +
+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/02/what-we-are-working-on-groups-item-hierarchy-support/index.html b/public/blog/2011/02/what-we-are-working-on-groups-item-hierarchy-support/index.html new file mode 100644 index 0000000..03b0ff2 --- /dev/null +++ b/public/blog/2011/02/what-we-are-working-on-groups-item-hierarchy-support/index.html @@ -0,0 +1,288 @@ + + + + + + + +What we are working on: Groups, Item hierarchy support « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

What we are working on: Groups, Item hierarchy support

+ + + +
+

We are currently working on another major upgrade of our list view control for .net. This update should be released in less than 30 days.

+

It will contain two new major features: Excellent item grouping support, and support of simple hierarchical structure in the details view (collapsible list view items).

+

Better list view groups

+

Better ListView does not support grouping in the current version 1.50. However, this new upgrade will add excellent grouping support. The groups in Better ListView will be much more powerful and flexible than the groups in the regular .net list view. The groups will:

+
    +
  • Support collapse/expand
  • +
  • Support checkboxes (3-state)
  • +
  • Support their own images
  • +
  • Support their own tooltips
  • +
  • Be selectable
  • +
  • Support custom fonts
  • +
  • Support their own custom context menu
  • +
+

Item hierarchy of list view items

+

The new version of Better ListView will also support easy to use tree-like item hierarchy. You will be able to simply set parent of any list item, and thus create a simple tree in the details view of the list view control.

+
    +
  • All parent items will support collapse/expand
  • +
  • All parent items will have configurable checkbox (so you can show or hide it for each item)
  • +
+ +
+ + + + +
+ + + + + + + + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/03/index.html b/public/blog/2011/03/index.html new file mode 100644 index 0000000..ce4b7eb --- /dev/null +++ b/public/blog/2011/03/index.html @@ -0,0 +1,213 @@ + + + + + + + +March « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/03/page/2/index.html b/public/blog/2011/03/page/2/index.html new file mode 100644 index 0000000..6412b41 --- /dev/null +++ b/public/blog/2011/03/page/2/index.html @@ -0,0 +1,253 @@ + + + + + + + + Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + + + +
+

BLV and Internet Explorer

+ + + +
+

As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+
+ + + +
+ + +
+

Centering Images in Better ListView Sub-items

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

+
+ + + +
+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/05/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/index.html b/public/blog/2011/05/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/index.html new file mode 100644 index 0000000..21b1595 --- /dev/null +++ b/public/blog/2011/05/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/index.html @@ -0,0 +1,302 @@ + + + + + + + +Better ListView 2.0 Sneak Peek (Item hierarchy, groups, more) « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Better ListView 2.0 Sneak Peek (Item hierarchy, groups, more)

+ + + +
+
Hierarchical items in two groups

Hierarchical items in two groups

+

We are currently working hard on finishing Better ListView version 2.0 which will add new features: Support for groups, tree-like item structure (tree nodes are collapsible, as expected), and multi-line items.

+

We expect to release this upgrade in about a month. It will be a free upgrade for current and new users.

+

Groups

+

Groups in Better ListView have comparable capabilities as other Better ListView elements (column headers, items, sub-items). For example, you can adjust the foreground/background colors, font, image – and owner drawing is possible as well.

+

You can even include images into group headers (as you can see in the preview above), which is not possible in .NET ListView.

+

Groups are collapsible by default and the expand button can be switched off on each group individually.

+

Here are groups combined with Tile view (the second group is collapsed):

+
Groups with Tile view

Groups with Tile view

+

The previous figure displays vertically oriented groups, but Better ListView also support horizontally oriented groups in the List mode:

+
Groups with List view

Groups with List view

+

We put special effort to mimic the group display and behavior of Windows Explorer. The group headers can display all of the 15 group header states available in Windows visual style and their display is governed by the same logic as in the ListView counterpart.

+

The group headers always look perfect and native, right out of the box. You don’t need to tweak anything.

+

Item Hierarchy

+
+
+

+
Items with hierarchy

Items with hierarchy

+

+
+
+
+

This works in the similar way as in the standard TreeView control. Each item (or node) has property called ChildItems which can be filled with new BetterListViewItem instances. SubItems collection can still be used in either items and child-items (child items are treated in the very same way as their parents).

+

Item hierarchy can be combined with Groups feature as seen in the first preview.

+

Multi-Line Items

+
Multi-line items

Multi-line items

+

A simple setting of item layout (MaximumTextLines property) allows breaking item text into several lines (up to the specified value). When the text is longer than MaximumTextLines, then the default trimming method is used (one from the TextTrimming enumeration: None, TrimCharacter, TrimWord, EllipsisCharacter, EllipsisWord, EllipsisPath).

+

Multi-line text can be used in every view and also in column headers.

+

Another New Features

+

There are also bunch of new minor features including:

+

Adjustable paddings – Every element part (e.g. item check box, group image…) contains customizable spaces at each side, so the user can easily create space where he needs and customize items/column headers/group headers to the finest detail.

+

Focusing sub-items – Items, group headers and even sub-items can be keyfocused. User can now invoke label editing or scroll to any “cell” in the Details-with-columns view solely with keyboard.

+

IEnumerable implementations –  BetterListView, BetterListViewGroup and BetterListViewItem implements IEnumerable interface for iterating through the whole item hierarchy, so using recursion to traverse child items is not necessary.

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

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/05/index.html b/public/blog/2011/05/index.html new file mode 100644 index 0000000..43319e0 --- /dev/null +++ b/public/blog/2011/05/index.html @@ -0,0 +1,211 @@ + + + + + + + +May « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/06/index.html b/public/blog/2011/06/index.html new file mode 100644 index 0000000..b297dc3 --- /dev/null +++ b/public/blog/2011/06/index.html @@ -0,0 +1,213 @@ + + + + + + + +June « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/07/index.html b/public/blog/2011/07/index.html new file mode 100644 index 0000000..7313909 --- /dev/null +++ b/public/blog/2011/07/index.html @@ -0,0 +1,213 @@ + + + + + + + +July « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/07/windows-theme-support-in-better-listview/index.html b/public/blog/2011/07/windows-theme-support-in-better-listview/index.html new file mode 100644 index 0000000..1371f51 --- /dev/null +++ b/public/blog/2011/07/windows-theme-support-in-better-listview/index.html @@ -0,0 +1,277 @@ + + + + + + + +Windows Theme Support in Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Windows Theme Support in Better ListView

+ + + +
+

Both current Better ListView 1.5 and the upcoming Better ListView 2.0 put emphasis on native theme support.

+

Contrary to many custom controls, Better ListView adjusts itself to current theme even if the theme is changed in run-time. For example, when user of your application switches theme from Classic to Aero, or to some other custom theme with elements of different sizes, Better ListView re-measures itself for the new theme smoothly. Reloading the component or re-starting the application is not necessary.

+

One of the sweet bonuses of using Better ListView 2.0 instead of regular .NET ListView is the full Groups functionality in all themes and all versions of the operating system. For example, groups are not collapsible in standard ListView on Windows XP and even does not support images. In Better ListView, however, you are able to unleash full potential of groups everywhere.

+

The following images show Better ListView in different Windows themes: Classic, XP Luna and Aero:

+
Better ListView in Classic theme

Better ListView in Classic theme

+
Better ListView in XP Luna Theme

Better ListView in XP Luna Theme

+
Better ListView in Aero Theme

Better ListView in Aero Theme

+

 

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

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/08/index.html b/public/blog/2011/08/index.html new file mode 100644 index 0000000..099337c --- /dev/null +++ b/public/blog/2011/08/index.html @@ -0,0 +1,213 @@ + + + + + + + +August « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/09/index.html b/public/blog/2011/09/index.html new file mode 100644 index 0000000..d4141fc --- /dev/null +++ b/public/blog/2011/09/index.html @@ -0,0 +1,213 @@ + + + + + + + +September « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/10/index.html b/public/blog/2011/10/index.html new file mode 100644 index 0000000..4d0102f --- /dev/null +++ b/public/blog/2011/10/index.html @@ -0,0 +1,211 @@ + + + + + + + +October « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/11/index.html b/public/blog/2011/11/index.html new file mode 100644 index 0000000..01adaaf --- /dev/null +++ b/public/blog/2011/11/index.html @@ -0,0 +1,213 @@ + + + + + + + +November « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/11/page/2/index.html b/public/blog/2011/11/page/2/index.html new file mode 100644 index 0000000..127174c --- /dev/null +++ b/public/blog/2011/11/page/2/index.html @@ -0,0 +1,253 @@ + + + + + + + + Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + + + +
+

BLV and Internet Explorer

+ + + +
+

As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+
+ + + +
+ + +
+

Centering Images in Better ListView Sub-items

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

+
+ + + +
+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/11/vertical-alignment-and-text-wrapping-in-better-listview/index.html b/public/blog/2011/11/vertical-alignment-and-text-wrapping-in-better-listview/index.html new file mode 100644 index 0000000..b50b1e5 --- /dev/null +++ b/public/blog/2011/11/vertical-alignment-and-text-wrapping-in-better-listview/index.html @@ -0,0 +1,312 @@ + + + + + + + +Vertical Alignment and Text Wrapping in Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Vertical Alignment and Text Wrapping in Better ListView

+ + + +
+

.NET ListView supports horizontal alignment of text in columns, items, sub-items and groups. Since Better ListView adds many new features, like multi-line items and images of arbitrary size, vertical alignment comes in handy.

+

By default, each view has its defaults, but you can customize text alignment on every column, item, sub-item and group individually:

+
+
Vertical alignments of text

Vertical alignments of text

+
+
+
+
+

The vertical alignment feature is a new property of each element type. For example, .NET ListView item has a property called Align which refers to horizontal alignment. Better ListView extends this to two independent properties called AlignHorizontal and AlignVertical. The naming scheme is same for columns, items, sub-items and groups.

+

Better ListView also supports splitting text in column headers and items (sub-items) into multiple lines.

+

We extended this functionality by adding a BetterListViewItem.TextWrapping and BetterListViewSubItem.TextWrapping properties. With these, you can control how the text in sub-items will be wrapped. There are three possible values:

+
    +
  • Layout – the text will be wrapped to multiple lines, up to value specified by MaximumTextLines property of the corresponding view (layout)
  • +
  • None – the text will not be wrapped at all
  • +
  • Space – the text will be wrapped, but only to available space (item will never get higher due to wrapping text in sub-item with this setting)
  • +
+
The following screenshot shows these three wrapping modes in action:
+
+
Various text wrapping modes

Various text wrapping modes

+
+

The sub-item in the first column has TextWrapping set to Layout and the layout has MaximumTextLines set to 4. The sub-item text thus can be split to up to four lines. It is actually split just to three because the column is wide enough.

+

The sub-item in the second column has TextWrapping set to None, which means the text in this sub-item is kept on single line.

+

The sub-item in the third column has TextWrapping set to Space. As you can see, even if the MaximumTextLines is set to 4, the sub-item text is limited to three lines, preventing item to grow larger.

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

One Response to “Vertical Alignment and Text Wrapping in Better ListView”

+ +
    +
  1. +
    +
    + Daniel N says:
    + + + +

    Very nice guys… With each new version, Better ListView is doing exactly that: just getting better and better!

    +

    I am particularly keen to try putting in my own linebreaks into items in the details view.

    + + +
    +
  2. +
+ + + + + +
+ +

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/12/how-to-dynamically-resize-focused-item/index.html b/public/blog/2011/12/how-to-dynamically-resize-focused-item/index.html new file mode 100644 index 0000000..6be1617 --- /dev/null +++ b/public/blog/2011/12/how-to-dynamically-resize-focused-item/index.html @@ -0,0 +1,308 @@ + + + + + + + +How To: Dynamically Resize Focused Item « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

How To: Dynamically Resize Focused Item

+ + + +
+

Better ListView 2.4.0 now supports setting MaximumTextLines property on every item and sub-item, so you can have multi-line items each with different number text lines:

+
Dynamic resizing of the focused item

Dynamic resizing of the focused item

+

We also introduced FocusedItemChanged event, so that you can detect when focus has moved from one element (item / sub-item / group) to another.

+

These features can be combined to display only the focused item with more details to save space code of the FocusedItemChanged event handler may look like this:

+

C#

+

[csharp gutter=”false” toolbar=”false”]
+void ListViewFocusedItemChanged(object sender, BetterListViewFocusedItemChangedEventArgs eventArgs)
+{
+ BetterListView listView = (BetterListView)sender;

+

listView.BeginUpdate();

+

if (eventArgs.FocusedItemOld != null)
+ {
+ // set single line of text for currenly unfocused item
+ eventArgs.FocusedItemOld.MaximumTextLines = 1;
+ }

+

if (eventArgs.FocusedItemNew != null)
+ {
+ // set three lines of text for currenly focused item
+ eventArgs.FocusedItemNew.MaximumTextLines = 3;
+ }

+

listView.EndUpdate();
+}
+[/csharp]

+

Visual Basic

+

[vb gutter=”false” toolbar=”false”]
+Sub ListViewFocusedItemChanged(sender As Object, eventArgs As BetterListViewFocusedItemChangedEventArgs)
+ Dim ListView As BetterListView = DirectCast(sender, BetterListView)

+

ListView.BeginUpdate()

+

If eventArgs.FocusedItemOld IsNot Nothing Then
+ ‘ set single line of text for currenly unfocused item
+ eventArgs.FocusedItemOld.MaximumTextLines = 1
+ End If

+

If eventArgs.FocusedItemNew IsNot Nothing Then
+ ‘ set three lines of text for currenly focused item
+ eventArgs.FocusedItemNew.MaximumTextLines = 3
+ End If

+

ListView.EndUpdate()
+End Sub
+[/vb]

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

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2011/12/index.html b/public/blog/2011/12/index.html new file mode 100644 index 0000000..22b543a --- /dev/null +++ b/public/blog/2011/12/index.html @@ -0,0 +1,211 @@ + + + + + + + +December « 2011 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/01/index.html b/public/blog/2012/01/index.html new file mode 100644 index 0000000..a042cc3 --- /dev/null +++ b/public/blog/2012/01/index.html @@ -0,0 +1,213 @@ + + + + + + + +January « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/01/page/2/index.html b/public/blog/2012/01/page/2/index.html new file mode 100644 index 0000000..85f4a7e --- /dev/null +++ b/public/blog/2012/01/page/2/index.html @@ -0,0 +1,253 @@ + + + + + + + + Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + + + + +
+

BLV and Internet Explorer

+ + + +
+

As you all know we are constantly working on improving BetterListView, but once in a while you might encounter a problem which has not found its way to our documentation yet.

+

Today, our blog post covers an interesting case when using Internet Explorer.
+When instantiating an ActiveX control written as a .NET assembly exposed via Interop you might get the following message:

+

System.IO.FileNotFoundException("Could not load file or assembly 'BetterListView, Version=3.8.2.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx' or one of its dependencies. The system cannot find the file specified.")

+

The solution to this problem is a fairly simple one, quoting from an MSDN article:
+“… you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application’s directory.”

+

Concluding from this short excerpt, you are basically left you with two options:
+1) You may register BetterListView in GAC if it is to be shared. But you should be careful with GAC because it allows holding multiple versions of the same assembly. You can make the installer remove any older versions from GAC during installation and add/keep just the newest one.
+2) You can put your .net assembly with all third-party DLLs in one directory during installation if it is to be private.

+

We recommend the second solution as we reckon it to be the safer one.

+
+ + + +
+ + +
+

Centering Images in Better ListView Sub-items

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

+
+ + + +
+ + + + + +
+ + + +
+
+ + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/01/read-only-mode-in-better-listview/index.html b/public/blog/2012/01/read-only-mode-in-better-listview/index.html new file mode 100644 index 0000000..85c7522 --- /dev/null +++ b/public/blog/2012/01/read-only-mode-in-better-listview/index.html @@ -0,0 +1,279 @@ + + + + + + + +Read-Only Mode in Better ListView « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Read-Only Mode in Better ListView

+ + + +
+

Better ListView 2.5 introduces a new boolean property called ReadOnly.

+

When set to true, the Better ListView does not respond to keyboard and mouse input. There are, however, some exceptions that make the Read-only mode different to the Disabled mode (when Enabled property is set to false).

+

When in Read-only mode, content of the Better ListView can be still scrolled (the scroll bars are enabled) and groups/items can be expanded/collapsed.

+

The difference between Disabled and Read-only can be seen on the following images:

+
Normal state

Normal state

+
Disabled state

Disabled state

+
Read-only state

Read-only state

+

 

+

As you can see, the Better ListView is displayed normally in Read-only mode, but the group header does not have a hot state (because cannot be focused). Items also cannot be focused or selected, but the expand buttons are still interactive.

+

The scroll bars would also be enabled and can be used, which is different from Disabled mode where everything is grayed and cannot be used.

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

Leave a Reply

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/02/index.html b/public/blog/2012/02/index.html new file mode 100644 index 0000000..52ce4c2 --- /dev/null +++ b/public/blog/2012/02/index.html @@ -0,0 +1,213 @@ + + + + + + + +February « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/03/index.html b/public/blog/2012/03/index.html new file mode 100644 index 0000000..5e25e83 --- /dev/null +++ b/public/blog/2012/03/index.html @@ -0,0 +1,213 @@ + + + + + + + +March « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/04/index.html b/public/blog/2012/04/index.html new file mode 100644 index 0000000..fc2a47e --- /dev/null +++ b/public/blog/2012/04/index.html @@ -0,0 +1,213 @@ + + + + + + + +April « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/08/index.html b/public/blog/2012/08/index.html new file mode 100644 index 0000000..277f0df --- /dev/null +++ b/public/blog/2012/08/index.html @@ -0,0 +1,213 @@ + + + + + + + +August « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/09/index.html b/public/blog/2012/09/index.html new file mode 100644 index 0000000..4100cc2 --- /dev/null +++ b/public/blog/2012/09/index.html @@ -0,0 +1,211 @@ + + + + + + + +September « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2012/12/index.html b/public/blog/2012/12/index.html new file mode 100644 index 0000000..bc748e1 --- /dev/null +++ b/public/blog/2012/12/index.html @@ -0,0 +1,213 @@ + + + + + + + +December « 2012 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2013/01/index.html b/public/blog/2013/01/index.html new file mode 100644 index 0000000..519b5b0 --- /dev/null +++ b/public/blog/2013/01/index.html @@ -0,0 +1,213 @@ + + + + + + + +January « 2013 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2013/02/index.html b/public/blog/2013/02/index.html new file mode 100644 index 0000000..f6ee056 --- /dev/null +++ b/public/blog/2013/02/index.html @@ -0,0 +1,211 @@ + + + + + + + +February « 2013 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2013/03/index.html b/public/blog/2013/03/index.html new file mode 100644 index 0000000..2437b44 --- /dev/null +++ b/public/blog/2013/03/index.html @@ -0,0 +1,213 @@ + + + + + + + +March « 2013 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2014/02/index.html b/public/blog/2014/02/index.html new file mode 100644 index 0000000..d72ce85 --- /dev/null +++ b/public/blog/2014/02/index.html @@ -0,0 +1,211 @@ + + + + + + + +February « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2014/04/index.html b/public/blog/2014/04/index.html new file mode 100644 index 0000000..dfaf8f0 --- /dev/null +++ b/public/blog/2014/04/index.html @@ -0,0 +1,213 @@ + + + + + + + +April « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2014/07/index.html b/public/blog/2014/07/index.html new file mode 100644 index 0000000..15f36f7 --- /dev/null +++ b/public/blog/2014/07/index.html @@ -0,0 +1,211 @@ + + + + + + + +July « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2014/08/index.html b/public/blog/2014/08/index.html new file mode 100644 index 0000000..23c3f1e --- /dev/null +++ b/public/blog/2014/08/index.html @@ -0,0 +1,211 @@ + + + + + + + +August « 2014 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2016/11/index.html b/public/blog/2016/11/index.html new file mode 100644 index 0000000..916d564 --- /dev/null +++ b/public/blog/2016/11/index.html @@ -0,0 +1,211 @@ + + + + + + + +November « 2016 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2017/02/index.html b/public/blog/2017/02/index.html new file mode 100644 index 0000000..91554e4 --- /dev/null +++ b/public/blog/2017/02/index.html @@ -0,0 +1,211 @@ + + + + + + + +February « 2017 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/2017/03/index.html b/public/blog/2017/03/index.html new file mode 100644 index 0000000..676dec6 --- /dev/null +++ b/public/blog/2017/03/index.html @@ -0,0 +1,211 @@ + + + + + + + +March « 2017 « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/activation-issues-and-how-to-solve-them/feed/index.html b/public/blog/activation-issues-and-how-to-solve-them/feed/index.html new file mode 100644 index 0000000..ea83fa9 --- /dev/null +++ b/public/blog/activation-issues-and-how-to-solve-them/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Activation issues and how to solve them + + http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/alternating-rows-in-better-listview/feed/index.html b/public/blog/alternating-rows-in-better-listview/feed/index.html new file mode 100644 index 0000000..cbd8fc8 --- /dev/null +++ b/public/blog/alternating-rows-in-better-listview/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Alternating Rows in Better ListView + + http://www.componentowl.com/blog/alternating-rows-in-better-listview/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-1-50-released/feed/index.html b/public/blog/better-listview-1-50-released/feed/index.html new file mode 100644 index 0000000..eb64c68 --- /dev/null +++ b/public/blog/better-listview-1-50-released/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 1.50 released + + http://www.componentowl.com/blog/better-listview-1-50-released/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-1-52-released/feed/index.html b/public/blog/better-listview-1-52-released/feed/index.html new file mode 100644 index 0000000..36a9c6b --- /dev/null +++ b/public/blog/better-listview-1-52-released/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 1.52 released + + http://www.componentowl.com/blog/better-listview-1-52-released/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-2-0-samples-preview/feed/index.html b/public/blog/better-listview-2-0-samples-preview/feed/index.html new file mode 100644 index 0000000..4f4f875 --- /dev/null +++ b/public/blog/better-listview-2-0-samples-preview/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 2.0 Samples Launcher + + http://www.componentowl.com/blog/better-listview-2-0-samples-preview/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/feed/index.html b/public/blog/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/feed/index.html new file mode 100644 index 0000000..7f63037 --- /dev/null +++ b/public/blog/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 2.0 Sneak Peek (Item hierarchy, groups, more) + + http://www.componentowl.com/blog/better-listview-2-0-sneak-peek-item-hierarchy-groups-more/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-2-00-released/feed/index.html b/public/blog/better-listview-2-00-released/feed/index.html new file mode 100644 index 0000000..140b5b7 --- /dev/null +++ b/public/blog/better-listview-2-00-released/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 2.00 released + + http://www.componentowl.com/blog/better-listview-2-00-released/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-2-1-optimizations-done-minor-features-and-testing/feed/index.html b/public/blog/better-listview-2-1-optimizations-done-minor-features-and-testing/feed/index.html new file mode 100644 index 0000000..9235cc2 --- /dev/null +++ b/public/blog/better-listview-2-1-optimizations-done-minor-features-and-testing/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 2.1: Optimizations Done, Minor Features and Testing + + http://www.componentowl.com/blog/better-listview-2-1-optimizations-done-minor-features-and-testing/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-2-10-released/feed/index.html b/public/blog/better-listview-2-10-released/feed/index.html new file mode 100644 index 0000000..c0ede2b --- /dev/null +++ b/public/blog/better-listview-2-10-released/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView 2.10 released + + http://www.componentowl.com/blog/better-listview-2-10-released/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-released/feed/index.html b/public/blog/better-listview-released/feed/index.html new file mode 100644 index 0000000..3840950 --- /dev/null +++ b/public/blog/better-listview-released/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView released + + http://www.componentowl.com/blog/better-listview-released/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-reviewed-at-devproconnections-com/feed/index.html b/public/blog/better-listview-reviewed-at-devproconnections-com/feed/index.html new file mode 100644 index 0000000..b601f8c --- /dev/null +++ b/public/blog/better-listview-reviewed-at-devproconnections-com/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Better ListView reviewed at DevProConnections.com + + http://www.componentowl.com/blog/better-listview-reviewed-at-devproconnections-com/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/better-listview-tip-how-to-draw-custom-selection/feed/index.html b/public/blog/better-listview-tip-how-to-draw-custom-selection/feed/index.html new file mode 100644 index 0000000..7e0b640 --- /dev/null +++ b/public/blog/better-listview-tip-how-to-draw-custom-selection/feed/index.html @@ -0,0 +1,49 @@ + + + Comments on: Better ListView Tip: How to Draw Custom Selection + + http://www.componentowl.com/blog/better-listview-tip-how-to-draw-custom-selection/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + By: Libor Tinka + http://www.componentowl.com/blog/better-listview-tip-how-to-draw-custom-selection/#comment-1286 + + Mon, 29 Oct 2012 22:37:06 +0000 + http://www.componentowl.com/blog/?p=808#comment-1286 + + We have balanced performance with features, this is a price for having fully managed control with rich features (tree items, multi-line text). If you want something extremely fast, faster than ListView, handling 100 000 000 items like a charm … use DOS text mode! :)

+

We have happy customers who use Better ListView in complex systems like airline ticket booking and they are very intelligent people – I don’t think they are stupid developers.

+]]>
+
+ + By: Claudiu + http://www.componentowl.com/blog/better-listview-tip-how-to-draw-custom-selection/#comment-1285 + + Fri, 28 Sep 2012 09:50:29 +0000 + http://www.componentowl.com/blog/?p=808#comment-1285 + + Better list view is only for stupid developers and plase do not compare it with standard list view. Performance is an important think and betterlistview has no performance compared with list view. Make an loop with 100000 items for add to list and you will see ….

+]]>
+
+
+
+ + \ No newline at end of file diff --git a/public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1285.html b/public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1285.html new file mode 100644 index 0000000..c82304e --- /dev/null +++ b/public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1285.html @@ -0,0 +1,367 @@ + + + + + + + +Better ListView Tip: How to Draw Custom Selection « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Better ListView Tip: How to Draw Custom Selection

+ + + +
+
Customized item selection.

Customized item selection.

+

 

+

By default, Better ListView uses system theme for drawing selections.

+

To draw custom selection, you can use owner drawing capabilities of Better ListView:

+

C#

+

[csharp gutter=”false” toolbar=”false”]
+class CustomListView : BetterListView
+{
+ protected override void OnDrawItemBackground(BetterListViewDrawItemBackgroundEventArgs eventArgs)
+ {
+ base.OnDrawItemBackground(eventArgs);

+

if (eventArgs.Item.Selected)
+ {
+ Brush brushSelection = new SolidBrush(Color.FromArgb(128, Color.LightGreen));
+ eventArgs.Graphics.FillRectangle(brushSelection, eventArgs.ItemBounds.BoundsSelection);
+ brushSelection.Dispose();
+ }
+ }

+

protected override void OnDrawItem(BetterListViewDrawItemEventArgs eventArgs)
+ {
+ eventArgs.DrawSelection = false;

+

base.OnDrawItem(eventArgs);

+

if (eventArgs.Item.Selected)
+ {
+ eventArgs.Graphics.DrawRectangle(Pens.DarkGreen, eventArgs.ItemBounds.BoundsSelection);
+ }
+ }
+}
+[/csharp]

+

Visual Basic

+

[vb gutter=”false” toolbar=”false”]
+Class CustomListView
+ Inherits BetterListView
+ Protected Overrides Sub OnDrawItemBackground(eventArgs As BetterListViewDrawItemBackgroundEventArgs)
+ MyBase.OnDrawItemBackground(eventArgs)

+

If eventArgs.Item.Selected Then
+ Dim brushSelection As Brush = New SolidBrush(Color.FromArgb(128, Color.LightGreen))
+ eventArgs.Graphics.FillRectangle(brushSelection, eventArgs.ItemBounds.BoundsSelection)
+ brushSelection.Dispose()
+ End If
+ End Sub

+

Protected Overrides Sub OnDrawItem(eventArgs As BetterListViewDrawItemEventArgs)
+ eventArgs.DrawSelection = False

+

MyBase.OnDrawItem(eventArgs)

+

If eventArgs.Item.Selected Then
+ eventArgs.Graphics.DrawRectangle(Pens.DarkGreen, eventArgs.ItemBounds.BoundsSelection)
+ End If
+ End Sub
+End Class
+[/vb]

+

In the above code, we have created class CustomListView that inherits from BetterListView. We override OnDrawItemBackground and OnDrawItem methods to customize item background and item foreground drawing, respectively.

+

The OnDrawItemBackground method contains only check for whether the item is selected. If so, we draw selection background (filled rectangle in selection area).

+

The OnDrawItem method contains two things:

+
    +
  1. Turn off  default selection.
  2. +
  3. Draw custom selection border if the item is selected.
  4. +
+

Drawbacks of drawing custom selections like this include using non-system theme, which can look ugly on various color schemes. By default, Better ListView always use the system theme, so the color consistency is ensured. You can, however, still use classes like SystemColors or SystemBrushes to ensure good look.

+

Another drawback is that you handle only two states of selection, i.e. selected and unselected state. This is sufficient for Classic Windows theme but there are several more states used on Windows Aero Theme, like “hot”, “focused and hot” or “hot and pressed”.

+

To allow these states, considerable coding need to be done.

+

In case you need this level of customization, please contact us for Custom Coding support.

+

 

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

2 Responses to “Better ListView Tip: How to Draw Custom Selection”

+ +
    +
  1. +
    +
    + Claudiu says:
    + + + +

    Better list view is only for stupid developers and plase do not compare it with standard list view. Performance is an important think and betterlistview has no performance compared with list view. Make an loop with 100000 items for add to list and you will see ….

    + + +
    +
      +
    • +
      +
      + Libor Tinka says:
      + + + +

      We have balanced performance with features, this is a price for having fully managed control with rich features (tree items, multi-line text). If you want something extremely fast, faster than ListView, handling 100 000 000 items like a charm … use DOS text mode! :)

      +

      We have happy customers who use Better ListView in complex systems like airline ticket booking and they are very intelligent people – I don’t think they are stupid developers.

      + + +
      +
    • +
    +
  2. +
+ + + + + +
+ +

Leave a Reply to Claudiu

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1286.html b/public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1286.html new file mode 100644 index 0000000..ea01dec --- /dev/null +++ b/public/blog/better-listview-tip-how-to-draw-custom-selection/index.html?replytocom=1286.html @@ -0,0 +1,367 @@ + + + + + + + +Better ListView Tip: How to Draw Custom Selection « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Better ListView Tip: How to Draw Custom Selection

+ + + +
+
Customized item selection.

Customized item selection.

+

 

+

By default, Better ListView uses system theme for drawing selections.

+

To draw custom selection, you can use owner drawing capabilities of Better ListView:

+

C#

+

[csharp gutter=”false” toolbar=”false”]
+class CustomListView : BetterListView
+{
+ protected override void OnDrawItemBackground(BetterListViewDrawItemBackgroundEventArgs eventArgs)
+ {
+ base.OnDrawItemBackground(eventArgs);

+

if (eventArgs.Item.Selected)
+ {
+ Brush brushSelection = new SolidBrush(Color.FromArgb(128, Color.LightGreen));
+ eventArgs.Graphics.FillRectangle(brushSelection, eventArgs.ItemBounds.BoundsSelection);
+ brushSelection.Dispose();
+ }
+ }

+

protected override void OnDrawItem(BetterListViewDrawItemEventArgs eventArgs)
+ {
+ eventArgs.DrawSelection = false;

+

base.OnDrawItem(eventArgs);

+

if (eventArgs.Item.Selected)
+ {
+ eventArgs.Graphics.DrawRectangle(Pens.DarkGreen, eventArgs.ItemBounds.BoundsSelection);
+ }
+ }
+}
+[/csharp]

+

Visual Basic

+

[vb gutter=”false” toolbar=”false”]
+Class CustomListView
+ Inherits BetterListView
+ Protected Overrides Sub OnDrawItemBackground(eventArgs As BetterListViewDrawItemBackgroundEventArgs)
+ MyBase.OnDrawItemBackground(eventArgs)

+

If eventArgs.Item.Selected Then
+ Dim brushSelection As Brush = New SolidBrush(Color.FromArgb(128, Color.LightGreen))
+ eventArgs.Graphics.FillRectangle(brushSelection, eventArgs.ItemBounds.BoundsSelection)
+ brushSelection.Dispose()
+ End If
+ End Sub

+

Protected Overrides Sub OnDrawItem(eventArgs As BetterListViewDrawItemEventArgs)
+ eventArgs.DrawSelection = False

+

MyBase.OnDrawItem(eventArgs)

+

If eventArgs.Item.Selected Then
+ eventArgs.Graphics.DrawRectangle(Pens.DarkGreen, eventArgs.ItemBounds.BoundsSelection)
+ End If
+ End Sub
+End Class
+[/vb]

+

In the above code, we have created class CustomListView that inherits from BetterListView. We override OnDrawItemBackground and OnDrawItem methods to customize item background and item foreground drawing, respectively.

+

The OnDrawItemBackground method contains only check for whether the item is selected. If so, we draw selection background (filled rectangle in selection area).

+

The OnDrawItem method contains two things:

+
    +
  1. Turn off  default selection.
  2. +
  3. Draw custom selection border if the item is selected.
  4. +
+

Drawbacks of drawing custom selections like this include using non-system theme, which can look ugly on various color schemes. By default, Better ListView always use the system theme, so the color consistency is ensured. You can, however, still use classes like SystemColors or SystemBrushes to ensure good look.

+

Another drawback is that you handle only two states of selection, i.e. selected and unselected state. This is sufficient for Classic Windows theme but there are several more states used on Windows Aero Theme, like “hot”, “focused and hot” or “hot and pressed”.

+

To allow these states, considerable coding need to be done.

+

In case you need this level of customization, please contact us for Custom Coding support.

+

 

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

2 Responses to “Better ListView Tip: How to Draw Custom Selection”

+ +
    +
  1. +
    +
    + Claudiu says:
    + + + +

    Better list view is only for stupid developers and plase do not compare it with standard list view. Performance is an important think and betterlistview has no performance compared with list view. Make an loop with 100000 items for add to list and you will see ….

    + + +
    +
      +
    • +
      +
      + Libor Tinka says:
      + + + +

      We have balanced performance with features, this is a price for having fully managed control with rich features (tree items, multi-line text). If you want something extremely fast, faster than ListView, handling 100 000 000 items like a charm … use DOS text mode! :)

      +

      We have happy customers who use Better ListView in complex systems like airline ticket booking and they are very intelligent people – I don’t think they are stupid developers.

      + + +
      +
    • +
    +
  2. +
+ + + + + +
+ +

Leave a Reply to Libor Tinka

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/better-thumbnail-browser-component-released/feed/index.html b/public/blog/better-thumbnail-browser-component-released/feed/index.html new file mode 100644 index 0000000..073a5f3 --- /dev/null +++ b/public/blog/better-thumbnail-browser-component-released/feed/index.html @@ -0,0 +1,36 @@ + + + Comments on: Better Thumbnail Browser Component Released + + http://www.componentowl.com/blog/better-thumbnail-browser-component-released/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + By: Nathaniel Wise + http://www.componentowl.com/blog/better-thumbnail-browser-component-released/#comment-1289 + + Wed, 23 Jan 2013 09:20:46 +0000 + http://www.componentowl.com/blog/?p=823#comment-1289 + + this is one useful for the example and overviews.in my website i m not used this type of functionality but this is something good component.

+]]>
+
+
+
+ + \ No newline at end of file diff --git a/public/blog/better-thumbnail-browser-component-released/index.html?replytocom=1289.html b/public/blog/better-thumbnail-browser-component-released/index.html?replytocom=1289.html new file mode 100644 index 0000000..0d59fa0 --- /dev/null +++ b/public/blog/better-thumbnail-browser-component-released/index.html?replytocom=1289.html @@ -0,0 +1,315 @@ + + + + + + + +Better Thumbnail Browser Component Released « Owl's Blog on .NET development + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +

Owl's Blog on .NET development

+ +
Component Owl codes Better ListView control all night so you don't have to.
+ + + + +
+

Better Thumbnail Browser Component Released

+ + + +
+

 

+

We have released a whole new WinForms component called Better Thumbnail Browser. This control is useful for anyone developing photo management software or any kind of image database:

+
Better Thumbnail Browser Overview

Better Thumbnail Browser Overview

+

The control is capable of loading image thumbnails on background and does all the dirty job of threading and synchronization for you.

+

My motivation to make such component as lead developer at ComponentOwl.com was to have something that can smoothly integrate in my photo management software.

+

Since we already have Better ListView component, which is quite mature (three major releases over two years of development), I decided to build upon it and finally make control for image thumbnails that is both extensible and powerful and have native look and feel.

+

Better Thumbnail Browser inherits most of its functionality from Better ListView (multi column sorting, custom paddings and spacings, multi-line text and groups to name a few). It adds image loading logic on top of it, which can handle various scenarios:

+
    +
  • Load images from a folder, database or custom source automatically
  • +
  • Load thumbnails with arbitrary sizes on background while progressively displaying them
  • +
  • Handle zooming thumbnails on the fly
  • +
  • Loading thumbnail items in multiple passes (e.g. load meta-data, then low quality image, then high quality image)
  • +
  • Loading thumbnails in custom order
  • +
  • Loading visible thumbnails first, then all other (and do this even though the user is scrolling the view)
  • +
  • Manage updating individual thumbnails or their count on the fly
  • +
  • Support showing loading progress
  • +
+

The component is fully customizable and by default inherits native Windows theme. We tested it on Windows 8 with success:

+
Better Thumbnail Browser with Windows 8 Theme

Better Thumbnail Browser with Windows 8 Theme

+

 

+

Better Thumbnail Browser contains default implementation for loading thumbnail images from disk. If you want to gather all images from a given folder (say “c:\images”), display them in Better Thumbnail Browser and load them on background, the code is particularly simple:

+
thumbnailBrowser.Path = "c:\\images";
+

And that’s it!

+

Better Thumbnail Browser will be our third component which is used in end-user consumer-level software package. This ensures future development, improvements and support.

+

 

+

 

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

One Response to “Better Thumbnail Browser Component Released”

+ +
    +
  1. +
    +
    + Nathaniel Wise says:
    + + + +

    this is one useful for the example and overviews.in my website i m not used this type of functionality but this is something good component.

    + + +
    +
  2. +
+ + + + + +
+ +

Leave a Reply to Nathaniel Wise

+ + + + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ + +

+

+
+ +
+ + + +
+ + + +
+
+ + + + + +
+ + + + + + \ No newline at end of file diff --git a/public/blog/binding-images-in-better-listview/feed/index.html b/public/blog/binding-images-in-better-listview/feed/index.html new file mode 100644 index 0000000..329ca5b --- /dev/null +++ b/public/blog/binding-images-in-better-listview/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: Binding Images in Better ListView + + http://www.componentowl.com/blog/binding-images-in-better-listview/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/blv-and-internet-explorer/feed/index.html b/public/blog/blv-and-internet-explorer/feed/index.html new file mode 100644 index 0000000..b2892dc --- /dev/null +++ b/public/blog/blv-and-internet-explorer/feed/index.html @@ -0,0 +1,26 @@ + + + Comments on: BLV and Internet Explorer + + http://www.componentowl.com/blog/blv-and-internet-explorer/ + Component Owl codes Better ListView control all night so you don't have to. + Thu, 02 Apr 2015 07:58:08 +0000 + hourly + 1 + https://wordpress.org/?v=4.9.8 + + + + \ No newline at end of file diff --git a/public/blog/category/announcements/feed/index.html b/public/blog/category/announcements/feed/index.html new file mode 100644 index 0000000..87a9e63 --- /dev/null +++ b/public/blog/category/announcements/feed/index.html @@ -0,0 +1,328 @@ + + + + Announcements – Owl's Blog on .NET development + + http://www.componentowl.com/blog + Component Owl codes Better ListView control all night so you don't have to. + Tue, 04 Sep 2018 13:10:05 +0000 + en-US + hourly + 1 + https://wordpress.org/?v=4.9.8 + + Sub-item Check Boxes in Better ListView + http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/ + http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/#respond + Sun, 06 Jul 2014 21:48:41 +0000 + + + + + + + + + + + + + + + + + + + + + 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.

+

This feature can be activated simply by setting CheckBoxAppearance property of a given sub-item to other value than Hide. Such sub-item will not display check box or radio instead of image and text.

+

Please note the first sub-item’s properties do not apply as they are overriden by item’s properties. These two are separate for the case of column reordering (keeping consistency of sub-item states).

+

Another new feature in Better ListView is that check boxes or radios can be displayed disabled. This can be achieved by setting CheckEnabled property to false on the respective item or sub-item.

+

Sub-item check boxes can be operated by both mouse and keyboard. Checking sub-item with keyboard can be done by navigating focus rectangle by arrow keys to the given sub-item and pressing spacebar.

+]]>
+ http://www.componentowl.com/blog/sub-item-check-boxes-in-better-listview/feed/ + 0 +
+ + Better Thumbnail Browser Component Released + http://www.componentowl.com/blog/better-thumbnail-browser-component-released/ + http://www.componentowl.com/blog/better-thumbnail-browser-component-released/#comments + Sat, 01 Dec 2012 18:26:16 +0000 + + + + + + + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=823 + +  

+

We have released a whole new WinForms component called Better Thumbnail Browser. This control is useful for anyone developing photo management software or any kind of image database:

+
Better Thumbnail Browser Overview

Better Thumbnail Browser Overview

+

The control is capable of loading image thumbnails on background and does all the dirty job of threading and synchronization for you.

+

My motivation to make such component as lead developer at ComponentOwl.com was to have something that can smoothly integrate in my photo management software.

+

Since we already have Better ListView component, which is quite mature (three major releases over two years of development), I decided to build upon it and finally make control for image thumbnails that is both extensible and powerful and have native look and feel.

+

Better Thumbnail Browser inherits most of its functionality from Better ListView (multi column sorting, custom paddings and spacings, multi-line text and groups to name a few). It adds image loading logic on top of it, which can handle various scenarios:

+
    +
  • Load images from a folder, database or custom source automatically
  • +
  • Load thumbnails with arbitrary sizes on background while progressively displaying them
  • +
  • Handle zooming thumbnails on the fly
  • +
  • Loading thumbnail items in multiple passes (e.g. load meta-data, then low quality image, then high quality image)
  • +
  • Loading thumbnails in custom order
  • +
  • Loading visible thumbnails first, then all other (and do this even though the user is scrolling the view)
  • +
  • Manage updating individual thumbnails or their count on the fly
  • +
  • Support showing loading progress
  • +
+

The component is fully customizable and by default inherits native Windows theme. We tested it on Windows 8 with success:

+
Better Thumbnail Browser with Windows 8 Theme

Better Thumbnail Browser with Windows 8 Theme

+

 

+

Better Thumbnail Browser contains default implementation for loading thumbnail images from disk. If you want to gather all images from a given folder (say “c:\images”), display them in Better Thumbnail Browser and load them on background, the code is particularly simple:

+
thumbnailBrowser.Path = "c:\\images";
+

And that’s it!

+

Better Thumbnail Browser will be our third component which is used in end-user consumer-level software package. This ensures future development, improvements and support.

+

 

+

 

+]]>
+ http://www.componentowl.com/blog/better-thumbnail-browser-component-released/feed/ + 1 +
+ + Better ListView 2.10 released + http://www.componentowl.com/blog/better-listview-2-10-released/ + http://www.componentowl.com/blog/better-listview-2-10-released/#respond + Fri, 14 Oct 2011 16:57:54 +0000 + + + + + + + + + + + + http://www.componentowl.com/blog/?p=373 + + A new version with major improvements, optimizations and fixes has been released! It addresses many suggestions provided by you, our valued customers.

+

Improved Performance

+

We put a considerable effort into optimizing Better ListView 2 to provide advanced features (e.g. hierarchical and multi-line items, collapsible groups) while still being swift and responsive.

+

The overall performance has greatly improved. Better ListView 2.1 can easily handle 10.000 items while still being very fast. The parts where improvements are best seen are:

+
+
    +
  • Adding many items to the list
  • +
  • Expanding/collapsing of hierarchical items
  • +
  • Resizing a column
  • +
+
We also added new options in the Performance property group, so you can easily switch between fast and powerful options.
+
+

Samples in both C# and Visual Basic

+

We added easy to understand samples for both C# and Visual Basic.

+

You can simply follow a link from start menu to open the Visual Studio project for your favourite language, and play with all the features of Better ListView.

+
C# and VB Samples projects in Solution Explorer

C# and VB Samples projects in Solution Explorer

+

 

+

Extended Documentation

+

We added a Quick Start Tutorial to help you with setup, activation and integration of Better ListView in your projects, as well as many entirely new chapters in the documentation.

+

All code samples are from now on provided in both C# and Visual Basic to be easy to understand to both C# and VB.net developers.

+

Smoother migration from .NET ListView to Better ListView

+

Better ListView now contains all the constructor/method overloads and properties of the regular .NET ListView, so that for each member of .NET ListView there is an easily discoverable equivalent in Better ListView.

+]]>
+ http://www.componentowl.com/blog/better-listview-2-10-released/feed/ + 0 +
+ + Better ListView 2.00 released + http://www.componentowl.com/blog/better-listview-2-00-released/ + http://www.componentowl.com/blog/better-listview-2-00-released/#respond + Sun, 31 Jul 2011 15:25:39 +0000 + + + + + + + + + + + + + + + + + + + + http://www.componentowl.com/blog/?p=304 + + A new major version of Better ListView has been released! Download the new version.

+
Item hierarchy with multi-line items in groups

Item hierarchy with multi-line items in groups

+

Summary of what’s new:

+

We have added four new major features:

+
    +
  • Groups – items can be organized in collapsible groups
  • +
  • Item Hierarchy – items can be organized in a tree structure, can be also collapsed just like the nodes in a TreeView
  • +
  • Multi-Line Items – item texts can break in several lines and each item can have different size
  • +
  • Data Binding – complex data binding is fully supported, any List, DataTable, DataView, array or any other IList-type object can be bound to Better ListView as a data source
  • +
+

Many existing features of Better ListView has been enhanced in favor of these. For example:

+
    +
  • Item reordering can be done with hierarchical items as well; user can even create child items
  • +
  • It is possible to move items between different groups
  • +
+

Some of the minor features added are:

+
    +
  • Layouts can be adjustable – item sizes and spacings, even internal spacings
  • +
  • Added new label editing controls (calendar and drop down box)
  • +
  • Better ListView content (columns, items and groups) can be saved to file (XML or binary)
  • +
  • Multi-line items support added
  • +
  • See full changelog for details
  • +
+

We have also fixed many issues and improved performance of Thumbnails view and operations with collections.

+

About then new version

+

The new version 2.00 brings new major features, the most important one being item hierarchy support. This allows you to create tree-list structures in the list view, without having to sacrifice any of the list view functionality (columns, sorting, grouping, Drag and Drop reordering, etc).

+

Highly customizable item grouping capabilities were added. Individual group headers can have customized look and behavior. The group headers can be collapsible, support images, custom context menus, are focusable, and more.

+

Version 2.0 also improves the thumbnail view. The control handles larger images smoothly, even while resizing.

+

List items, group headers and column header can newly have custom padding specified for all of their elements, which makes it easy to do owner drawing of custom elements, such as overlay icons in the thumbnail view. Every part of the control can be newly replaced by custom drawing, not just overdrawn.

+

Version 2.0 newly allows you to save/load the list view contents with 1 just line of code, either in XML or binary format, to either file or string. Data-binding with custom column-mapping is supported as well.

+

Multi-line listview items are also newly supported. List items with very long text can take place of two (r more) regular items, so the text whole text is readable.

+
Better ListView 2

Thumbnails in groups

+
DataTable bound to Better ListView

DataTable bound to Better ListView

+

Other news – new comics for developers!

+

We’ve also started publishing new webcomics for developers on our website, drawn by the Better ListView lead developer, Libor Tinka.

+]]>
+ http://www.componentowl.com/blog/better-listview-2-00-released/feed/ + 0 +
+ + Better ListView 1.52 released + http://www.componentowl.com/blog/better-listview-1-52-released/ + http://www.componentowl.com/blog/better-listview-1-52-released/#respond + Tue, 29 Mar 2011 16:21:14 +0000 + + + + + + + + + + http://www.componentowl.com/blog/?p=213 + + Another minor release with many fixes and some new features.

+

See what’s new in Better ListView 1.52.

+

Download the new version.

+

We are still working on the new major features (Item hierarchy, groups) as described here. These new features are near completion.

+]]>
+ http://www.componentowl.com/blog/better-listview-1-52-released/feed/ + 0 +
+ + Better ListView 1.50 released + http://www.componentowl.com/blog/better-listview-1-50-released/ + http://www.componentowl.com/blog/better-listview-1-50-released/#respond + Mon, 14 Feb 2011 19:28:55 +0000 + + + + http://www.componentowl.com/blog/?p=119 + + We are happy to announce that we’ve released new version (1.50) of Better ListView.

+

You can just Download Better ListView and install it over your current installation.

+

The changes include:

+