Latest 8.8 release of DotNetBar for Windows Forms includes all new Year view for Scheduling/Calendar control. In this view you can see all calendar days with appointments for whole year. This is what it looks like:

Note the marked dates on calendar. They indicate that there are appointments on those dates. When day is clicked control will automatically take you to the view you specify to see details for that day or you can choose to execute any custom action you wish.

CalendarView.YearViewStartDate and CalendarView.YearViewEndDate will determine the number of months displayed in the calendar. The maximum number of displayable months is currently set to 120. Why 120 you might ask? Why is winter cold? 🙂

Month days that have CalendarItems associated with them will, by default, have their date text displayed in Bold.  The background coloring of these items can be set to several different built-in styles (via the CalendarView.YearViewAppointmentLinkStyle property).  Day cells that do not have associated CalendarItems are, by default, displayed in the normal text and background, color and style.

There are two types of day cells displayed in the calendar months – those that have associated CalendarItems (Appointments or CustomCalendarItems), and those that do not.

Day cells that have CalendarItems associated with them will, by default, have their date text displayed in Bold.  The background coloring of these items can be set to several different built-in styles (via the CalendarView.YearViewAppointmentLinkStyle property).

In the above example, cells with associated CalendarItems are being displayed in the blue diagonal gradient with bolded text.  All others, displayed in their normal defaults, signify no associated CalendarItems.

CalendarView.YearViewAppointmentLink – This property establishes how the user interacts with those cells that contain Appointments (or CalendarItems in general).  The possible settings for this property are defined in the eYearViewDayLink enum, and are as follows:  “None”, “Click”, “CtrlClick”, and “DoubleClick”.  You can combine these such that, for instance, a Click or a DoubleClick will cause the link to be activated.   The default is eYearViewDayLink.Click. This can be done like the following:

CalendarView.YearViewAppointmentLink = (eYearViewDayLink.CtrlClick | eYearViewDayLink.DoubleClick);

CalendarView.YearViewNonAppointmentLink – This property establishes how the user interacts with those cells that do not contain Appointments (or CalendarItems in general).  The possible settings for this property are, again, defined in the eYearViewDayLink enum, and may be combined to give the desired interaction.  The default is eYearViewDayLink.DoubleClick.

When a selection link is established (via the means established in the above YearViewApplintmentLink and YearViewNonAppointmentLink properties), you can have any Calendar display view activated by default when the corresponding day cell is selected.  This can be accomplished via the CalendarView.YearViewLinkView property.

The CalendarView.YearViewLinkView property sets which view (None, Day, Week, Month, or TimeLine) is “linked” to the calendar day cell selection. When enabled, clicking (or hitting enter or the Spacebar) on a cell will cause the LinkView to be activated and positioned at the day/time previously selected in the YearView.  The default is eCalendarView.Day.

There are many other very useful customization options and you can find all details in Knowledge Base Schedule control article under “Year View” section.

Schedule control in DotNetBar includes 5 different views for your appointments and each of them can be customized to fit your need. I think this is one of the best Schedule controls available. We are working to make it the best Schedule control in the world and we will not stop until it is. The plot is thickening 🙂 Stay tuned.

Tagged with:

Hello Good People,

We just released new DotNetBar for Windows Forms 8.6 with over 45 new features and enhancements. This release includes all new Knob, dial control with 4 visual styles.

Here are screen-shots of two out of 4 styles included with new knob control:

Some of the improvements made in latest release:

  • Schedule control now supports time indicators/markers
  • Schedule control now supports keyboard navigation
  • AdvTree now can format cell Text for display using Cell.TextDisplayFormat property
  • AdvPropertyGrid supports PasswordPropertyTextAttribute
  • Schedule control supports custom appointment colors
  • Much, much more… Here are detailed Release Notes.

Thank you everyone so much for using our controls. We are full speed on new features and new products 😉

Hello Good People,
We just released new DotNetBar for Windows Forms 8.6 with over 45 new features and enhancements. This release includes all new Knob, dial control with 4 visual styles.

Here are screen-shots of two out of 4 styles included with new knob control:

Tagged with:

Today’s DotNetBar for WinForms update, contains improvements to Schedule control that many of you have been asking for. Now you can control time display in Day/Week view. Default view shows the working and non-working hours as specified on CalendarModel.WorkDays.WorkStartTime/WorkEndTime, i.e. you see 24 hours or whole day. Here is image that shows default view, notice that non-working hours have gray background:

But if you set CalendarView.ShowOnlyWorkDayHours=true you will see only working hours displayed on calendar. This image shows that, notice that non-working hours are not visible:

Images on appointments

Latest release also adds easy way to assign images to appointment. On each model Appointment object there are two properties you can use to do so:

  • Appointment.ImageKey – Specifies the key of the image in the ImageList that you assign to CalendarView.Images property.
  • Appointment.ImageAlign – Specifies the alignment of the image inside of appointment.

Here is screen-shot of two appointments with images assigned:

Yellow appointment has default image alignment, which is top-left, and blue appointment has bottom-right image alignment.

Release with these new features is available now.

Tagged with:

Today we released weekly update to DotNetBar for WinForms and Schedule control includes very nice new functionality that I would like to show to you.

The CalendarView control has the ability to display any number of TimeIndicators in the Day, Week, and TimeLine views.  TimeIndicators are used to give feedback to the user as to either the current system time, or a user designated time.  Here is an example of what a set of 3 different TimeIndicators could look like (click image for full size image):

DotNetBar Time Indicator in Calendar/Schedule Control

The CalendarView control has a default TimeIndicator object available for your configuration and use.  You can also define as many as you need and add them to the CalendarView.TimeIndicators collection.  Each TimeIndicator object has the following properties available for user configuration:

IndicatorTime: A DateTime value that signifies the root starting display time for the Indicator.

  • IndicatorTimeOffset: A TimeSpan value that signifies a time offset from the set IndicatorTime.  The Indicator will be displayed at IndicatorTime plus IndicatorTimeOffset.
  • IndicatorArea: The display area designation, as defined by eTimeIndicatorArea.
    • eTimeIndicatorArea.Header:  The Indicator is displayed only in the associated Time Header (green example in above figure).
    • eTimeIndicatorArea.Content:  The Indicator is displayed only in the view Content area (pink example in above figure).
    • eTimeIndicatorArea.All:  The Indicator is displayed in both the Time Header and view Content area (gold example in above figure).
  • IndicatorSource:  Designates the source of the IndicatorTime, as defined by eTimeIndicatorSource.
    • eTimeIndicatorSource.SystemTime:  IndicatorTime is updated by the System time at 1 minute intervals (if enabled, see below).
    • eTimeIndicatorSource.UserSpecified:  IndicatorTime is specified and maintained by the user.
  • Visibility:  Designates the Indicator’s visibility, as defined by eTimeIndicatorVisibility.
    • eTimeIndicatorVisibility.AllResources:  Indicator is displayed on all available views (gold example in above figure).
    • eTimeIndicatorVisibility.SelectedResources:  Indicator is displayed only on the currently selected view (pink example in above figure).
    • eTimeIndicatorVisibility.Hidden:  Indicator is hidden (default).
  • BorderColor:  Designates the leading edge border color.
  • IndicatorColor:  Designates the Gradient color of the Indicator.
  • Thickness:  Designates the thickness of the Indicator (default is 4).
  • Enabled:  Indicates whether automatic IndicatorTime updates are enabled (only utilized when IndicatorSource is SystemTime).

To utilize the default CalendarView TimeIndicator, you need only access it via CalendarView.TimeIndicator.  All you need do is to set the initial IndicatorTime and its Visibility to either AllResources or SelectedResources.

CalendarView.TimeIndicator.IndicatorTime =  DateTime.Now;
CalendarView.TimeIndicator.Visibility =  eTimeIndicatorVisibility.AllResources;

Here are code examples showing how to create the pink and green TimeIndicators as shown in the above figure:

TimeIndicator ti = new TimeIndicator();
ti.Thickness  = 10;
ti.IndicatorTimeOffset = new TimeSpan(2, 15, 0);
ti.BorderColor  = Color.Green;
ti.IndicatorColor = new ColorDef(new Color[] {  Color.Empty,
                    Color.GreenYellow, Color.Green },
                    new float[] { 0f, .5f, 1f  });
ti.Visibility = eTimeIndicatorVisibility.AllResource;
ti.IndicatorArea  = eTimeIndicatorArea.Header;
ti  = new TimeIndicator();
ti.Thickness = 20;
ti.IndicatorTimeOffset  = new TimeSpan(-2, 15, 0);
ti.BorderColor = Color.HotPink;
ti.IndicatorColor  = new ColorDef(Color.Empty, Color.Pink);
ti.Visibility =  eTimeIndicatorVisibility.SelectedResource;
ti.IndicatorArea =  eTimeIndicatorArea.Content;

TimeIndicators can be as subtle or as “daring” as you like:

DotNetBar Calendar/Schedule control time-marker, indicator custom appearance

The above was created with the following code:

ti = new TimeIndicator();
ti.Thickness = 40;
ti.BorderColor  = Color.MidnightBlue;
ti.IndicatorColor = new ColorDef(new Color[]
                    {  Color.Empty, Color.AliceBlue,
                    Color.DeepSkyBlue, Color.DarkSlateBlue },
                    new float[] { 0f, .15f, .55f, 1f });
ti.IndicatorArea =  eTimeIndicatorArea.Content;
ti.Visibility =  eTimeIndicatorVisibility.AllResources;

This covers the new time-marker functionality in our schedule control. Hope you find it useful. Stay tuned for more.

Tagged with:

Todays update to DotNetBar includes ability for AdvTree control to host DotNetBar Items in cells. While cells can host any Windows Forms controls already, controls are fairly “heavy” and resource intensive. DotNetBar items are light-weight and super fast and so are great alternative to use instead of controls whenever possible.

Here is how to host items in cells:

Select AdvTree Node and go to Cells collection.

Click … collection edit button to show collection editor, then click Add to create new cell that will host an item:

Select newly created Cell and then select its HostedItem property:

Show item creation popup and select item that you want to host in cell:

And that’s it.

There is a small limitation to item hosting. You cannot host items that directly show popups. You can however assign content menus to such items and show popups that way if needed.

Here is also small sample project that shows this in action:

Tagged with:

Here we go again. New version of DotNetBar is out and this time we included Office 2010 beta style and Windows 7 style for Ribbon control and they look absolutely stunning. DotNetBar is worlds’ first control to include Office 2010 and Windows 7 styles. Not surprising because we also released worlds’ first ribbon control for both Windows Forms and WPF :-)…

While Office 2010 is still in beta and we expect that color schemes will change in final release, main design elements will most likely not change. So expect that we will tweak the Office 2010 styling in coming months as the design finalizes.

Office 2010 style looks gorgeous running on Windows 7 or Windows Vista with glass enabled. Here is screen-shot of new styling with desktop background image visible so you can see how glass extends into ribbon tab area:

DotNetBar RibbonPad sample with Office 2010 style running on Windows 7

And here is Windows 7 style screen-shot:

DotNetBar RibbonPad sample in Windows 7 Style

There are over 55 new feature and enhancements in this release. Here are detailed Release Notes.

How to use new StyleManager

We often received requests for an easier way to change style for all DotNeBar controls in application. To do that now there is a StyleManager component. StyleManager has instance and static properties that you can use to switch the style on all controls that have Style=StyleManagerControlled property set. You can use it to do color tinting of current style as well. Just set ColorTint property.To use it in existing application follow these two steps:

  1. Set Style=StyleManagerControlled on all your controls
  2. Add StyleManager to your main form, or if you do not have main form use static properties on StyleManager object to set style for all controls

This new release will take your apps to the new visual level. Try it out. If you already have DotNetBar license go to our Customer Only web site and download latest build. Fully functional trial version can be downloaded by clicking here.

Tagged with:

I know you want to make your application better and easier to use. But short of complete redesign what do you do? Even if you are starting now what do you do?

Making software that is easy to use is as much art as it is science in my opinion, so every single tip that I can find that I can use immediately is immensely useful.

Here are two things you can apply to your apps now to make them better, and they come from Brandon Walkin’s Managing UI Complexity post. I encourage you to read his whole post since it is very insightful.

1. Alignment and Visual Hierarchy

Aligning elements in a user interface to a simple, consistent grid, will go great lengths in reducing the appearance of complexity. The use of strict alignment and a thoughtfully laid out grid can turn an interface from chaotic and overwhelming to harmonious and appealing.

This is best illustrated by following screenshot that compares Microsoft Expression Blend and Adobe Lightroom:


Notice how vertical lines show UI complexity caused by alignment. This is something you can act upon now. Take a screenshot of your dialogs, fire up Paint or Photoshop and draw alignment lines as shown in image above. If you end up with spaghettis, you know you can improve alignment and make your UI better.

2. Visual Noise and Contrast

The amount of visual noise in an interface has a great deal of impact on the perceived complexity of the interface. And contrast plays an important role with respect to visual noise. Using lower contrast UI elements reduces visual noise which will often reduce the effective complexity of the interface, as you’ll see in the next couple of examples.

Here is screenshots that illustrates this point:


Important to notice is that noise created by borders for each text box control added considerable perceived complexity to the form. If you can simply by removing them and showing them on as needed basis will improve the perceived complexity.

Same applies to contrast. Here is image that also shows contrast difference between Lightroom and Expressions Blend, less contrast, less perceived complexity. Pay attention to difference in text contrast between these two:


These are two tips you can use today to improve your UI. Go, do it! Hat-tip to Brandon.

Tagged with:

I’ve been often asked how to improve performance of WinForms apps so here is the list of my top suggestions and further reading recommendations on how to speed up your Windows Forms applications:

  1. Reduce modules loaded by your application to increase start-up time. Remove all references from your project that are not used. Click here to read MSDN article on that on other techniques.
  2. Pre-compile your assemblies using NGEN when appropriate to decrease start-up time. Click here to read my short post with guidelines on when to consider doing this.
  3. Use native C++ Splash Screen that shows up immediately when your application is started. This will make your application appear to load faster. Click here to read and download C++ project with native splash screen. Native splash screens have such small memory footprint that they appear immediately.
  4. Don’t set BackColor=Transparent on your controls. Transparent color support in Windows Forms is terribly inefficient since it is not real transparency. Whenever you set BackColor=Transparent you incur additional Paint call on the parent control. As part of child control rendering, child control will first direct parent control to paint itself on it then child control will paint over that so it appears it is transparent. And this is repeated for every single control that has transparent background. Couple that with the next point and you have real slow-down.
  5. Reduce usage of gradients. Gradients whether linear or radial especially on large surfaces of screen are slow. I know they look good, but use solid colors whenever possible and you will see much better rendering performance. Especially on large panels.
  6. Reduce code in Form Load event. Use BackgroundWorker to offload work onto the different thread so your UI can load faster and feel snappier while you do other work.
  7. Delay Control Creation. Creating and populating controls takes lot of time, so if you can, delay it or do it on demand. For example, you can avoid creating controls on all pages of Tab Control right away and do so in either Appllication.Idle event or when that tab is selected from SelectedTabChanged event.
  8. Set DataSource last. When using data-binding set DataSource property last. If you set it before you set ValueMember or DisplayMemeber properties for bound controls, the data source will be re-queried to populate control each time these properties are set.
  9. Use SuspendLayout and ResumeLayout on parent controls and form to optimize layout changes. Bounds, Size, Location, Visible, and Text for AutoSize controls causes the layout changes. Note that you should call these methods when performing multiple layout changes and always on parent control of the controls that you are changing layout for.
  10. Use BeginUpdate and EndUpdate when adding multiple items to trees, grids and other controls that support this.
  11. Call Dispose() method on your forms once you are done with them. Most of the time developers forget to call Dispose() method on form they’ve shown using ShowDialog(). Make sure you always dispose your forms and controls to free up memory. Use handy using statement.
  12. Dispose() your graphic resources. If you are performing any custom drawing make sure you explicitly dispose your Pen, Brush, Image and other graphic resources once you are done with them. Using statement is good for this as well.

Do you have more tips for speeding up the WinForms application? Please share them in comments below.

Also check out the 2 Things You Can Do Today To Improve User Interface In Your Applications post for helpful UI tips.

Tagged with:

Here it is. DotNetBar for Windows Forms 8.1 is now available. Included are over 40 new features and enhancements. I already covered two huge new controls:

If you do not own DotNetBar give it a try. We now have total of 50 controls to help you create professional WinForms applications. If you own DotNetBar license then go here to download latest build.

Tagged with:

In this post I will show you the new Highlighter component that will be included in DotNetBar for Windows Forms 8.1 that we are planning on releasing soon.

Highlighter component allows you to visually highlight any control on the form using distinctive border style. You can use it with our SuperValidator component to highlight validation errors on the form. You can use it to highlight currently focused text-box. Or simply to draw user attention to control on the form.

To start using Highlighter control just double-click the highlighter component in VS.NET Toolbox to add it to the form:

Figure 1 – Highlighter Components in VS.NET toolbox

This is how form looks like with Highlighter component added:

Figure 2 – Highlighter Component on the form

To each control on the form the Highlighter component will add two properties:

  • HighlightColor – Specifies the color to highlight the control with.
  • HighlightOnFocus – Specifies whether control is automatically highlighted when it receives input focus. Highlighter.FocusHighlightColor property specifies the color that will be used for focus based highlighting.

To highlight any control on the form select the control and set HighlightColor property:

Figure 3 – Setting HighlightColor property

This is how control would appear at run-time with HighlightColor property set:

Figure 4 – Highlighter component highlighting the control

Setting HighlightColor from code

To set HighlightColor using code, use following statement:

highlighter1.SetHighlightColor(textBoxX1, eHighlightColor.Green)

To remove highlight from the control use following statement:

highlighter1.SetHighlightColor(textBoxX1, eHighlightColor.None)

Highlighting Focused Control

Highlighter component provides you with functionality to highlight control with the input focus automatically. All you have to do is set HighlightOnFocus property on each control on the form that you want to highlight. The easiest way to do that is to select all controls on the form you want to highlight as they receive focus:

Figure 5 – Select all controls you want to highlight on focus

Then in VS.NET property window set HighlightOnFocus property to true:

Now when you run your project and tab through controls on the form you will see the focused control highlighted:

To create focus highlighting from code use following statement:

highlighter1.SetHighlightOnFocus(textBoxX1, True)

and to remove focus highlight use following statement:

highlighter1.SetHighlightOnFocus(Me.textBoxX1, False)

I hope that this provides you with the good overview of the new Highlighter component that is unique to DotNetBar. I am sure in couple of months you will see clones everywhere, like it usually happens with new stuff we create 🙂

Tagged with:

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...

© 2009 Denis Basaric: DevComponents Blog