File Path On Footer Extension 1.4.3 released with Environment Font support.

File Path On Footer Extension version 1.4.3 released with Environment Font Support.

Tools->Options->Environment->Fonts and Colors->Environment Font

Sample screenshot with custom Environment Font setting

Change log

Version 1.4.3

  • Fixed – Invalid Exception message while copying file path using right click.
  • Fixed – File path was not properly visible (bottom area was cropped) if we change the Environment Font settings.

Version 1.4.2

Fixed – Unwanted exception message was showing on Web Essentials Preview Pane of .LESS file.
Version 1.4.1

Fixed – underscore (_) was not showing in file path.
Version 1.4

Fixed font change in Conditional Breakpoint window.
Fixed an issue in .sql file.
Exception handlers are updated to show detailed error descrition, if any.
Version 1.3

Fixed Invalid text in Conditional Breakpoint and Quick Watch window.
Version 1.2

Added support to 11 Visual Studio Themes
Version 1.1

Added support to more files.
Version 1.0

Initial Version

Click here to Download

If the tool helps you and you like it please rate it!

WebSearch2 released with many updates

WebSearch2 released with many updates

Hello, WebSearch2 is released with Visual Studio 2012, 2013, 2015 support, by this release old version of WebSearch is no more supported in Visual Studio 2012 and above. Have considered many of your suggestions in this version, Hope you will like this updated version.

IconWeb Search2 is the updated version of Web Search.Web Search Features

  • Code or Comment Web Search from any Visual Studio Text Editor
  • Set Deafult Search Provider based on File Extension
  • Error List Assistant
  • Reference related Web Search from Solution Explorer Reference List
  • Search Anything using Web Search Toolbar
  • Web Search using Default Search, Custom Search, any Pre-configured Search
  • Open Search in Default Web Browser or Visual Studio
  • Shortcut key to execute
  • Supports Visual Studio 2012 and above.

Read more…

File Path On Footer 1.4.7 released

Hello, File Path On Footer 1.4.7 released, Please update.

Using this plugin you can,

  • File name always on bottom of editor.
  • Open Containing Folder using Ctrl+Click.
  • Copy Full Path using Right Click.
  • Copy Partial Path using text selection.
  • Use Alt + Click to force Theme updation.
  • Standard Visual Studio themes are supported.
  • Environment Font settings are also supported.
  • HighContrast Supported

Click here to see more details

Learning Builder Pattern using C#

Introduction

Design patterns are very useful and helps in resolving many real time issues, In this article we will try to understand Builder Pattern with the help of a Sample C# Program.

Background

Builder Pattern belongs to Creational Pattern as it deals with object creation, this pattern is used multiple times in .NET Framework. One example would be ConnectionStringBuilder. Builder Pattern comes into picture when we need to create a product using a series of complex process where each process can be separated , that means we can separate each step of object creation and the same object mechanism can be used for creating similar products or objects.

GoF describes Builder Pattern as Separate the construction of a complex object from its representation so that the same construction process can create different representations. Builder Pattern consists of below items.

Director: Director is responsible for creation of object using Builder interface or base class.

Builder: Base class or Interface which has different steps mentioned for creating a Product.

ConcreteBuilder: Defines the concrete builder which is an implementation of above Builder. Concrete Builder will help us to create and get the below Product using series of steps mentioned in Builder.

Product: The final Product, which will be created through many complex steps.

BuilderPattern

Using the code

To start with th sample program, I have created a Television (Product) class as below, this Product will be constructed by the Builder. Added different properties to show the different parts of product.

///
<summary>
/// Television - Product
/// </summary>

class Television
{
    public string Code { get; set; }
    public string DisplayTechnology { get; set; }
    public string HDFormat { get; set; }
    public string ScreenType { get; set; }
    public string Size { get; set; }
    public string Feature { get; set; }
}

Now we will create the TelevisionBuilder (Builder), which will define the complex steps for creating the Product. We can create the Builder as an Interface or Base Class. If you look at the below class definition, you can see the steps for creating the Product and Property or Method to access the created Product.

///
<summary>
/// TelevisionBuilder - Builder
/// </summary>

abstract class TelevisionBuilder
{
    protected Television television;

    public abstract void SetCode();//ProductCode
    public abstract void SetDisplayTechnology(); //LCD, LED, OLED, Plasma, CRT
    public abstract void SetHDFormat(); // Full HD, HD Ready, Ultra HD, None
    public abstract void SetScreenType(); //Curved, Flat, Standard
    public abstract void SetSize(); // 22, 32, 40, 42, 54
    public abstract void SetFeature(); //3D, Smart, Standard , HDMI Ports, USB Ports, Built in WIFI, Ethernet, Remote

    //GetProduct
    public Television Television
    {
        get { return television; }
    }

}

Defining FullHD40TVBuilder (ConcreteBuilder1) with respective implementation.

///
<summary>
/// FullHD40TVBuilder - ConcreteBuilder1
/// </summary>

class FullHD40TVBuilder : TelevisionBuilder
{

    public FullHD40TVBuilder()
    {
        television = new Television();
    }

    public override void SetCode()
    {
        television.Code = "FullHD40TV";
    }

    public override void SetDisplayTechnology()
    {
        television.DisplayTechnology = "LCD";
    }

    public override void SetHDFormat()
    {
        television.HDFormat = "FullHD";
    }

    public override void SetScreenType()
    {
        television.ScreenType="Flat";
    }

    public override void SetSize()
    {
        television.Size="40";
    }

    public override void SetFeature()
    {
        television.Feature = "1 HDMI Ports, 1 USB Ports, Remote";
    }
}

Defining SMARTLED54TVBuilder (ConcreteBuilder2) with respective implementation.

///
<summary>
/// SMARTLED54TVBuilder - ConcreteBuilder2
/// </summary>

class SMARTLED54TVBuilder : TelevisionBuilder
{
    public SMARTLED54TVBuilder()
    {
        television = new Television();
    }

    public override void SetCode()
    {
        television.Code = "SMARTLED54TV";
    }

    public override void SetDisplayTechnology()
    {
        television.DisplayTechnology = "LED";
    }

    public override void SetHDFormat()
    {
        television.HDFormat =   "FullHD";
    }

    public override void SetScreenType()
    {
        television.ScreenType="Flat";
    }

    public override void SetSize()
    {
        television.Size="54";
    }

    public override void SetFeature()
    {
        television.Feature="2 HDMI Ports, 2 USB Ports, Built in WIFI, Ethernet, Remote";
    }
}

Defining Curved4K65LEDTVBuilder (ConcreteBuilder3) with respective implementation.

///
<summary>
/// Curved4K65LEDTVBuilder - ConcreteBuilder3
/// </summary>

class Curved4K65LEDTVBuilder : TelevisionBuilder
{
    public Curved4K65LEDTVBuilder()
    {
        television = new Television();
    }

    public override void SetCode()
    {
        television.Code = "Curved4K65LEDTV";
    }

    public override void SetDisplayTechnology()
    {
        television.DisplayTechnology = "LED";
    }

    public override void SetHDFormat()
    {
        television.HDFormat =   "4K Ultra HD";
    }

    public override void SetScreenType()
    {
        television.ScreenType="Curved";
    }

    public override void SetSize()
    {
        television.Size="65";
    }

    public override void SetFeature()
    {
        television.Feature="3 HDMI Ports, 2 USB Ports, Built in WIFI, Ethernet, Smart Remote";
    }
}

Defining LCD22TVBuilder (ConcreteBuilder4) with respective implementation.

///
<summary>
/// LCD22TVBuilder - ConcreteBuilder4
/// </summary>

class LCD22TVBuilder : TelevisionBuilder
{
    public LCD22TVBuilder()
    {
        television = new Television();
    }

    public override void SetCode()
    {
        television.Code = "LCD22TV";
    }

    public override void SetDisplayTechnology()
    {
        television.DisplayTechnology = "LCD";
    }

    public override void SetHDFormat()
    {
        television.HDFormat = "None";
    }

    public override void SetScreenType()
    {
        television.ScreenType = "Flat";
    }

    public override void SetSize()
    {
        television.Size = "22";
    }

    public override void SetFeature()
    {
        television.Feature = "Remote";
    }
}

As of now we have defined Product, Builder and ConcreteBuilder, Now lets create TelevisionManufacturer as the Director, here the argument is Builder, and the Director takes care of calling the steps based on the requirement.

///
<summary>
/// TelevisionManufacturer - Director
/// </summary>

class TelevisionManufacturer
{
    //Constructing Product
    public void Construct(TelevisionBuilder televisionBuilder)
    {
        //Series of Complex Process
        televisionBuilder.SetCode();
        televisionBuilder.SetDisplayTechnology();
        televisionBuilder.SetHDFormat();
        televisionBuilder.SetScreenType();
        televisionBuilder.SetSize();
        televisionBuilder.SetFeature();
    }
}

Have created a console Program to test the Builder Pattern Sample, here the end clinet is not at all worried about the complex object creation.

///
/// Program class which demonstrates the builder usage
///

class Program
{
///
/// Main method of Program.cs
///

///static void Main(string[] args)
{
TelevisionBuilder builder;

TelevisionManufacturer director = new TelevisionManufacturer();

builder = new FullHD40TVBuilder();
director.Construct(builder);
Television product1 = builder.Television;

Console.WriteLine("Code:{0}", product1.Code);

builder = new SMARTLED54TVBuilder();
director.Construct(builder);
Television product2 = builder.Television;

Console.WriteLine("Code:{0}", product2.Code);

builder = new Curved4K65LEDTVBuilder();
director.Construct(builder);
Television product3 = builder.Television;

Console.WriteLine("Code:{0}", product3.Code);

builder = new LCD22TVBuilder();
director.Construct(builder);
Television product4 = builder.Television;

Console.WriteLine("Code:{0}", product4.Code);
//Wait for UserInteraction
Console.ReadKey();

}
}

Output

Some codes are removed from above Console.Writeline to look the code simple. You can refer the Program.cs file in the attached project to see the final version.

BuilderPatternSampleOutput.png

To explore this sample yourself you can download the attached code or create a console project named “BuilderPatternSample” and replace the content of Program.cs with below code block.

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BuilderPatternSample
{
    ///
<summary>
    /// Program class which demonstrates the builder usage
    /// </summary>

    class Program
    {
        ///
<summary>
        /// Main method of Program.cs
        /// </summary>

        /// <param name="args"></param>
        static void Main(string[] args)
        {
            TelevisionBuilder builder;

            TelevisionManufacturer director = new TelevisionManufacturer();

            builder = new FullHD40TVBuilder();
            director.Construct(builder);
            Television product1 = builder.Television;

            Console.WriteLine("     ┌───────────────────────────────────Code:{0}───────────────────────────────┐", product1.Code);
            Console.WriteLine("     │                         DisplayTechnology:{0}                                   │", product1.DisplayTechnology);
            Console.WriteLine("     │                         HDFormat:{0}                                         │", product1.HDFormat);
            Console.WriteLine("     │                         ScreenType:{0}                                         │", product1.ScreenType);
            Console.WriteLine("     │                         Size:{0}                                                 │", product1.Size);
            Console.WriteLine("     │                         Feature:{0}               │", product1.Feature);
            Console.WriteLine("     └─────────────────────────────────────────────────────────────────────────────────┘");

            builder = new SMARTLED54TVBuilder();
            director.Construct(builder);
            Television product2 = builder.Television;

            Console.WriteLine("     ┌──────────────────────────────────Code:{0}──────────────────────────────┐", product2.Code);
            Console.WriteLine("     │        DisplayTechnology:{0}                                                    │", product2.DisplayTechnology);
            Console.WriteLine("     │        HDFormat:{0}                                                          │", product2.HDFormat);
            Console.WriteLine("     │        ScreenType:{0}                                                          │", product2.ScreenType);
            Console.WriteLine("     │        Size:{0}                                                                  │", product2.Size);
            Console.WriteLine("     │        Feature:{0}       │", product2.Feature);
            Console.WriteLine("     └─────────────────────────────────────────────────────────────────────────────────┘");

            builder = new Curved4K65LEDTVBuilder();
            director.Construct(builder);
            Television product3 = builder.Television;

            Console.WriteLine("     ┌─────────────────────────────────Code:{0}────────────────────────────┐", product3.Code);
            Console.WriteLine("     │       DisplayTechnology:{0}                                                     │", product3.DisplayTechnology);
            Console.WriteLine("     │       HDFormat:{0}                                                      │", product3.HDFormat);
            Console.WriteLine("     │       ScreenType:{0}                                                         │", product3.ScreenType);
            Console.WriteLine("     │       Size:{0}                                                                   │", product3.Size);
            Console.WriteLine("     │       Feature:{0}  │", product3.Feature);
            Console.WriteLine("     └─────────────────────────────────────────────────────────────────────────────────┘");

            builder = new LCD22TVBuilder();
            director.Construct(builder);
            Television product4 = builder.Television;

            Console.WriteLine("     ┌────────────────────────────────────Code:{0}─────────────────────────────────┐", product4.Code);
            Console.WriteLine("     │                         DisplayTechnology:{0}                                   │", product4.DisplayTechnology);
            Console.WriteLine("     │                         HDFormat:{0}                                           │", product4.HDFormat);
            Console.WriteLine("     │                         ScreenType:{0}                                         │", product4.ScreenType);
            Console.WriteLine("     │                         Size:{0}                                                 │", product4.Size);
            Console.WriteLine("     │                         Feature:{0}                                          │", product4.Feature);
            Console.WriteLine("     └─────────────────────────────────────────────────────────────────────────────────┘");

            //Wait for UserInteraction
            Console.ReadKey();

        }
    }

    ///
<summary>
    /// Television - Product
    /// </summary>

    class Television
    {
        public string Code { get; set; }
        public string DisplayTechnology { get; set; }
        public string HDFormat { get; set; }
        public string ScreenType { get; set; }
        public string Size { get; set; }
        public string Feature { get; set; }
    }

    ///
<summary>
    /// TelevisionBuilder - Builder
    /// </summary>

    abstract class TelevisionBuilder
    {
        protected Television television;

        public abstract void SetCode();//ProductCode
        public abstract void SetDisplayTechnology(); //LCD, LED, OLED, Plasma, CRT
        public abstract void SetHDFormat(); // Full HD, HD Ready, Ultra HD, None
        public abstract void SetScreenType(); //Curved, Flat, Standard
        public abstract void SetSize(); // 22, 32, 40, 42, 54
        public abstract void SetFeature(); //3D, Smart, Standard , HDMI Ports, USB Ports, Built in WIFI, Ethernet, Remote

        //GetProduct
        public Television Television
        {
            get { return television; }
        }

    }

    ///
<summary>
    /// FullHD40TVBuilder - ConcreteBuilder1
    /// </summary>

    class FullHD40TVBuilder : TelevisionBuilder
    {

        public FullHD40TVBuilder()
        {
            television = new Television();
        }

        public override void SetCode()
        {
            television.Code = "FullHD40TV";
        }

        public override void SetDisplayTechnology()
        {
            television.DisplayTechnology = "LCD";
        }

        public override void SetHDFormat()
        {
            television.HDFormat = "FullHD";
        }

        public override void SetScreenType()
        {
            television.ScreenType = "Flat";
        }

        public override void SetSize()
        {
            television.Size = "40";
        }

        public override void SetFeature()
        {
            television.Feature = "1 HDMI Ports, 1 USB Ports, Remote";
        }
    }

    ///
<summary>
    /// SMARTLED54TVBuilder - ConcreteBuilder2
    /// </summary>

    class SMARTLED54TVBuilder : TelevisionBuilder
    {
        public SMARTLED54TVBuilder()
        {
            television = new Television();
        }

        public override void SetCode()
        {
            television.Code = "SMARTLED54TV";
        }

        public override void SetDisplayTechnology()
        {
            television.DisplayTechnology = "LED";
        }

        public override void SetHDFormat()
        {
            television.HDFormat = "FullHD";
        }

        public override void SetScreenType()
        {
            television.ScreenType = "Flat";
        }

        public override void SetSize()
        {
            television.Size = "54";
        }

        public override void SetFeature()
        {
            television.Feature = "2 HDMI Ports, 2 USB Ports, Built in WIFI, Ethernet, Remote";
        }
    }

    ///
<summary>
    /// Curved4K65LEDTVBuilder - ConcreteBuilder3
    /// </summary>

    class Curved4K65LEDTVBuilder : TelevisionBuilder
    {
        public Curved4K65LEDTVBuilder()
        {
            television = new Television();
        }

        public override void SetCode()
        {
            television.Code = "Curved4K65LEDTV";
        }

        public override void SetDisplayTechnology()
        {
            television.DisplayTechnology = "LED";
        }

        public override void SetHDFormat()
        {
            television.HDFormat = "4K Ultra HD";
        }

        public override void SetScreenType()
        {
            television.ScreenType = "Curved";
        }

        public override void SetSize()
        {
            television.Size = "65";
        }

        public override void SetFeature()
        {
            television.Feature = "3 HDMI Ports, 2 USB Ports, Built in WIFI, Ethernet, Smart Remote";
        }
    }

    ///
<summary>
    /// LCD22TVBuilder - ConcreteBuilder4
    /// </summary>

    class LCD22TVBuilder : TelevisionBuilder
    {
        public LCD22TVBuilder()
        {
            television = new Television();
        }

        public override void SetCode()
        {
            television.Code = "LCD22TV";
        }

        public override void SetDisplayTechnology()
        {
            television.DisplayTechnology = "LCD";
        }

        public override void SetHDFormat()
        {
            television.HDFormat = "None";
        }

        public override void SetScreenType()
        {
            television.ScreenType = "Flat";
        }

        public override void SetSize()
        {
            television.Size = "22";
        }

        public override void SetFeature()
        {
            television.Feature = "Remote";
        }
    }

    ///
<summary>
    /// TelevisionManufacturer - Director
    /// </summary>

    class TelevisionManufacturer
    {
        //Constructing Product
        public void Construct(TelevisionBuilder televisionBuilder)
        {
            //Series of Complex Process
            televisionBuilder.SetCode();
            televisionBuilder.SetDisplayTechnology();
            televisionBuilder.SetHDFormat();
            televisionBuilder.SetScreenType();
            televisionBuilder.SetSize();
            televisionBuilder.SetFeature();
        }
    }
}

Summary

In this article I have explained Builder Pattern with a simple C# application. I hope you have enjoyed this article and got some value addition to your knowledge. Please don’t forget to mark your votes, suggestions and feedback to improve the quality of this and upcoming articles.

Click here to Download Builder Pattern Sample – 10.2 KB

Learning Factory Pattern using C#

Introduction

Factory pattern is very common in programming. If you check .NET framework or any other frameworks Factory Pattern is widely used which shows its popularity. Factory Pattern belongs to Creational Patterns, and it deals with object creation. In this article we shall try to learn Factory Pattern using a simple C# console application.

Background

When we write codes we used to come across situations like creating objects based on some if conditions or switch case. If this object creation is not based on a proven design pattern then we are really making the object creation complex and future enhancements very tough. At this time we should consider Factory Pattern to abstract the complexity of the object creation logic, and enabling future additions hassle free.

Let’s take a very simple example of logging functionality in a project, If we had the implementation as below, then for adding a new Logging option requires considerable code changes at client code base which is not a good practice.

public void Log(string message, string type)
{
    switch (type)
    {
        case "Database":
            DatabaseLogger databaseLogger = new DatabaseLogger();
            databaseLogger.Log(message);
            break;
        case "EventViewer":
        default:
            EventViewerLogger eventviewerLogger = new EventViewerLogger();
            eventviewerLogger.Log(message);
            break;
    }
}

Factory Pattern is nothing but hiding object creation logic from the client so that the end client doesn’t have to worry about object creational logic, rather the client can refer the factory pattern created object using a common interface.

Using the code

For better understanding we can create a simple Logger Factory which will help the client to log messages to different options based on their choice.

Factory Pattern Sample Logger Factory

To start with, we need to create an Interface or abstract class as the base class for all classes which we are going to create instance in factory. Here I have used an Interface ILogger with a method Log message.

interface ILogger
{
    void Log(string Message);
}

Now we are going to implement this ILogger in all classes which we wanted to return from Logger Factory. Here ideally Log method should have the real method to log the message to a file but for demonstrating purpose I’m just adding a console message.

class FileLogger : ILogger
{
    public void Log(string Message)
    {
        Console.WriteLine("{0} - Logged in File.", Message);
    }
}

the same way implementing ILogger to DatabaseLogger, also Log method definition added.

class DatabaseLogger : ILogger
{
    public void Log(string Message)
    {
        Console.WriteLine("{0} - Logged in Database.", Message);
    }
}

EventViewerLogger also implemented from ILogger and Log method definition added based on the type. We can add new logger classes same as these logger classes.

class EventViewerLogger : ILogger
{
    public void Log(string Message)
    {
        Console.WriteLine("{0} - Logged in EventViewer.", Message);
    }
}

Create an enum to easily identify the LoggerType, In case if we have a new LoggerType then we can add it here.

enum LoggerType
{
    File,
    Database,
    EventViewer
}

Finally we have reached to the LoggerFactory,now this factory will take care of the object creation based on the enum values, and will return the created instance back to client code which will be a type of ILogger.

class LoggerFactory
{
    public static ILogger Get(LoggerType type)
    {
        switch (type)
        {
            case LoggerType.Database:
                return new DatabaseLogger();
            case LoggerType.EventViewer:
                return new EventViewerLogger();
            case LoggerType.File:
            default:
                return new FileLogger();
        }
    }
}

If you look at the above code you can see that the object creation logic is abstracted in the factory and the objects are created based the kind of object requested, as the return type is an Interface ILogger, the client code need not worry about new addition to the factory.

Have written a client code to make use of this factory as below,

static void Main(string[] args)
{
    ILogger logger1 = LoggerFactory.Get(LoggerType.Database);
    logger1.Log("Message from Main");

    ILogger logger2 = LoggerFactory.Get(LoggerType.File);
    logger2.Log("Message from Main");

    ILogger logger3 = LoggerFactory.Get(LoggerType.EventViewer);
    logger3.Log("Message from Main");

    Console.ReadKey();

    /*Output
    Message from Main - Logged in Database.
    Message from Main - Logged in File.
    Message from Main - Logged in EventViewer.
    */
}

In the above code the client code uses the enum to request a specific object and using that object the log method is called. Objects are created using ILogger and instantiated using factory. Have given the output below,

FactoryPatter_Sample_Output.png

To explore this sample yourself you can download the attached code or create a console project named “FactoryPatternSample” and replace the content of Program.cs with below code block.

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FactoryPatternSample
{
    class Program
    {
        interface ILogger
        {
            void Log(string Message);
        }

        enum LoggerType
        {
            File,
            Database,
            EventViewer
        }

        class FileLogger : ILogger
        {
            public void Log(string Message)
            {
                Console.WriteLine("{0} - Logged in File.", Message);
            }
        }

        class DatabaseLogger : ILogger
        {
            public void Log(string Message)
            {
                Console.WriteLine("{0} - Logged in Database.", Message);
            }
        }

        class EventViewerLogger : ILogger
        {
            public void Log(string Message)
            {
                Console.WriteLine("{0} - Logged in EventViewer.", Message);
            }
        }

        class LoggerFactory
        {
            public static ILogger Get(LoggerType type)
            {
                switch (type)
                {
                    case LoggerType.Database:
                        return new DatabaseLogger();
                    case LoggerType.EventViewer:
                        return new EventViewerLogger();
                    case LoggerType.File:
                    default:
                        return new FileLogger();
                }
            }
        }

        static void Main(string[] args)
        {
            ILogger logger1 = LoggerFactory.Get(LoggerType.Database);
            logger1.Log("Message from Main");

            ILogger logger2 = LoggerFactory.Get(LoggerType.File);
            logger2.Log("Message from Main");

            ILogger logger3 = LoggerFactory.Get(LoggerType.EventViewer);
            logger3.Log("Message from Main");

            Console.ReadKey();

            /*Output
            Message from Main - Logged in Database.
            Message from Main - Logged in File.
            Message from Main - Logged in EventViewer.
            */
        }
    }
}

Summary

In this article I have explained Factory Pattern with a simple C# application. I hope you have enjoyed this article and got some value addition to your knowledge. Please don’t forget to mark your votes, suggestions and feedback to improve the quality of this and upcoming articles.

Click here to Download Factory Pattern Sample – 6.7 KB

I Wish you a Happy New Year 2016

2015 was a busy year for me still I was able to publish some articles and plugins. This year I will try to find more time on blogging. Thanks everyone for the wonderful support and hoping the same in this year too.

“Optimism is the faith that leads to achievement. Nothing can be done without hope and confidence.”.– Helen Keller, American author, political activist, and lecturer

Best wishes for New Year 2016

Keep going! Happy Programming.

Cheers!

Shemeer.

Integrated Color Picker 1.2 released for Visual Studio IDE.

Color Picker version 1.2 released with HSL, HSB\HSV, CMYK color codes and Tints & Shades of the selected color.

The New look is here,

Integrated Color Picker for Visual Studio IDE

If you see the below UI, you will get an idea about the changes. Thanks Martin for the suggestions.

Integrated Color Picker for Visual Studio IDE

Integrated Color Picker for Visual Studio IDE offers the below options,

  • Color Selection from Color Canvas.
  • Color Selection from Available Colors.
  • Color Selection from Standard Colors.
  • Color Selection from Saved Colors.
  • Color Selection using Eyedropper.
  • Copy\Paste Color codes (Name, Hex, #Hex, RGBA, ARGB, HSL, HSB\HSV and CMYK).
  • Color Tints & Shades.

Read more from Color Picker Page.