Preserve full site structure: articles, blog posts, downloads, BLV Express, sitemap, legacy CSS/JS
This commit is contained in:
739
public/blog/category/components/feed/index.html
Normal file
739
public/blog/category/components/feed/index.html
Normal file
@@ -0,0 +1,739 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>Components – Owl's Blog on .NET development</title>
|
||||
<atom:link href="http://www.componentowl.com/blog/category/components/feed/" rel="self" type="application/rss+xml" />
|
||||
<link>http://www.componentowl.com/blog</link>
|
||||
<description>Component Owl codes Better ListView control all night so you don't have to.</description>
|
||||
<lastBuildDate>Tue, 04 Sep 2018 13:10:05 +0000</lastBuildDate>
|
||||
<language>en-US</language>
|
||||
<sy:updatePeriod>hourly</sy:updatePeriod>
|
||||
<sy:updateFrequency>1</sy:updateFrequency>
|
||||
<generator>https://wordpress.org/?v=4.9.8</generator>
|
||||
<item>
|
||||
<title>Activation issues and how to solve them</title>
|
||||
<link>http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/</link>
|
||||
<comments>http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/#respond</comments>
|
||||
<pubDate>Wed, 01 Mar 2017 17:22:52 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Brian Galura]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=927</guid>
|
||||
<description><![CDATA[Dear Readers, Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at support@componentowl.com and we will be happy to help you out. […]]]></description>
|
||||
<content:encoded><![CDATA[<p>Dear Readers,<br />
|
||||
Periodically we get emails from users having problems with the activation. So we put together a check list on how to deal with the most frequent issues. In case these fixes do not help you solve your problem, please contact contact support at <a href="mailto:support@componentowl.com">support@componentowl.com</a> and we will be happy to help you out.<br />
|
||||
Below, you will find some obstacles we have stumbled across in the past.</p>
|
||||
<ol>
|
||||
<li>Try to <strong>rebuild</strong> the project/solution</li>
|
||||
<li><strong>Restart</strong> Visual Studio if rebuilding the solution did not stop the nag screen</li>
|
||||
<li>If you use Better ListView in a Class Library project, it should be referenced and activated in both, the main project and the Class Library project.</li>
|
||||
<li>Do the main project (executable) and all referenced projects contain the <strong>licenses.licx</strong> file within the Properties folder? If not, rebuild the main project (executable) and copy the licenses.licx file to the appropriate location in all referenced projects (Class Library or other executables).</li>
|
||||
<li>The licenses.licx file should contain only a <strong>single reference</strong> to Better ListView with the current version number (e.g. ComponentOwl.BetterListView.BetterListView, BetterListView, Version=3.7.2.0, Culture=neutral, PublicKeyToken=e6c91a3add447be2). If there are more lines referencing Better ListView, remove the obsolete ones. You can also delete the licenses.licx file and rebuild the project to regenerate it.</li>
|
||||
<li>Run the <strong>Activator</strong> application (installed along with the product) and check if it displays a valid license (license info should be displayed in green).</li>
|
||||
<li>You can try to finish the activation via the <strong>Activator app</strong> and then rebuild the main project. The Activator allows custom proxy settings for activation from behind a web proxy (often present in corporate environments).</li>
|
||||
<li>Check, if the <strong>license-blv.dat</strong> file is present in the “C:\ProgramData\Component Owl\” folder after activation. If not, please contact support at support@componentowl.com</li>
|
||||
<li>Check, if your projects reference the <strong>same version</strong> of Better ListView as the one that is installed. Open the „Reference Properties“ window by right clicking on Better ListView reference in the Solution Explorer. Then check if there is a Specific Version property set to true. If so, remove the reference and add a new reference to Better ListView with the correct version. You can also just set Specific Version property to false.</li>
|
||||
<li>The Better ListView has to be activated on each machine where it is built. Do not copy the license-blv.dat file because this is <strong>specific</strong> to each machine. Rather follow the activation process on each machine.</li>
|
||||
</ol>
|
||||
<p>We hope these clues can help you, in case you encounter a problem during the activation. As mentioned before, please contact support, if the issues persist.</p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/activation-issues-and-how-to-solve-them/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Custom Scroll Bar Size in Better ListView</title>
|
||||
<link>http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/</link>
|
||||
<comments>http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/#comments</comments>
|
||||
<pubDate>Tue, 19 Mar 2013 15:56:22 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[Tutorials]]></category>
|
||||
<category><![CDATA[bars]]></category>
|
||||
<category><![CDATA[better listview]]></category>
|
||||
<category><![CDATA[custom]]></category>
|
||||
<category><![CDATA[height]]></category>
|
||||
<category><![CDATA[large]]></category>
|
||||
<category><![CDATA[larger]]></category>
|
||||
<category><![CDATA[scroll]]></category>
|
||||
<category><![CDATA[scrollbar]]></category>
|
||||
<category><![CDATA[scrollbars]]></category>
|
||||
<category><![CDATA[size]]></category>
|
||||
<category><![CDATA[sizes]]></category>
|
||||
<category><![CDATA[width]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=878</guid>
|
||||
<description><![CDATA[How to make custom-sized scroll bars in Better ListView.]]></description>
|
||||
<content:encoded><![CDATA[<div id="attachment_879" style="width: 319px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/03/blv-scroll-size.png"><img class="size-full wp-image-879" title="Better ListView custom scroll bar size" src="../../../wp-content/uploads/2013/03/blv-scroll-size.png" alt="Better ListView custom scroll bar size" width="309" height="208" /></a><p class="wp-caption-text">Better ListView custom scroll bar size</p></div>
|
||||
<p><a href="../../../../betterlistview.exe">Better ListView 3.7.0</a> contains two new properties that allow you to set custom horizontal and vertical scroll bar sizes:</p>
|
||||
<ul>
|
||||
<li><strong>HScrollBarWidth</strong></li>
|
||||
<li><strong>VScrollBarHeight</strong></li>
|
||||
</ul>
|
||||
<p>Of course, you can set these custom sizes in design-time as well as in run-time.</p>
|
||||
<p>Larger scroll bars are practical on modern touch-enabled devices with high resolution screens. The default scroll bar size (17 pixels) may be too small and you may want to make it just large enough for your index finger.</p>
|
||||
<p>This features works in both <a href="http://www.componentowl.com/better-listview">Better ListView</a> and <a href="http://www.componentowl.com/better-listview-express">Better ListView Express</a>.</p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/custom-scroll-bar-size-in-better-listview/feed/</wfw:commentRss>
|
||||
<slash:comments>4</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Binding Images in Better ListView</title>
|
||||
<link>http://www.componentowl.com/blog/binding-images-in-better-listview/</link>
|
||||
<comments>http://www.componentowl.com/blog/binding-images-in-better-listview/#respond</comments>
|
||||
<pubDate>Mon, 28 Jan 2013 03:54:22 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[Tutorials]]></category>
|
||||
<category><![CDATA[better listview]]></category>
|
||||
<category><![CDATA[bind]]></category>
|
||||
<category><![CDATA[binding]]></category>
|
||||
<category><![CDATA[bound]]></category>
|
||||
<category><![CDATA[data]]></category>
|
||||
<category><![CDATA[databinding]]></category>
|
||||
<category><![CDATA[databound]]></category>
|
||||
<category><![CDATA[icon]]></category>
|
||||
<category><![CDATA[icons]]></category>
|
||||
<category><![CDATA[imagekey]]></category>
|
||||
<category><![CDATA[imagelist]]></category>
|
||||
<category><![CDATA[images]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=850</guid>
|
||||
<description><![CDATA[How to use images instead of textual data in Better ListView data binding.]]></description>
|
||||
<content:encoded><![CDATA[<p><a href="../../../../betterlistview.exe">Better ListView 3.5</a> have improved data binding functionality. You can adjust how the data rows will be converted to items/sub-items and vice versa. For example, you can show images based on the bound data:</p>
|
||||
<div id="attachment_853" style="width: 270px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/screen-blv-binding3.png"><img class="size-full wp-image-853" title="Better ListView with bound list" src="../../../wp-content/uploads/2013/01/screen-blv-binding3.png" alt="Better ListView with bound list" width="260" height="222" /></a><p class="wp-caption-text">Better ListView with bound list</p></div>
|
||||
<p>Say you have a simple <strong>Server</strong> type:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
public class Server<br />
|
||||
{<br />
|
||||
public string ServerName<br />
|
||||
{<br />
|
||||
get;<br />
|
||||
set;<br />
|
||||
}</p>
|
||||
<p> public int ServerStatus<br />
|
||||
{<br />
|
||||
get;<br />
|
||||
set;<br />
|
||||
}</p>
|
||||
<p> public Server(string name, int status)<br />
|
||||
{<br />
|
||||
ServerName = name;<br />
|
||||
ServerStatus = status;<br />
|
||||
}<br />
|
||||
}<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
Public Class Server</p>
|
||||
<p> Public Property ServerName() As String<br />
|
||||
Get<br />
|
||||
Return m_ServerName<br />
|
||||
End Get<br />
|
||||
Set<br />
|
||||
m_ServerName = Value<br />
|
||||
End Set<br />
|
||||
End Property</p>
|
||||
<p> Public Property ServerStatus() As Integer<br />
|
||||
Get<br />
|
||||
Return m_ServerStatus<br />
|
||||
End Get<br />
|
||||
Set<br />
|
||||
m_ServerStatus = Value<br />
|
||||
End Set<br />
|
||||
End Property</p>
|
||||
<p> Private m_ServerName As String<br />
|
||||
Private m_ServerStatus As Integer</p>
|
||||
<p> Public Sub New(name As String, status As Integer)<br />
|
||||
ServerName = name<br />
|
||||
ServerStatus = status<br />
|
||||
End Sub</p>
|
||||
<p>End Class<br />
|
||||
[/vb]</p>
|
||||
<p>This class contains two properties representing server name and its status. The server name is a textual property and one would like this mapped to item label as usual. However, the server status is a numerical value which have no meaning to the user even when converted to string. In fact, the numerical value can be 0 (<em>offline</em>), 1 (<em>idle</em>) or 2 (<em>running</em>). You may like to display color icons instead of plain strings or numbers. What if we would like to even highlight some items or change other properties during data binding? This is possible through Better ListView data binding customization.</p>
|
||||
<p>First, let’s create a list of <strong>Server</strong> objects and bind this to a Better ListView. We would like to have columns auto-generated, so we set <strong>DataBindColumns</strong> to <strong>true</strong>:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
Server[] servers = new[]<br />
|
||||
{<br />
|
||||
new Server(“Andromeda”, 2),<br />
|
||||
new Server(“Taurus”, 1),<br />
|
||||
new Server(“Himalia”, 2),<br />
|
||||
new Server(“Nanda”, 2),<br />
|
||||
new Server(“Elara”, 0),<br />
|
||||
new Server(“Perseus”, 2),<br />
|
||||
new Server(“Titan”, 1)<br />
|
||||
};</p>
|
||||
<p>ImageList imageList = new ImageList();</p>
|
||||
<p>imageList.ColorDepth = ColorDepth.Depth32Bit;<br />
|
||||
imageList.ImageSize = new Size(16, 16);<br />
|
||||
imageList.Images.AddStrip(Image.FromFile(“status.png”));</p>
|
||||
<p>BetterListView listView = new CustomListView();</p>
|
||||
<p>listView.DataBindColumns = true;<br />
|
||||
listView.DataSource = servers;<br />
|
||||
listView.ImageList = imageList;<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
Dim servers As Server() = New () {New Server(“Andromeda”, 2), New Server(“Taurus”, 1), New Server(“Himalia”, 2), New Server(“Nanda”, 2), New Server(“Elara”, 0), New Server(“Perseus”, 2), _<br />
|
||||
New Server(“Titan”, 1)}</p>
|
||||
<p>Dim imageList As New ImageList()</p>
|
||||
<p>imageList.ColorDepth = ColorDepth.Depth32Bit<br />
|
||||
imageList.ImageSize = New Size(16, 16)<br />
|
||||
imageList.Images.AddStrip(Image.FromFile(“status.png”))</p>
|
||||
<p>Dim listView As BetterListView = New CustomListView()</p>
|
||||
<p>listView.DataBindColumns = True<br />
|
||||
listView.DataSource = servers<br />
|
||||
listView.ImageList = imageList<br />
|
||||
[/vb]</p>
|
||||
<p>Let’s take a look on the result:</p>
|
||||
<div id="attachment_851" style="width: 270px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/screen-blv-binding1.png"><img class="size-full wp-image-851" title="Better ListView with bound list" src="../../../wp-content/uploads/2013/01/screen-blv-binding1.png" alt="Better ListView with bound list" width="260" height="173" /></a><p class="wp-caption-text">Better ListView with bound list</p></div>
|
||||
<p> </p>
|
||||
<p>The columns were auto-generated and <strong>Server</strong> properties properly converted to item and sub-item labels. The generated column header labels are just names of the corresponding properties (ServerName, ServerStatus). You can make the names more convenient by providing <strong>DisplayNameAttribute</strong> on the respective properties:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
…</p>
|
||||
<p>[DisplayName(“Server Name”)]<br />
|
||||
public string ServerName<br />
|
||||
{<br />
|
||||
get;<br />
|
||||
set;<br />
|
||||
}</p>
|
||||
<p>[DisplayName(“Status”)]<br />
|
||||
public int ServerStatus<br />
|
||||
{<br />
|
||||
get;<br />
|
||||
set;<br />
|
||||
}</p>
|
||||
<p>…<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
…</p>
|
||||
<p><DisplayName("Server Name")> _<br />
|
||||
Public Property ServerName() As String<br />
|
||||
Get<br />
|
||||
Return m_ServerName<br />
|
||||
End Get<br />
|
||||
Set<br />
|
||||
m_ServerName = Value<br />
|
||||
End Set<br />
|
||||
End Property</p>
|
||||
<p><DisplayName("Status")> _<br />
|
||||
Public Property ServerStatus() As Integer<br />
|
||||
Get<br />
|
||||
Return m_ServerStatus<br />
|
||||
End Get<br />
|
||||
Set<br />
|
||||
m_ServerStatus = Value<br />
|
||||
End Set<br />
|
||||
End Property</p>
|
||||
<p>…<br />
|
||||
[/vb]</p>
|
||||
<p>Now the column names are more user friendly:</p>
|
||||
<div id="attachment_852" style="width: 270px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/screen-blv-binding2.png"><img class="size-full wp-image-852" title="Better ListView with bound list" src="../../../wp-content/uploads/2013/01/screen-blv-binding2.png" alt="Better ListView with bound list" width="260" height="173" /></a><p class="wp-caption-text">Better ListView with bound list</p></div>
|
||||
<p>We will finally add state images (instead of the numbers) and highlight some items. To do that, we have to override <strong>DataCreateItem</strong> method in a class derived from <strong>BetterListView</strong>:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
public class CustomListView : BetterListView<br />
|
||||
{<br />
|
||||
protected override BetterListViewItem DataCreateItem(<br />
|
||||
CurrencyManager currentDataManager,<br />
|
||||
BindingMemberInfo[] currentDisplayMembers,<br />
|
||||
int index)<br />
|
||||
{<br />
|
||||
// create item using the base implementation<br />
|
||||
BetterListViewItem item = base.DataCreateItem(<br />
|
||||
currentDataManager,<br />
|
||||
currentDisplayMembers,<br />
|
||||
index);</p>
|
||||
<p> // get server status from the current Server object<br />
|
||||
int serverStatus = ((Server)currentDataManager.List[index]).ServerStatus;</p>
|
||||
<p> if (serverStatus == 0)<br />
|
||||
{<br />
|
||||
// bold item when server status is 0<br />
|
||||
item.IsBold = true;<br />
|
||||
}</p>
|
||||
<p> // get sub-item corresponding to server status<br />
|
||||
BetterListViewSubItem subItemStatus = item.SubItems[1];</p>
|
||||
<p> subItemStatus.ImageIndex = serverStatus; // set image for the sub-item<br />
|
||||
subItemStatus.Text = “”; // clear sub-item text</p>
|
||||
<p> return item;<br />
|
||||
}<br />
|
||||
}<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
Public Class CustomListView<br />
|
||||
Inherits BetterListView</p>
|
||||
<p> Protected Overrides Function DataCreateItem(currentDataManager As CurrencyManager, currentDisplayMembers As BindingMemberInfo(), index As Integer) As BetterListViewItem</p>
|
||||
<p> ‘ create item using the base implementation<br />
|
||||
Dim item As BetterListViewItem = MyBase.DataCreateItem(currentDataManager, currentDisplayMembers, index)</p>
|
||||
<p> ‘ get server status from the current Server object<br />
|
||||
Dim serverStatus As Integer = DirectCast(currentDataManager.List(index), Server).ServerStatus</p>
|
||||
<p> If serverStatus = 0 Then<br />
|
||||
‘ bold item when server status is 0<br />
|
||||
item.IsBold = True<br />
|
||||
End If</p>
|
||||
<p> ‘ get sub-item corresponding to server status<br />
|
||||
Dim subItemStatus As BetterListViewSubItem = item.SubItems(1)</p>
|
||||
<p> subItemStatus.ImageIndex = serverStatus<br />
|
||||
‘ set image for the sub-item<br />
|
||||
subItemStatus.Text = “”<br />
|
||||
‘ clear sub-item text<br />
|
||||
Return item</p>
|
||||
<p> End Function</p>
|
||||
<p>End Class<br />
|
||||
[/vb]</p>
|
||||
<p>Now the control displays adjusted images and a highlighted item:</p>
|
||||
<div id="attachment_853" style="width: 270px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/screen-blv-binding3.png"><img class="size-full wp-image-853" title="Better ListView with bound list" src="../../../wp-content/uploads/2013/01/screen-blv-binding3.png" alt="Better ListView with bound list" width="260" height="222" /></a><p class="wp-caption-text">Better ListView with bound list</p></div>
|
||||
<p>Note that you can customize data binding the other way as well by overriding the <strong>DataUpdateSubItemToSource</strong> method. This method is responsible for updating the bound data source when item/sub-item value have been modified.</p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/binding-images-in-better-listview/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Enabling Search Highlight in Better ListView</title>
|
||||
<link>http://www.componentowl.com/blog/enabling-search-highlight-in-better-listview/</link>
|
||||
<comments>http://www.componentowl.com/blog/enabling-search-highlight-in-better-listview/#comments</comments>
|
||||
<pubDate>Fri, 11 Jan 2013 02:00:17 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[Tutorials]]></category>
|
||||
<category><![CDATA[better]]></category>
|
||||
<category><![CDATA[better listview]]></category>
|
||||
<category><![CDATA[highlight]]></category>
|
||||
<category><![CDATA[highlighting]]></category>
|
||||
<category><![CDATA[items]]></category>
|
||||
<category><![CDATA[list]]></category>
|
||||
<category><![CDATA[listview]]></category>
|
||||
<category><![CDATA[mark]]></category>
|
||||
<category><![CDATA[matched]]></category>
|
||||
<category><![CDATA[search]]></category>
|
||||
<category><![CDATA[searching]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=843</guid>
|
||||
<description><![CDATA[How to use and customize Search Highlight feature in Better ListView.]]></description>
|
||||
<content:encoded><![CDATA[<p>We have improved <a href="../../../wp-content/uploads/2013/01/chapter-search.html">item searching</a> capabilities of <a href="http://www.componentowl.com/better-listview">Better ListView</a> by introducing <strong>Search Highlight</strong> feature. This feature automatically shows search matches and works out of the box with both searching by typing and searching from code (e.g. using search box):</p>
|
||||
<div id="attachment_844" style="width: 358px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/search-highlight-1.gif"><img class="size-full wp-image-844" title="Search Highlight Feature" src="../../../wp-content/uploads/2013/01/search-highlight-1.gif" alt="Search Highlight Feature" width="348" height="193" /></a><p class="wp-caption-text">Search Highlight Feature</p></div>
|
||||
<p> </p>
|
||||
<p>To enable the highlight, simply add <strong>UpdateSearchHighlight</strong> option in the search settings:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
listView.SearchSettings = new BetterListViewSearchSettings(<br />
|
||||
listView.SearchSettings.Mode,<br />
|
||||
listView.SearchSettings.Options | BetterListViewSearchOptions.UpdateSearchHighlight,<br />
|
||||
listView.SearchSettings.SubItemIndices);<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
ListView.SearchSettings = New BetterListViewSearchSettings(<br />
|
||||
listView.SearchSettings.Mode,<br />
|
||||
listView.SearchSettings.Options Or BetterListViewSearchOptions.UpdateSearchHighlight,<br />
|
||||
listView.SearchSettings.SubItemIndices)<br />
|
||||
[/vb]</p>
|
||||
<p>Every item contains information about the match in the <strong>BetterListViewItem.SearchHighlight</strong> property. When <strong>BetterListViewItem.SearchHighlight.IsEmpty</strong> is <strong>true</strong>, the item was not matched by the search. Otherwise it contains information about the matched substring: its index and number of characters.</p>
|
||||
<p>Highlight colors can be adjusted by three properties: <strong>ColorSearchHighlight</strong>, <strong>ColorSearchHighlightBorder</strong> and <strong>ColorSearchHighlightText</strong>:</p>
|
||||
<div id="attachment_846" style="width: 337px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/properties.png"><img class="size-full wp-image-846" title="Search Highlight Properties" src="../../../wp-content/uploads/2013/01/properties.png" alt="Search Highlight Properties" width="327" height="352" /></a><p class="wp-caption-text">Search Highlight Properties</p></div>
|
||||
<p>The display can be adjusted even further with owner drawing:</p>
|
||||
<div id="attachment_845" style="width: 358px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2013/01/search-highlight-2.gif"><img class="size-full wp-image-845" title="Customized Search Highlight Feature" src="../../../wp-content/uploads/2013/01/search-highlight-2.gif" alt="Customized Search Highlight Feature" width="348" height="193" /></a><p class="wp-caption-text">Customized Search Highlight Feature</p></div>
|
||||
<p>Here we have used ellipses drawn on item background by modifying <strong>OnDrawItem</strong> and <strong>OnDrawItemBackground</strong> methods of <strong>BetterListView</strong>:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
using System.Drawing;<br />
|
||||
using System.Drawing.Drawing2D;</p>
|
||||
<p>using BetterListView;</p>
|
||||
<p>internal sealed class CustomListView : BetterListView<br />
|
||||
{<br />
|
||||
protected override void OnDrawItem(BetterListViewDrawItemEventArgs eventArgs)<br />
|
||||
{<br />
|
||||
// do not draw search highlight because we will draw our own<br />
|
||||
eventArgs.DrawSearchHighlight = false;</p>
|
||||
<p> base.OnDrawItem(eventArgs);<br />
|
||||
}</p>
|
||||
<p> protected override void OnDrawItemBackground(BetterListViewDrawItemBackgroundEventArgs eventArgs)<br />
|
||||
{<br />
|
||||
base.OnDrawItemBackground(eventArgs);</p>
|
||||
<p> // draw custom search highlight on item background<br />
|
||||
BetterListViewSearchHighlight searchHighlight = eventArgs.Item.SearchHighlight;</p>
|
||||
<p> if (searchHighlight.IsEmpty == false)<br />
|
||||
{<br />
|
||||
eventArgs.Graphics.SmoothingMode = SmoothingMode.HighQuality;</p>
|
||||
<p> Rectangle rectHighlight = eventArgs.ItemBounds.SubItemBounds[searchHighlight.ColumnIndex].BoundsSearchHighlight;</p>
|
||||
<p> Brush brushHighlight = new SolidBrush(Color.FromArgb(128, Color.MediumPurple));<br />
|
||||
Pen penHighlight = new Pen(Color.Purple, 1.0f);</p>
|
||||
<p> eventArgs.Graphics.FillEllipse(brushHighlight, rectHighlight);<br />
|
||||
eventArgs.Graphics.DrawEllipse(penHighlight, rectHighlight);</p>
|
||||
<p> brushHighlight.Dispose();<br />
|
||||
penHighlight.Dispose();<br />
|
||||
}<br />
|
||||
}<br />
|
||||
}<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
Imports System.Drawing<br />
|
||||
Imports System.Drawing.Drawing2D</p>
|
||||
<p>Imports BetterListView</p>
|
||||
<p>Friend NotInheritable Class CustomListView<br />
|
||||
Inherits BetterListView<br />
|
||||
Protected Overrides Sub OnDrawItem(eventArgs As BetterListViewDrawItemEventArgs)<br />
|
||||
‘ do not draw search highlight because we will draw our own<br />
|
||||
eventArgs.DrawSearchHighlight = False</p>
|
||||
<p> MyBase.OnDrawItem(eventArgs)<br />
|
||||
End Sub</p>
|
||||
<p> Protected Overrides Sub OnDrawItemBackground(eventArgs As BetterListViewDrawItemBackgroundEventArgs)<br />
|
||||
MyBase.OnDrawItemBackground(eventArgs)</p>
|
||||
<p> ‘ draw custom search highlight on item background<br />
|
||||
Dim searchHighlight As BetterListViewSearchHighlight = eventArgs.Item.SearchHighlight</p>
|
||||
<p> If searchHighlight.IsEmpty = False Then<br />
|
||||
eventArgs.Graphics.SmoothingMode = SmoothingMode.HighQuality</p>
|
||||
<p> Dim rectHighlight As Rectangle = eventArgs.ItemBounds.SubItemBounds(searchHighlight.ColumnIndex).BoundsSearchHighlight</p>
|
||||
<p> Dim brushHighlight As Brush = New SolidBrush(Color.FromArgb(128, Color.MediumPurple))<br />
|
||||
Dim penHighlight As New Pen(Color.Purple, 1F)</p>
|
||||
<p> eventArgs.Graphics.FillEllipse(brushHighlight, rectHighlight)<br />
|
||||
eventArgs.Graphics.DrawEllipse(penHighlight, rectHighlight)</p>
|
||||
<p> brushHighlight.Dispose()<br />
|
||||
penHighlight.Dispose()<br />
|
||||
End If<br />
|
||||
End Sub<br />
|
||||
End Class<br />
|
||||
[/vb]</p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/enabling-search-highlight-in-better-listview/feed/</wfw:commentRss>
|
||||
<slash:comments>1</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Custom label edit: How to rename file names without extension in Better ListView</title>
|
||||
<link>http://www.componentowl.com/blog/custom-label-edit-how-to-rename-file-names-without-extension-in-better-listview/</link>
|
||||
<comments>http://www.componentowl.com/blog/custom-label-edit-how-to-rename-file-names-without-extension-in-better-listview/#respond</comments>
|
||||
<pubDate>Thu, 20 Dec 2012 17:42:14 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[Tutorials]]></category>
|
||||
<category><![CDATA[better]]></category>
|
||||
<category><![CDATA[better listview]]></category>
|
||||
<category><![CDATA[custom]]></category>
|
||||
<category><![CDATA[edit]]></category>
|
||||
<category><![CDATA[explorer]]></category>
|
||||
<category><![CDATA[extension]]></category>
|
||||
<category><![CDATA[extensions]]></category>
|
||||
<category><![CDATA[file]]></category>
|
||||
<category><![CDATA[filename]]></category>
|
||||
<category><![CDATA[files]]></category>
|
||||
<category><![CDATA[items]]></category>
|
||||
<category><![CDATA[label]]></category>
|
||||
<category><![CDATA[labeledit]]></category>
|
||||
<category><![CDATA[listview]]></category>
|
||||
<category><![CDATA[rename]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=831</guid>
|
||||
<description><![CDATA[How to use Label Edit in Better ListView to allow renaming just file names while displaying full names (filename + extension).]]></description>
|
||||
<content:encoded><![CDATA[<p><a href="../../../wp-content/uploads/2012/12/label-edit.gif"><img class="aligncenter size-full wp-image-832" title="label-edit" src="../../../wp-content/uploads/2012/12/label-edit.gif" alt="" width="291" height="178" /></a></p>
|
||||
<p>Let’s suppose you want to display files with extensions in <a href="http://www.componentowl.com/better-listview">Better ListView</a>, but allow user to rename just the file name, leaving the file extension intact after the editing. </p>
|
||||
<p>The code for this is very simple. Just turn on label editing and handle two events: <strong>BeforeLabelEdit</strong> and <strong>AfterLabelEditCancel</strong>:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
betterListView.LabelEdit = true;</p>
|
||||
<p>betterListView.BeforeLabelEdit += BetterListViewBeforeLabelEdit;<br />
|
||||
betterListView.AfterLabelEditCancel += BetterListViewAfterLabelEditCancel;</p>
|
||||
<p>…</p>
|
||||
<p>void BetterListViewBeforeLabelEdit(object sender, BetterListViewLabelEditCancelEventArgs eventArgs)<br />
|
||||
{<br />
|
||||
string labelOriginal = eventArgs.Label;</p>
|
||||
<p> // keep only file name in the modified label<br />
|
||||
string labelNew = Path.GetFileNameWithoutExtension(labelOriginal);</p>
|
||||
<p> eventArgs.Label = labelNew;<br />
|
||||
}</p>
|
||||
<p>void BetterListViewAfterLabelEditCancel(object sender, BetterListViewLabelEditCancelEventArgs eventArgs)<br />
|
||||
{<br />
|
||||
string labelOriginal = eventArgs.Label;</p>
|
||||
<p> // add extension when editing is complete<br />
|
||||
string labelNew = String.Concat(<br />
|
||||
labelOriginal,<br />
|
||||
Path.GetExtension(eventArgs.SubItem.Text));</p>
|
||||
<p> eventArgs.Label = labelNew;<br />
|
||||
}<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
BetterListView.LabelEdit = True</p>
|
||||
<p>AddHandler Me.betterListView.BeforeLabelEdit, AddressOf BetterListViewBeforeLabelEdit<br />
|
||||
AddHandler Me.betterListView.AfterLabelEditCancel, AddressOf BetterListViewAfterLabelEditCancel</p>
|
||||
<p>…</p>
|
||||
<p>Private Sub BetterListViewBeforeLabelEdit(sender As Object, eventArgs As BetterListViewLabelEditCancelEventArgs)<br />
|
||||
Dim labelOriginal As String = eventArgs.Label</p>
|
||||
<p> ‘ keep only file name in the modified label<br />
|
||||
Dim labelNew As String = Path.GetFileNameWithoutExtension(labelOriginal)</p>
|
||||
<p> eventArgs.Label = labelNew<br />
|
||||
End Sub</p>
|
||||
<p>Private Sub BetterListViewAfterLabelEditCancel(sender As Object, eventArgs As BetterListViewLabelEditCancelEventArgs)<br />
|
||||
Dim labelOriginal As String = eventArgs.Label</p>
|
||||
<p> ‘ add extension when editing is complete<br />
|
||||
Dim labelNew As String = [String].Concat(labelOriginal, Path.GetExtension(eventArgs.SubItem.Text))</p>
|
||||
<p> eventArgs.Label = labelNew<br />
|
||||
End Sub<br />
|
||||
[/vb]</p>
|
||||
<p>Naturally, this feature can be used not only for file names, but whenever you would like to edit different view on the data then the displayed one.</p>
|
||||
<p><a href="http://www.componentowl.com/better-listview">Full version of Better ListView</a> supports even custom <a href="../../../wp-content/uploads/2012/12/chapter-embedded-controls.html">embedded editing controls</a> and you have complete control over the label editing process.</p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/custom-label-edit-how-to-rename-file-names-without-extension-in-better-listview/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Better Thumbnail Browser Component Released</title>
|
||||
<link>http://www.componentowl.com/blog/better-thumbnail-browser-component-released/</link>
|
||||
<comments>http://www.componentowl.com/blog/better-thumbnail-browser-component-released/#comments</comments>
|
||||
<pubDate>Sat, 01 Dec 2012 18:26:16 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Announcements]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[background]]></category>
|
||||
<category><![CDATA[better]]></category>
|
||||
<category><![CDATA[browser]]></category>
|
||||
<category><![CDATA[component]]></category>
|
||||
<category><![CDATA[control]]></category>
|
||||
<category><![CDATA[folder]]></category>
|
||||
<category><![CDATA[image]]></category>
|
||||
<category><![CDATA[listview]]></category>
|
||||
<category><![CDATA[load]]></category>
|
||||
<category><![CDATA[loading]]></category>
|
||||
<category><![CDATA[thumbnail]]></category>
|
||||
<category><![CDATA[thumbnailbrowser]]></category>
|
||||
<category><![CDATA[thumbnails]]></category>
|
||||
<category><![CDATA[winforms]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=823</guid>
|
||||
<description><![CDATA[  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: 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 […]]]></description>
|
||||
<content:encoded><![CDATA[<p> </p>
|
||||
<p>We have released a whole new WinForms component called <a href="http://www.componentowl.com/better-thumbnail-browser">Better Thumbnail Browser</a>. This control is useful for anyone developing photo management software or any kind of image database:</p>
|
||||
<div style="width: 404px" class="wp-caption aligncenter"><a href="http://assets.componentowl.com/screenshots/43/overview_original_1354296079.png?1354270879"><img class=" " title="Better Thumbnail Browser" src="http://assets.componentowl.com/screenshots/43/overview_original_1354296079.png?1354270879" alt="Better Thumbnail Browser Overview" width="394" height="283" /></a><p class="wp-caption-text">Better Thumbnail Browser Overview</p></div>
|
||||
<p>The control is capable of loading image thumbnails on background and does all the dirty job of threading and synchronization for you.</p>
|
||||
<p>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.</p>
|
||||
<p>Since we already have <a href="http://www.componentowl.com/better-listview">Better ListView</a> 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.</p>
|
||||
<p>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:</p>
|
||||
<ul>
|
||||
<li>Load images from a folder, database or custom source automatically</li>
|
||||
<li>Load thumbnails with arbitrary sizes on background while progressively displaying them</li>
|
||||
<li>Handle zooming thumbnails on the fly</li>
|
||||
<li>Loading thumbnail items in multiple passes (e.g. load meta-data, then low quality image, then high quality image)</li>
|
||||
<li>Loading thumbnails in custom order</li>
|
||||
<li>Loading visible thumbnails first, then all other (and do this even though the user is scrolling the view)</li>
|
||||
<li>Manage updating individual thumbnails or their count on the fly</li>
|
||||
<li>Support showing loading progress</li>
|
||||
</ul>
|
||||
<p>The component is fully customizable and by default inherits native Windows theme. We tested it on Windows 8 with success:</p>
|
||||
<div id="attachment_824" style="width: 404px" class="wp-caption aligncenter"><a href="../../../wp-content/uploads/2012/12/w8-theme.jpg"><img class=" wp-image-824 " title="Better Thumbnail Browser with Windows 8 Theme" src="../../../wp-content/uploads/2012/12/w8-theme.jpg" alt="Better Thumbnail Browser with Windows 8 Theme" width="394" height="283" /></a><p class="wp-caption-text">Better Thumbnail Browser with Windows 8 Theme</p></div>
|
||||
<p> </p>
|
||||
<p>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:</p>
|
||||
<pre>thumbnailBrowser.Path = "c:\\images";</pre>
|
||||
<p>And that’s it!</p>
|
||||
<p>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.</p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/better-thumbnail-browser-component-released/feed/</wfw:commentRss>
|
||||
<slash:comments>1</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>How to Store Better ListView Content in a String (User Request)</title>
|
||||
<link>http://www.componentowl.com/blog/how-to-store-better-listview-content-in-a-string-user-request/</link>
|
||||
<comments>http://www.componentowl.com/blog/how-to-store-better-listview-content-in-a-string-user-request/#respond</comments>
|
||||
<pubDate>Sat, 04 Aug 2012 00:03:49 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[Tutorials]]></category>
|
||||
<category><![CDATA[better listview]]></category>
|
||||
<category><![CDATA[content]]></category>
|
||||
<category><![CDATA[items]]></category>
|
||||
<category><![CDATA[load]]></category>
|
||||
<category><![CDATA[save]]></category>
|
||||
<category><![CDATA[serialization]]></category>
|
||||
<category><![CDATA[serialize]]></category>
|
||||
<category><![CDATA[store]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=796</guid>
|
||||
<description><![CDATA[Is it possible to store entire Better ListView content (items with hierarchy and sub-items, columns and groups) in a single string? Of course!]]></description>
|
||||
<content:encoded><![CDATA[<p>Is it possible to store entire Better ListView content (items with hierarchy and sub-items, columns and groups) in a single string?</p>
|
||||
<p>Better ListView already supports saving and loading its content using <strong>SaveContent</strong> and <strong>LoadContent</strong> methods. These methods support either XML or binary format.</p>
|
||||
<p>I chose binary format for storing data in string because it is more compact than XML. Binary representation (basically an array of bytes) can be converted to Base64 string. Loading the content from string work similarly, the steps are performed in opposite direction:</p>
|
||||
<p><strong>C#</strong></p>
|
||||
<p>[csharp gutter=”false” toolbar=”false”]<br />
|
||||
// SAVE<br />
|
||||
// create MemoryStream to hold binary data<br />
|
||||
MemoryStream stream = new MemoryStream();<br />
|
||||
// store Better ListView content in memory stream<br />
|
||||
this.listView.SaveContentBinary(stream);<br />
|
||||
// copy content of MemoryStream to byte array<br />
|
||||
byte[] contentBinary = new byte[stream.Length];<br />
|
||||
stream.Seek(0, SeekOrigin.Begin);<br />
|
||||
// convert byte array to Base64 string<br />
|
||||
stream.Read(contentBinary, 0, (int)stream.Length); // move to beginning of the stream<br />
|
||||
string contentStringBase64 = Convert.ToBase64String(contentBinary);<br />
|
||||
// close stream<br />
|
||||
stream.Close();<br />
|
||||
stream.Dispose();</p>
|
||||
<p>// CLEAR<br />
|
||||
this.listView.Clear();</p>
|
||||
<p>// LOAD<br />
|
||||
// create MemoryStream to hold binary data<br />
|
||||
stream = new MemoryStream();<br />
|
||||
// convert Base64 string to byte array<br />
|
||||
contentBinary = Convert.FromBase64String(contentStringBase64);<br />
|
||||
// write byte array to stream<br />
|
||||
stream.Write(contentBinary, 0, contentBinary.Length);<br />
|
||||
stream.Seek(0, SeekOrigin.Begin); // move to beginning of the stream<br />
|
||||
// load content of Better ListView from memory stream<br />
|
||||
this.listView.LoadContentBinary(stream);<br />
|
||||
[/csharp]</p>
|
||||
<p><strong>Visual Basic</strong></p>
|
||||
<p>[vb gutter=”false” toolbar=”false”]<br />
|
||||
‘ SAVE<br />
|
||||
‘ create MemoryStream to hold binary data<br />
|
||||
Dim stream As New MemoryStream()<br />
|
||||
‘ store Better ListView content in memory stream<br />
|
||||
Me.listView.SaveContentBinary(stream)<br />
|
||||
‘ copy content of MemoryStream to byte array<br />
|
||||
Dim contentBinary As Byte() = New Byte(stream.Length – 1) {}<br />
|
||||
stream.Seek(0, SeekOrigin.Begin)<br />
|
||||
‘ convert byte array to Base64 string<br />
|
||||
stream.Read(contentBinary, 0, CInt(stream.Length))<br />
|
||||
‘ move to beginning of the stream<br />
|
||||
Dim contentStringBase64 As String = Convert.ToBase64String(contentBinary)<br />
|
||||
‘ close stream<br />
|
||||
stream.Close()<br />
|
||||
stream.Dispose()</p>
|
||||
<p>‘ CLEAR<br />
|
||||
Me.listView.Clear()</p>
|
||||
<p>‘ LOAD<br />
|
||||
‘ create MemoryStream to hold binary data<br />
|
||||
stream = New MemoryStream()<br />
|
||||
‘ convert Base64 string to byte array<br />
|
||||
contentBinary = Convert.FromBase64String(contentStringBase64)<br />
|
||||
‘ write byte array to stream<br />
|
||||
stream.Write(contentBinary, 0, contentBinary.Length)<br />
|
||||
stream.Seek(0, SeekOrigin.Begin)<br />
|
||||
‘ move to beginning of the stream<br />
|
||||
‘ load content of Better ListView from memory stream<br />
|
||||
Me.listView.LoadContentBinary(stream)<br />
|
||||
[/vb]</p>
|
||||
<p> </p>
|
||||
<p>Although saving and loading data this way is convenient, please consider the following drawback:</p>
|
||||
<ul>
|
||||
<li>Standard serialization mechanism of .NET is used for converting <em>classes</em> and <em>structures</em> to XML or binary representation – hence the serialized data may not be possible to deserialize on different version of Better ListView if any public members of the serialized class have been changed.</li>
|
||||
<li>The generated string is very long (few kilobytes for just two items).</li>
|
||||
<li>Lots of data are stored which are not related to content itself (e.g. item colors).</li>
|
||||
<li>The serialized representation is considered read-only – any changes can cause problems with deserialization; if you really want flexible way of storing ListView content, <strong>consider building a model or data layer that supports storing the data you need the way you need</strong>.</li>
|
||||
</ul>
|
||||
<p>On the other hand, using this way may be convenient when you want to <strong>transfer or copy ListView content between controls on even across application domain</strong> (Better ListView itself uses this mechanism to allow Drag and Drop between two applications – this “tour de force” kind of Drag and Drop is not avaiable in regular .NET ListView).</p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/how-to-store-better-listview-content-in-a-string-user-request/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>File Explorer with Better ListView</title>
|
||||
<link>http://www.componentowl.com/blog/file-explorer-with-better-listview/</link>
|
||||
<comments>http://www.componentowl.com/blog/file-explorer-with-better-listview/#respond</comments>
|
||||
<pubDate>Tue, 09 Aug 2011 16:04:31 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Better ListView]]></category>
|
||||
<category><![CDATA[Components]]></category>
|
||||
<category><![CDATA[browser]]></category>
|
||||
<category><![CDATA[explorer]]></category>
|
||||
<category><![CDATA[file]]></category>
|
||||
<category><![CDATA[folder]]></category>
|
||||
<category><![CDATA[tree]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=340</guid>
|
||||
<description><![CDATA[In release 2.0.2 we added a sample demonstrating how Better ListView can be used to construct folder tree and file browser to make a standalone file explorer!]]></description>
|
||||
<content:encoded><![CDATA[<p>In <a href="http://www.componentowl.com/better-listview/releases?since=2.0.2">release 2.0.2</a> we added a sample demonstrating how <a href="../../../../betterlistview.exe">Better ListView</a> can be used to construct folder tree and file browser to make a standalone file explorer:</p>
|
||||
<p><img class="aligncenter" src="../../../wp-content/uploads/2011/08/blv-fileexplorersample.png" alt="File Explorer Sample" width="480" height="314" align="middle" /></p>
|
||||
<p>There are two controls derived from <a href="../../../../betterlistview.exe">BetterListView</a>. One for the navigation pane (folder tree on left side) and one for the file view (on the right side).</p>
|
||||
<p>The <strong>FolderListView</strong> control allows browsing through virtual folders as well as folders on removable drives. We needed this control in our products because .NET does not provide any similar managed control (there is only FolderBrowserDialog, but we actually need a control).</p>
|
||||
<p>You can use it for your purposes as well, it is available in Better ListView Samples source code.</p>
|
||||
<p>Many features of Better ListView can be used to enhance file browsing, for example:</p>
|
||||
<ul>
|
||||
<li><strong>Drag and Drop</strong> – moving or copying files</li>
|
||||
<li><strong>Label Edit</strong> – renaming files</li>
|
||||
<li><strong>Thumbnails</strong> – display thumbnails of image files</li>
|
||||
<li><strong>Custom Tooltips</strong> – display extra information on each file item</li>
|
||||
<li><strong>Groups</strong> – organize files into groups (e.g. by size)</li>
|
||||
<li><strong>Check Boxes</strong> – select folders and sub-folders properly with three-state check boxes</li>
|
||||
<li><strong>Images</strong> – every file type could display different image (extracted icon)</li>
|
||||
<li><strong>Context Menus</strong> – do extra operations with files, like displaying file properties</li>
|
||||
<li><strong>Searching</strong> – doing keyboard search is very easy to search for some file</li>
|
||||
<li><strong>Sorting</strong> – sort files according to multiple properties (<em>this is demonstrated in the sample</em>)</li>
|
||||
<li><strong>Background Image</strong> – show that the user is located in special folder by ambient image on the background</li>
|
||||
</ul>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/file-explorer-with-better-listview/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Synergy of Better ListView and Our Applications</title>
|
||||
<link>http://www.componentowl.com/blog/synergy-of-better-listview-and-our-applications/</link>
|
||||
<comments>http://www.componentowl.com/blog/synergy-of-better-listview-and-our-applications/#respond</comments>
|
||||
<pubDate>Thu, 27 Jan 2011 19:33:12 +0000</pubDate>
|
||||
<dc:creator><![CDATA[Libor Tinka]]></dc:creator>
|
||||
<category><![CDATA[Components]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.componentowl.com/blog/?p=40</guid>
|
||||
<description><![CDATA[When developing sofware application, a custom component of some non-trivial scale is sometimes needed. Complex components are often created in companies as internal, single-purpose projects and never see wider public. This would be the case with our custom ListView component, but its scale and versability convinced us to made it available for others. You can […]]]></description>
|
||||
<content:encoded><![CDATA[<p>When developing sofware application, a custom component of some non-trivial scale is sometimes needed. Complex components are often created in companies as internal, single-purpose projects and never see wider public. This would be the case with our custom ListView component, but its scale and versability convinced us to made it available for others. You can read <a href="http://www.componentowl.com/better-listview/story">the story</a> behind, or just take a look on how exactly we use it.</p>
|
||||
<p>We at Dextronet are developing several desktop applications, which benefits from custom components. Our flagship product <a href="http://www.dextronet.com/swift-to-do-list-software/">Swift To-Do List</a> and ImagingShop (yet in the docks) both needed a serious visual component for major part of its client area. Look at screenshots of these applications:</p>
|
||||
<table cellpadding="8" align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="../../../wp-content/uploads/2011/01/stdl-full.jpg"><img class="size-medium wp-image-43 " title="stdl-full" src="../../../wp-content/uploads/2011/01/stdl-full-300x206.jpg" alt="Swift To-Do List" width="240" height="165" srcset="../../../wp-content/uploads/2011/01/stdl-full-300x206.jpg 300w, ../../../wp-content/uploads/2011/01/stdl-full.jpg 988w" sizes="(max-width: 240px) 100vw, 240px" /></a></td>
|
||||
<td><a href="../../../wp-content/uploads/2011/01/is-full.jpg"><img class="size-medium wp-image-41 " title="is-full" src="../../../wp-content/uploads/2011/01/is-full-300x229.jpg" alt="ImagingShop" width="240" height="183" srcset="../../../wp-content/uploads/2011/01/is-full-300x229.jpg 300w, ../../../wp-content/uploads/2011/01/is-full.jpg 1019w" sizes="(max-width: 240px) 100vw, 240px" /></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>It may not be noticeable where the ListView-like component is, so there is the highlighted version:</p>
|
||||
<table cellpadding="8" align="center">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="../../../wp-content/uploads/2011/01/stdl-highlight.jpg"><img class="size-medium wp-image-43 " title="stdl-full" src="../../../wp-content/uploads/2011/01/stdl-highlight-300x206.jpg" alt="Swift To-Do List" width="240" height="165" /></a></td>
|
||||
<td><a href="../../../wp-content/uploads/2011/01/is-highlight.jpg"><img class="size-medium wp-image-41 " title="is-full" src="../../../wp-content/uploads/2011/01/is-highlight-300x229.jpg" alt="ImagingShop" width="240" height="183" /></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>These parts look very different, as the applications have different purpose. One is a task management/sheduling software, and the second is a photo management/editing software.</p>
|
||||
<p>In the first case, we have to deal with specific requirements like <em>multi-column sorting</em>, <em>cell highlighting</em>, <em>item reordering</em> and of course <a href="../../../../quick-start-guide/better-listview/index.html">many, many more</a>…</p>
|
||||
<p>In the second case, photo application required display of <em>arbitrarily-sized thumbnails</em>, <em>custom tooltips</em> and <em>multi-line captions</em>.</p>
|
||||
<p>It was apparent, that the .NET ListView is not able to fullfill all of these requirements even if we bend and customize it to the limit. ListView is also a visual component of long history dating back to the earliest versions of Microsoft Windows. During its lifetime, it grabbed problematic stuff, that have to be kept for backward compatibility.</p>
|
||||
<p>And the .NET ListView is a wrapper around all this. It contains hacks and workarounds to make it work more properly. Even with all that, try to display a backround watermark image while retaining Vista visual style. Impossible.</p>
|
||||
<p>So we designed a control that lacks all the bugs and drawbacks of the .NET ListView while containing all the sweet features. It was ready to use for our needs.</p>
|
||||
<p>But it has some 40 K lines of code and aspiring to be itself a product. We decided to develop Better ListView as a commercialy available component at the very beginning of its development.</p>
|
||||
<p>We agreed on this kind of win-win-win strategy (for the end-user, for customer-developer, and for us) and hope all will benefit from maintaining a better Better ListView :-)</p>
|
||||
]]></content:encoded>
|
||||
<wfw:commentRss>http://www.componentowl.com/blog/synergy-of-better-listview-and-our-applications/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
<!--
|
||||
Performance optimized by W3 Total Cache. Learn more: https://www.w3-edge.com/products/
|
||||
|
||||
Content Delivery Network via Amazon Web Services: S3: www.componentowl.com
|
||||
|
||||
Served from: www.componentowl.com @ 2018-09-08 11:37:38 by W3 Total Cache
|
||||
-->
|
||||
Reference in New Issue
Block a user