C# List View v1.3



Introduction

Welcome to the fourth iteration of my Glacial ListView Control v1.3. I initially began this project back in December of 2002 when I went to write a ListView for a project I was contracting on, that needed to display scores from team based games (football, basketball, etc.). I started with the stock list control provided with VS.NET. After fumbling through way too many wndprocs, hacks, and dead ends, I decided that it would be a good idea to have an extremely customizable ListView for this and many future projects. So I started this project which is a ListView written entirely in C#.
On the first iteration v1.0, I tried to model everything based on a similar control I had written in MFC (which didn’t work out very well). My second pass at the control v1.1 focused on optimization and .NET-centric changes to my code base with a few important feature upgrades. The third pass was all about features and specifically control embedding. This fourth update mainly focuses on tightening everything up, fixing bugs, and a lot more embedding work.
One thing many of you have found out is that I make frequent bug fixes and updates to this control. In order to keep from driving the good people at The Code Project crazy with lots of updates though, I post the minor updates on my website. You can get these sub-updates right here at Glacial Listview Control. You can also get more detailed change logs there.
At this point, this control has simply too many features to document here. It’s been a real challenge to keep things clean enough in the source to be able to continually add features. The more things I add, the better my documentation and coding practices have to be or things will become unmanageable in a hurry. I am trying to create documentation to go along with this control in the form of a user guide to make using everything much easier.

Features

v1.3

Items collection editor, Activated embedding, Checkboxes (not embedded control check boxes), Help Files, Hover events.
Row borders, Control Embedding, New control modes (XP, Super Flat, Normal), XP Styles, Improved Sorting, Alternate Row Colors, Improved Image/Icon support, SubItem Cell word wrap, Optimization, Hot tracking for columns and items, Up/Down sorting, Focus Rectangle, Semi-transparent selections, User object variables at item and subitem levels, Multi-select, resizable columns, grid options, multi-line items, multi-line truncation, sorting, auto-sizing item height, Text + Alignment + Color, background color overrides, basic ListView functionality.

Highlights

Background/Foreground colors full control: You now have the ability to control the background or foreground color of the control at almost every level. I use a hierarchical system to control which color shows up. I take the lowest common override to determine the background color of a given cell. For instance, you can have a background color set for the control, the item and the subitem. A given cell will show up the subitem override. If you have only overridden the row background then that color will show up for the entire row. Same for foreground color (text color).
Items Collection Editor: You asked for it, so I did it. You can now add items in the collection editor as well as edit sub items visually. I’ve tried to make the collection editor as simple to use as possible.
Sorting: 3 methods of sorting are available. Insertion sort, which is great for sorts < 1000 in length. Quicksort and Merge sort for lists that are much greater in length. I also included the ability to sort by number, which you can set in the column property.
Checkboxes: Adding a checkbox to your item/subitem is as simple as setting the property in the column. Checkboxes are drawn onto the control so you don’t have to worry about dealing with embedded secondary controls.
Images: You can add an image or icon to column headers or items/subitems at will.
Hover Events: If you need to create a tooltip for a given column, you can subscribe to the hover event. Remember though, you must turn the hover events on for the hover event to fire.
Hot tracking: If you turn on hot tracking for the vertical and/or horizontal then you will see a highlight on the column/row the mouse is over with the color you have chosen.
UserObjects/Tag: In order to facilitate the ability to store your user data into the items, I have included Tag properties at both the Item and SubItem levels. NOTE: THE ITEM TAG IS NOT THE SAME AS SUBITEM[0] TAG. So don’t get these two confused. They are intended to be different.
Alternate row colors: This ended up being a highly sought after feature so I implemented it recently. To get that ‘checkbook’ look and feel, simply turn on alternate row colors and set the color you desire.
Control Embedding: You can embed raw controls or embed activated controls easily. Give your listview that professional look by adding progress bars, DateTime controls or your own custom control.

Using the control

The interface is modeled after the stock ListView built into the .NET framework, so many of the methods used to operate a ListView will hold up in this implementation. Someone mentioned a desire to have more examples of how to use the various features so I have included more information.
Most of the primary features of this control can be found in the design editor when you place the control onto the page. Everything from hot tracking, to grid lines, to selection color and others can be done visually through the MS design time environment.

To use this control

  1. Include the reference to the GlacialList.DLL in the references section of your project.
  2. Add using GlacialComponents.Controls directive to the head of your class file.

To add this control to your toolbox

  1. Go to Tools/Customize Toolbox/.NET Framework components
  2. Hit browse and navigate to the GlacialList.DLL and add it.
GlacialList mylist = new GlacialList();
mylist.Columns.Add( "Column1", 100 ); // this can also be added 
         // through the design time support 
mylist.Columns.Add( "Column2", 100 );
mylist.Columns.Add( "Column3", 100 );
mylist.Columns.Add( "Column4", 100 );
GLItem item;
item = this.glacialList1.Items.Add( "Atlanta Braves" );
item.SubItems[1].Text = "8v";
item.SubItems[2].Text = "Live";
item.SubItems[2].BackColor = Color.Bisque;
item.SubItems[3].Text = "MLB.TV";
item = this.glacialList1.Items.Add( "Florida Marlins" );
item.SubItems[1].Text = "";
item.SubItems[2].Text = "Delayed";
item.SubItems[2].BackColor = Color.LightCoral;
item.SubItems[3].Text = "Audio";
item.SubItems[1].BackColor = Color.Aqua; // set the background 
      // of this particular subitem ONLY
item.UserObject = myownuserobjecttype; // set a private user object
item.Selected = true; // set this item to selected state
item.SubItems[1].Span = 2; // set this sub item to span 2 spaces
ArrayList selectedItems = mylist.SelectedItems;
           // get list of selected items

Embedding

There are two types of embedding in GlacialList. The first is Standard Control Embedding and is basically a one to one relationship between cells and the embedded control. Controls that are not visible in the ListView are ‘hidden’ but not destructed. The second is Activated Embedding, this type of embedding only shows up when you double click on a cell and is the same for every cell in a column.
One of the big challenges I faced in adding embedded controls is a problem none of the other list controls have dealt with. How to make the embedded controls show up BEHIND borders. Since the borders are almost always drawn onto the control, it was not possible to simply draw over the embedded controls. I got around this by adding 5 BorderStrip controls that I created to give the effect of the border on top of embedded controls. Other controls either don’t have this feature or get rid of borders altogether to fix the problem.

Standard Control Embedding


The above graphic shows an embedded progress bar control.
One note about embedding right up front. I am giving you the tools to do whatever you want with a ListView. However, if you load 100,000 controls onto the surface then you have only yourself to blame if you scroll at a blazing 1 frame per hour. You must make intelligent decisions about what tradeoffs are best for whatever end result you are trying to achieve.
When I first tackled the problem of control embedding, I knew it wasn’t going to be easy. To get solid, professional results I would have to make many tradeoffs for functionality and performance. Before I began coding into the control, I wrote several test projects first to check out various theories I had on how large numbers of visible controls would perform on an active surface. These tests allowed me to optimize the feature set without killing performance.
One of the tradeoffs I had to deal with was whether to destruct or Hide a control when it goes out of view. If you destruct and reconstruct the control each time, you save on memory and handles but you sacrifice speed. If you Hide the controls that go out of view then the ListView starts bogging the system when you get large numbers of items. I decided that if someone was using embedded controls it was unlikely that they would have 100k+ items, so I ‘Hide’ controls that are not in current view.
In order to make use of the control embedding, you simply need to add a control to the SubItem.Controlproperty. You can also override that control at any time by setting the ForceText property of the subitem which overrides everything and displays whatever is in the Text attribute.

// add a progress bar control to a sub item
// setting item 0 and subitem 0
ProgressBar pb = new ProgressBar();
pb.Value = 50; // set it to some arbitrary value
item[0].SubItems[0].Control = pb;

Activated Embedding


The above graphic shows an activated embedded textbox making this cell editable.
Activated embedding is by far the more useful of the two embedding types and also a bit more complicated. Activated embedding allows you to embed a control without really embedding the control. An activated embedded control will only show up when someone double clicks on a cell. You set the activated embedded control in the column definition.
I struggled with many different ways to do activated embedding until I came up with the system of requiring the GLActivatedEmbedded interface to be implemented. In order to use the activated embedded type, you need to go into the column area and make the appropriate setting. Activated embedded types are valid for entire columns. You can’t have more than one type per column nor can you mix activated embedding with standard control embedding.

// Add a column, then set its embedded type
GLColumn column = this.glacialList2.Columns.Add( "First column", 100 );
column.ActivatedEmbeddedType = GLActivatedEmbeddedTypes.TextBox;

Or set it through the type in the Column properties of the column collection editor.

If you want to use your own type as an activated embedded control then you need to set the Activated Embedded type to UserType. Then you need to add the GLActivatedEmbedded interface to your control and implement its members. Here, for example, is the implementation for the text box control.

// snipet from my textbox built in implementation
// of the activated embedded control
protected GLItem m_item = null;
protected GLSubItem m_subItem = null;
protected GlacialList m_Parent = null;
// called when control is activated
public bool GLLoad( GLItem item, GLSubItem subItem, GlacialList listctrl )
{
    this.BorderStyle = BorderStyle.None;
    this.AutoSize = false;
    m_item = item;
    m_subItem = subItem;
    m_Parent = listctrl;
    this.Text = subItem.Text;
    return true;
}
// called when control is to be destroyed
public void GLUnload()
{
    m_subItem.Text = this.Text;
}
// form1.cs
column.ActivatedEmbeddedControlType = new GLTextBox();

At this point, every cell in the column can now use the activated embedded control!

XP Header Style

In order to achieve the XP look for the control, you need to do two things. First you need to set the ControlStyle to XP, second you need to put Application.EnableVisualStyles(); at the beginning of your application.

Super Flat Style

This is a style I came up with to satisfy a need I had to have some very lightweight reports. As you can see, you can set the alternating colors field as well to make things more lively.

Design Time

One of the really nice things I like about VS.NET is the design time support. A nice part of that framework is the CollectionEditor. The collection editor allows you to add/remove/edit collection items as well as edit their properties.
To add collection editor support to your collection at design time, you need to take several steps.

  1. Create a type converter for the underlying type that is held in the collection.
    public class GLColumnConverter : TypeConverter
    {
      public override bool CanConvertTo(ITypeDescriptorContext context,
                                        Type destinationType)
      {
        if (destinationType == typeof(InstanceDescriptor))
          return true;
        return base.CanConvertTo(context, destinationType);
      }
      public override object ConvertTo(ITypeDescriptorContext context,
                                       CultureInfo culture, object value,
                                       Type destinationType)
      {
        if (destinationType == typeof(InstanceDescriptor)
                 && value is GLColumn)
        {
          GLColumn column = (GLColumn)value;
          ConstructorInfo ci =
                 typeof(GLColumn).GetConstructor(new Type[] {});
          if (ci != null)
            return new InstanceDescriptor(ci, null, false);
        }
        return base.ConvertTo(context, culture, value, destinationType);
      }
    }
  2. Add the [TypeConverter("YourNameSpace.YourTypeConverter")] attribute to your collected type. This will allow your type to be serialized at design time.
    [TypeConverter("GlacialComponents.Controls.GLColumnConverter")]
    public class GLColumn
    {
      ...
  3. Create a custom collection editor class and add a refresh (otherwise your design time graphic won’t update with the new information).
    public class CustomCollectionEditor : CollectionEditor
    {
      public CustomCollectionEditor(Type type) : base(type) {}
      public override object EditValue(ITypeDescriptorContext context,
                                       IServiceProvider isp, object value)
      {
        GlacialList originalControl = (GlacialList)context.Instance;
        object returnObject = base.EditValue( context, isp, value );
        originalControl.Refresh();//.Invalidate( true );
        return returnObject;
      }
    }
  4. Add Collection Editor attribute to the instance of the collection.
    [
    Category("Behavior"),
    Description("Column Collection"),
    DesignerSerializationVisibility(
      DesignerSerializationVisibility.Content),
      Editor(typeof(CustomCollectionEditor), typeof(UITypeEditor)),
    Browsable(true)
    ]
    public GLColumnCollection Columns
    {
        get    { return m_Columns; }
    }

This is all you need to bring design time support to your collection!

Some Frequently Asked Questions

Q. XP Styles aren’t showing up for me even though I have everything set correctly.
A. You need to make a call to Application.EnableVisualStyles() before the Application.Run(...) of your application.
Q. I don’t see the fake button to the right of visible columns in the header.
A. The fake button on the stock ListView never made sense to me. This is not a bug, this is exactly the way I want it.
Q. How do I make a cell editable?
A. Activated embedding. Go to the column definition and set the activated embedded type to TextBox.
Q. Why does your vertical scrollbar stop at the base of the header?
A. Why shouldn’t it? The scrollbar controls the client region not the header. The stock ListView is wrong in its implementation of that. 🙂
Q. It won’t let me ‘Add’ subitems, what am I doing wrong?
A. One of my favorite features of this control is that subitems are added and removed automatically and behind the scenes. If you add an item or column, rest assured, the subitem exists already.

Where am I going with this in the future?

This project will fork in two directions in the future. First, I intend to make a ‘Pro’ version of this control that I can market commercially. I intend to rewrite most of this control based on what I’ve learned and call it version 2.0. However, I also intend to keep this codebase and create a version 1.4 and above that will remain free here on The Code Project. I will do this by backporting major features (like TreeView) that I intend to add to 2.0. I hope you can all support me as I try to move into the controls business while continuing to provide free controls to people here. The versions I post on The Code Project will always be free and clear for all those who need it.
For v1.4, I am looking to bring a tree view to the control. I’m not sure if I am going to integrate it or if I am going to make it a separate control that subclasses the ListView (most likely). But that’s the next big thing on my plate. I also would like to really tighten up the code. There are now so many features in this list control that I can’t test them all any time I make a given change. Please be diligent in sending me bug reports as I need them to improve this control.

Conclusion

My fourth pass at this control really brings the control into what I always wanted in a list control. It’s very flexible, fast, and has a large number of features. I recently integrated it into my full Glacial Source Control version control system which is one of the main reasons I started this project which went very smoothly. I am particularly interested in bugs and feature requests. I would request that you make feature requests on the message board here though so others can comment. I hope you enjoy the control.

License

You are free to use this version of the ListView control in both personal and commercial applications. However, you may only redistribute this in its compiled form (modified or unmodified), you may not redistribute the source or modified source. When using this control, please include the line “Glacial ListView – Copyright Glacial Components Software 2004 – http://www.glacialcomponents.com/” reference in either the about or in the documentation. This will help me out and allow me to continue to provide you with free controls.

“C# List View v1.3”의 408개의 댓글

  1. hey there and thank you for your information – I have
    certainly picked up anything new from right here.
    I did however expertise several technical points using this
    site, as I experienced to reload the website many times previous to
    I could get it to load properly. I had been wondering if
    your web hosting is OK? Not that I am complaining, but slow loading instances times will
    sometimes affect your placement in google and could
    damage your high quality score if advertising and marketing with Adwords.
    Well I am adding this RSS to my e-mail and could look out for much
    more of your respective fascinating content. Ensure that you update this again very soon.

  2. An outstanding share! I have just forwarded this onto a co-worker who had
    been conducting a little research on this. And he in fact ordered me
    lunch simply because I discovered it for him…
    lol. So let me reword this…. Thanks for the meal!!
    But yeah, thanx for spending the time to discuss this issue here on your site.

  3. Having read this I believed it was really informative. I appreciate you spending some time and effort to put this content together. I once again find myself personally spending way too much time both reading and posting comments. But so what, it was still worthwhile!|

  4. Cbd oil that works 2020
    Greetings from Florida! I’m bored to tears at work so I decided
    to check out your blog on my iphone during lunch break.

    I really like the info you provide here and can’t wait to take a look
    when I get home. I’m amazed at how quick your blog loaded on my mobile ..
    I’m not even using WIFI, just 3G .. Anyways, wonderful blog!
    best cbd oil for pain http://tinyurl.com/cbd-oil-that-works-2020 cbd oil that works 2020 http://tinyurl.com/cbd-oil-that-works-2020

  5. Thank you for another informative website. The place else may
    just I am getting that kind of info written in such
    an ideal means? I have a venture that I’m simply now operating
    on, and I’ve been at the look out for such information.

  6. I just want to tell you that I’m very new to blogs and actually enjoyed you’re web site. Likely I’m planning to bookmark your site . You really come with awesome writings. Cheers for revealing your webpage.

  7. Hey There. I found your blog using msn. This is an extremely well written article. I’ll be sure to bookmark it and return to read more of your useful info. Thanks for the post. I’ll definitely comeback.

  8. I don’t know whether it’s just me or if perhaps everyone else encountering problems with your site. It appears as though some of the text within your posts are running off the screen. Can somebody else please provide feedback and let me know if this is happening to them too? This might be a issue with my web browser because I’ve had this happen previously. Cheers

  9. Have you ever considered publishing an ebook or guest authoring on other sites? I have a blog based on the same ideas you discuss and would really like to have you share some stories/information. I know my viewers would enjoy your work. If you’re even remotely interested, feel free to shoot me an e mail.

  10. An impressive share, I simply offered this onto a coworker that was doing a little analysis on this. And also he in fact purchased me morning meal since I located it for him. smile. So let me reword that: Thnx for the reward! But yeah Thnkx for spending the moment to discuss this, I really feel strongly regarding it and like finding out more on this topic. Ideally, as you come to be competence, would certainly you mind updating your blog with more information? It is extremely useful for me. Large thumb up for this post!

  11. Nice message. I find out something extra challenging on various blogs daily. It will constantly be boosting to read content from various other authors as well as practice a little something from their shop. I?d choose to make use of some with the material on my blog site whether you don?t mind. Natually I?ll give you a web link on your internet blog. Thanks for sharing.

  12. Great read. I just now discovered this article but I’m at my gym right now so I will have to read the rest of this later on when I can find the time and I’m able to read it without being distracted. It’s weird but for some reason your blog takes about a minute to fully load on my dads computer. I truly believe your post demands much more consideration.

  13. I blog quite often and I truly appreciate your content. Your article has really peaked my interest. I am going to book mark your website and keep checking for new details about once per week. I subscribed to your RSS feed as well.

  14. This is the right site for anybody who wants to understand this topic. You realize a whole lot its almost tough to argue with you (not that I actually would want to…HaHa). You definitely put a fresh spin on a subject which has been discussed for many years. Great stuff, just great!

  15. After checking out a handful of the blog articles on your website, I truly like your way of writing a blog. I book-marked it to my bookmark website list and will be checking back in the near future. Please visit my web site as well and tell me your opinion.

  16. I was very happy to find this page. I want to to thank you for ones time for this particularly fantastic read!! I definitely enjoyed every little bit of it and I have you book marked to look at new information in your blog.

  17. I seriously love your website.. Excellent colors & theme. Did you build this amazing site yourself? Please reply back as I’m trying to create my own blog and want to know where you got this from or exactly what the theme is named. Thank you!

  18. Can I just say what a relief to find an individual who actually understands what they’re talking about on the web. You actually know how to bring an issue to light and make it important. A lot more people really need to look at this and understand this side of your story. It’s surprising you’re not more popular because you definitely have the gift.

  19. This is the right webpage for everyone who wishes to find out about this topic. You realize so much its almost hard to argue with you (not that I actually will need to…HaHa). You definitely put a fresh spin on a subject which has been written about for years. Excellent stuff, just great!

  20. May I simply just say what a comfort to find somebody that truly understands what they are talking about on the web. You certainly know how to bring an issue to light and make it important. More and more people have to look at this and understand this side of the story. I was surprised you are not more popular because you certainly possess the gift.

  21. I must thank you for the efforts you’ve put in penning this website. I really hope to see the same high-grade blog posts by you in the future as well. In fact, your creative writing abilities has inspired me to get my own website now 😉

  22. Please let me know if you’re looking for
    a article writer for your blog. You have some really good articles and I believe I would be a good asset.

    If you ever want to take some of the load off, I’d absolutely love to write some content for your blog in exchange for a link back to mine.

    Please shoot me an email if interested. Cheers!

  23. An outstanding share! I’ve just forwarded this onto a colleague who has been doing a little homework on this. And he in fact bought me dinner because I found it for him… lol. So allow me to reword this…. Thanks for the meal!! But yeah, thanx for spending some time to discuss this issue here on your blog.

  24. Hi there! I could have sworn I’ve visited this blog before but after going through many of the posts I realized it’s new to me. Regardless, I’m certainly pleased I stumbled upon it and I’ll be book-marking it and checking back frequently!

  25. I was very pleased to find this website. I want to to thank you for your time due to this wonderful read!! I definitely liked every little bit of it and i also have you saved as a favorite to check out new stuff in your site.

  26. An interesting discussion is worth comment. I do believe that you should publish more about this subject, it may not be a taboo subject but generally people don’t speak about such topics. To the next! Kind regards!!

  27. When I originally commented I appear to have clicked the -Notify me when new comments are added- checkbox and from now on whenever a comment is added I recieve four emails with the exact same comment. Is there a means you can remove me from that service? Appreciate it!

  28. I really love your site.. Very nice colors & theme. Did you make this amazing site yourself? Please reply back as I’m wanting to create my very own website and would love to learn where you got this from or exactly what the theme is called. Cheers!

  29. I truly love your website.. Great colors & theme. Did you develop this web site yourself? Please reply back as I’m looking to create my own personal site and would love to find out where you got this from or just what the theme is named. Thank you!

  30. Right here is the right website for anybody who really wants to understand this topic. You know so much its almost hard to argue with you (not that I really will need to…HaHa). You certainly put a fresh spin on a topic that has been discussed for decades. Wonderful stuff, just great!

  31. I must thank you for the efforts you’ve put in penning this site. I really hope to view the same high-grade blog posts from you in the future as well. In truth, your creative writing abilities has encouraged me to get my very own site now 😉

  32. I blog frequently and I really appreciate your information. This great article has really peaked my interest. I am going to book mark your blog and keep checking for new information about once per week. I opted in for your RSS feed as well.

  33. I blog frequently and I truly appreciate your information. This great article has really peaked my interest. I am going to bookmark your website and keep checking for new details about once per week. I subscribed to your RSS feed as well.

  34. Aw, this was a really good post. Taking a few minutes and actual effort to produce a really good article… but what can I say… I procrastinate a lot and never seem to get nearly anything done.

  35. May I simply say what a comfort to uncover someone that truly understands what they are discussing over the internet. You certainly know how to bring an issue to light and make it important. A lot more people should check this out and understand this side of your story. I can’t believe you’re not more popular since you definitely have the gift.

  36. I blog quite often and I truly thank you for your information. Your article has really peaked my interest. I’m going to book mark your website and keep checking for new information about once per week. I subscribed to your Feed as well.

  37. I truly love your site.. Excellent colors & theme. Did you create this site yourself? Please reply back as I’m hoping to create my own website and would love to know where you got this from or what the theme is named. Thanks!

  38. Good post. I learn something new and challenging on sites I stumbleupon everyday. It will always be helpful to read through content from other authors and practice something from other web sites.

  39. Next time I read a blog, I hope that it won’t disappoint me just as much as this particular one. After all, I know it was my choice to read, nonetheless I actually believed you’d have something helpful to talk about. All I hear is a bunch of crying about something you could fix if you weren’t too busy searching for attention.

  40. Hi, I do believe this is an excellent site. I stumbledupon it 😉 I’m going to return once again since i have book-marked it. Money and freedom is the best way to change, may you be rich and continue to help others.

  41. Howdy! This post could not be written any better! Going through this post reminds me of my previous roommate! He constantly kept preaching about this. I most certainly will forward this post to him. Fairly certain he’ll have a good read. Many thanks for sharing!

  42. Oh my goodness! Amazing article dude! Thanks, However I am encountering issues with your RSS. I don’t know why I am unable to subscribe to it. Is there anybody getting identical RSS issues? Anyone that knows the solution will you kindly respond? Thanks!!

  43. You are so interesting! I don’t suppose I’ve truly read through anything like that before. So good to find another person with a few original thoughts on this subject. Seriously.. thank you for starting this up. This website is something that is required on the web, someone with a little originality!

  44. I was excited to uncover this web site. I need to to thank you for ones time for this fantastic read!! I definitely liked every little bit of it and I have you bookmarked to see new information in your website.

  45. An interesting discussion is definitely worth comment. I do believe that you should write more on this issue, it might not be a taboo matter but usually people do not speak about these subjects. To the next! Best wishes!!

  46. Having read this I believed it was extremely informative. I appreciate you spending some time and energy to put this informative article together. I once again find myself personally spending a lot of time both reading and commenting. But so what, it was still worth it!

  47. An outstanding share! I’ve just forwarded this onto a friend who was conducting a little research on this. And he in fact bought me breakfast because I stumbled upon it for him… lol. So allow me to reword this…. Thanks for the meal!! But yeah, thanks for spending some time to talk about this topic here on your site.

  48. Hello there! This article could not be written any better! Going through this post reminds me of my previous roommate! He continually kept preaching about this. I am going to forward this article to him. Fairly certain he’s going to have a very good read. Thank you for sharing!

  49. Hi, I do think this is an excellent web site. I stumbledupon it 😉 I may revisit yet again since i have book-marked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.

  50. Aw, this was an exceptionally nice post. Taking a few minutes and actual effort to produce a really good article… but what can I say… I procrastinate a lot and don’t seem to get nearly anything done.

  51. Having read this I believed it was very informative. I appreciate you spending some time and effort to put this information together. I once again find myself personally spending a lot of time both reading and leaving comments. But so what, it was still worth it!

  52. This is the ideal blog site for anybody that wishes to learn about this subject. You understand a lot its practically difficult to argue with you (not that I really would want?HaHa). You absolutely placed a brand-new spin on a subject thats been covered for years. Excellent stuff, just fantastic!

  53. Good post. I learn something new and challenging on websites I stumbleupon everyday. It will always be useful to read through articles from other writers and use a little something from their websites.

  54. You are so cool! I do not think I’ve read through something like that before. So wonderful to discover somebody with unique thoughts on this topic. Really.. thank you for starting this up. This web site is something that’s needed on the web, someone with a bit of originality!

  55. Hi, I do think your site may be having web browser compatibility problems. Whenever I look at your web site in Safari, it looks fine however when opening in Internet Explorer, it has some overlapping issues. I merely wanted to give you a quick heads up! Apart from that, wonderful blog!

  56. Howdy! I could have sworn I’ve visited this web site before but after going through a few of the posts I realized it’s new to me. Regardless, I’m certainly pleased I found it and I’ll be book-marking it and checking back regularly!

  57. When I initially commented I seem to have clicked the -Notify me when new comments are added- checkbox and from now on every time a comment is added I get 4 emails with the same comment. Perhaps there is a means you are able to remove me from that service? Appreciate it!

  58. I would like to thank you for the efforts you’ve put in penning this blog. I really hope to check out the same high-grade content from you in the future as well. In truth, your creative writing abilities has inspired me to get my own, personal blog now 😉

  59. Greetings, I think your website could be having browser compatibility problems. When I look at your site in Safari, it looks fine however, if opening in Internet Explorer, it’s got some overlapping issues. I merely wanted to provide you with a quick heads up! Other than that, great website!

  60. Howdy! This post could not be written much better! Looking at this article reminds me of my previous roommate! He always kept talking about this. I’ll send this information to him. Fairly certain he’s going to have a great read. Thank you for sharing!

  61. The next time I read a blog, I hope that it doesn’t fail me just as much as this particular one. I mean, Yes, it was my choice to read through, but I really believed you would have something interesting to say. All I hear is a bunch of crying about something you can fix if you were not too busy seeking attention.

  62. Hi, I do believe this is an excellent blog. I stumbledupon it 😉 I may revisit yet again since I book marked it. Money and freedom is the best way to change, may you be rich and continue to help other people.

  63. I absolutely love your site.. Very nice colors & theme. Did you make this site yourself? Please reply back as I’m trying to create my own personal website and want to know where you got this from or exactly what the theme is named. Thanks!

  64. Hi, I do think this is an excellent web site. I stumbledupon it 😉 I am going to come back yet again since i have bookmarked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.

  65. Oh my goodness! Impressive article dude! Thank you, However I am going through troubles with your RSS. I don’t understand why I am unable to join it. Is there anybody getting similar RSS issues? Anyone that knows the answer can you kindly respond? Thanx!!

  66. I really love your blog.. Pleasant colors & theme. Did you create this web site yourself? Please reply back as I’m attempting to create my own personal site and would love to find out where you got this from or exactly what the theme is called. Many thanks!

  67. I really love your site.. Pleasant colors & theme. Did you create this web site yourself? Please reply back as I’m attempting to create my very own blog and would like to know where you got this from or what the theme is named. Thanks!

  68. Next time I read a blog, I hope that it doesn’t fail me just as much as this particular one. After all, I know it was my choice to read, nonetheless I really thought you would have something helpful to talk about. All I hear is a bunch of whining about something that you could possibly fix if you weren’t too busy searching for attention.

  69. After I originally commented I seem to have clicked on the -Notify me when new comments are added- checkbox and now whenever a comment is added I receive four emails with the exact same comment. There has to be an easy method you are able to remove me from that service? Cheers!

  70. When I originally left a comment I seem to have clicked on the -Notify me when new comments are added- checkbox and now whenever a comment is added I recieve 4 emails with the exact same comment. Perhaps there is a way you are able to remove me from that service? Thank you!

  71. Howdy! This article couldn’t be written much better! Looking at this post reminds me of my previous roommate! He continually kept talking about this. I most certainly will send this post to him. Fairly certain he’s going to have a good read. Thank you for sharing!

  72. Oh my goodness! Incredible article dude! Thanks, However I am encountering troubles with your RSS. I don’t understand the reason why I can’t subscribe to it. Is there anyone else having identical RSS issues? Anyone that knows the answer will you kindly respond? Thanx!!

  73. I’m pretty pleased to uncover this great site. I need to to thank you for your time for this fantastic read!! I definitely appreciated every bit of it and I have you saved as a favorite to look at new stuff on your website.

  74. Oh my goodness! Amazing article dude! Thanks, However I am going through troubles with your RSS. I don’t understand why I am unable to join it. Is there anyone else having identical RSS issues? Anyone who knows the answer will you kindly respond? Thanx!!

  75. Hi there, I think your site could be having browser compatibility issues. When I take a look at your site in Safari, it looks fine however, when opening in I.E., it has some overlapping issues. I just wanted to provide you with a quick heads up! Aside from that, wonderful site!

  76. Oh my goodness! Incredible article dude! Thank you so much, However I am experiencing issues with your RSS. I don’t understand the reason why I can’t subscribe to it. Is there anybody else having identical RSS problems? Anyone who knows the answer can you kindly respond? Thanx!!

  77. May I simply say what a comfort to find somebody that really understands what they’re talking about on the web. You actually know how to bring a problem to light and make it important. More and more people should check this out and understand this side of your story. I was surprised you aren’t more popular because you certainly possess the gift.

  78. Hi! I could have sworn I’ve been to this site before but after going through a few of the posts I realized it’s new to me. Anyhow, I’m definitely pleased I came across it and I’ll be bookmarking it and checking back frequently!

  79. I’m impressed, I must say. Seldom do I come across a blog that’s both educative and interesting, and without a doubt, you’ve hit the nail on the head. The issue is something not enough men and women are speaking intelligently about. I am very happy I stumbled across this in my search for something concerning this.

  80. After I initially commented I appear to have clicked the -Notify me when new comments are added- checkbox and now whenever a comment is added I receive 4 emails with the same comment. Is there an easy method you are able to remove me from that service? Thanks!

  81. The next time I read a blog, I hope that it doesn’t fail me just as much as this one. I mean, I know it was my choice to read through, but I genuinely thought you would probably have something helpful to say. All I hear is a bunch of whining about something you can fix if you were not too busy seeking attention.

  82. When I initially commented I clicked the -Notify me when brand-new remarks are included- checkbox and also currently each time a comment is included I get 4 emails with the exact same comment. Exists any way you can eliminate me from that solution? Many thanks!

  83. I?d need to consult you here. Which is not something I generally do! I delight in reviewing a message that will make people assume. Likewise, thanks for enabling me to comment!

  84. Hi, I do think this is a great website. I stumbledupon it 😉 I am going to revisit once again since I bookmarked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.

  85. You’ve made some good points there. I checked on the net for additional information about the issue and found most individuals will go along with your views on this site.

  86. After going over a few of the articles on your web page, I truly like your way of writing a blog. I saved it to my bookmark webpage list and will be checking back soon. Please check out my website too and let me know your opinion.

  87. An intriguing discussion is worth comment. There’s no doubt that that you should publish more about this subject, it may not be a taboo matter but usually folks don’t speak about such issues. To the next! Many thanks!!

  88. Aw, this was a very nice post. Spending some time and actual effort to generate a good article… but what can I say… I procrastinate a whole lot and never seem to get nearly anything done.

  89. An intriguing discussion is worth comment. I do believe that you ought to write more on this issue, it might not be a taboo subject but generally people do not speak about these issues. To the next! Many thanks!!

  90. An interesting discussion is definitely worth comment. There’s no doubt that that you need to publish more about this subject, it may not be a taboo matter but usually people do not talk about such subjects. To the next! Best wishes!!

  91. Hi there! I could have sworn I’ve visited this blog before but after looking at a few of the articles I realized it’s new to me. Anyways, I’m certainly delighted I found it and I’ll be book-marking it and checking back frequently!

  92. Greetings, I do believe your web site may be having browser compatibility problems. Whenever I take a look at your blog in Safari, it looks fine however, when opening in Internet Explorer, it has some overlapping issues. I just wanted to provide you with a quick heads up! Besides that, great website!

  93. I blog frequently and I really thank you for your information. This article has truly peaked my interest. I am going to book mark your blog and keep checking for new information about once per week. I subscribed to your RSS feed as well.

  94. After checking out a handful of the articles on your website, I really appreciate your technique of blogging. I book-marked it to my bookmark website list and will be checking back in the near future. Please visit my web site too and let me know your opinion.

  95. Hello, I do believe your blog might be having web browser compatibility problems. When I look at your website in Safari, it looks fine however when opening in I.E., it’s got some overlapping issues. I just wanted to provide you with a quick heads up! Besides that, great blog!

  96. Hello there! This post could not be written much better! Reading through this article reminds me of my previous roommate! He constantly kept talking about this. I’ll forward this article to him. Pretty sure he will have a great read. Thanks for sharing!

  97. Can I just say what a comfort to uncover someone who actually understands what they are discussing on the web. You certainly realize how to bring an issue to light and make it important. A lot more people ought to read this and understand this side of the story. It’s surprising you are not more popular because you most certainly have the gift.

  98. You’re so awesome! I do not believe I’ve read through a single thing like that before. So nice to find someone with original thoughts on this issue. Really.. thanks for starting this up. This site is something that is needed on the internet, someone with a bit of originality!

  99. I’m amazed, I must say. Rarely do I come across a blog that’s both educative and engaging, and let me tell you, you have hit the nail on the head. The problem is something not enough men and women are speaking intelligently about. I am very happy that I found this in my search for something regarding this.

  100. I’m amazed, I must say. Rarely do I come across a blog that’s equally educative and entertaining, and without a doubt, you have hit the nail on the head. The problem is something which too few people are speaking intelligently about. I’m very happy that I came across this in my hunt for something relating to this.

  101. Right here is the perfect site for everyone who hopes to find out about this topic. You understand so much its almost tough to argue with you (not that I actually would want to…HaHa). You definitely put a brand new spin on a topic that has been discussed for decades. Excellent stuff, just great!

  102. May I simply just say what a comfort to find somebody who genuinely knows what they’re talking about on the net. You definitely know how to bring a problem to light and make it important. More people ought to check this out and understand this side of your story. I can’t believe you aren’t more popular given that you definitely possess the gift.

  103. After I initially commented I appear to have clicked the -Notify me when new comments are added- checkbox and now each time a comment is added I recieve 4 emails with the same comment. There has to be a means you can remove me from that service? Appreciate it!

  104. Nice post. I learn something new and challenging on blogs I stumbleupon on a daily basis. It’s always exciting to read articles from other writers and use a little something from other web sites.

  105. Right here is the perfect webpage for everyone who wants to understand this topic. You know so much its almost hard to argue with you (not that I really will need to…HaHa). You certainly put a fresh spin on a subject which has been written about for years. Great stuff, just excellent!

  106. An impressive share! I’ve just forwarded this onto a colleague who had been conducting a little research on this. And he in fact bought me breakfast due to the fact that I found it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanx for spending time to talk about this subject here on your site.

  107. Oh my goodness! Awesome article dude! Thanks, However I am having problems with your RSS. I don’t know the reason why I am unable to join it. Is there anybody having the same RSS issues? Anyone who knows the answer will you kindly respond? Thanx!!

  108. May I just say what a relief to find somebody that really knows what they’re discussing over the internet. You actually know how to bring a problem to light and make it important. More and more people really need to look at this and understand this side of the story. I was surprised you aren’t more popular given that you definitely have the gift.

  109. Having read this I believed it was extremely enlightening. I appreciate you spending some time and energy to put this content together. I once again find myself personally spending a lot of time both reading and posting comments. But so what, it was still worth it!

  110. An outstanding share! I’ve just forwarded this onto a co-worker who was conducting a little homework on this. And he in fact ordered me lunch simply because I discovered it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanks for spending time to talk about this subject here on your blog.

  111. Who was your mom? They deserve a trophy for a job well done. I am not telling you that you are incorrect but I am not saying you are correct either. Some nice points there. I have been looking everywhere for this!

  112. Having read this I believed it was extremely enlightening. I appreciate you taking the time and effort to put this article together. I once again find myself personally spending a lot of time both reading and leaving comments. But so what, it was still worthwhile!

  113. Having read this I thought it was very informative. I appreciate you finding the time and effort to put this information together. I once again find myself personally spending a significant amount of time both reading and posting comments. But so what, it was still worth it!

  114. The very next time I read a blog, Hopefully it does not fail me as much as this particular one. I mean, Yes, it was my choice to read, however I actually believed you would have something useful to talk about. All I hear is a bunch of moaning about something you can fix if you were not too busy looking for attention.

  115. Can I simply say what a comfort to discover someone who truly knows what they’re discussing on the net. You definitely realize how to bring a problem to light and make it important. More people really need to look at this and understand this side of your story. It’s surprising you are not more popular given that you most certainly possess the gift.

  116. After looking over a few of the articles on your web site, I seriously like your way of writing a blog. I book marked it to my bookmark webpage list and will be checking back soon. Please visit my web site too and tell me how you feel.

  117. I blog frequently and I really thank you for your content. This article has truly peaked my interest. I’m going to take a note of your website and keep checking for new information about once per week. I opted in for your RSS feed too.

  118. Can I simply state what an alleviation to locate somebody who actually recognizes what theyre talking about on the internet. You certainly understand exactly how to bring a problem to light and make it crucial. More people require to read this and also understand this side of the tale. I cant believe youre not much more preferred due to the fact that you definitely have the gift.

댓글 남기기