There are plenty of things you can code in C# without having to rely on the ever so omnipresent MS-VCS. Here is an example of some typical drawings like lines, arcs, circles, text, curves and gradients you can create with C# and actually retain some control over the program. This program has been around, I just improved it a lot.

// exploring C# GDI+ graphics
// compiled with C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe
// also works well (uses csc.exe) with SnippetCompiler.exe 
// from: http://www.sliver.com/dotnet/SnippetCompiler/

using System;
using System.Drawing;            // GDI+ resides here
using System.Windows.Forms;
using System.Drawing.Drawing2D;  // more GDI+ here

namespace UsingGDIPlus
{
  public class Form1 : System.Windows.Forms.Form
  {
    private System.ComponentModel.Container components = null;

    public Form1()
    {
      InitializeComponent();
    }

    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null) 
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    private void InitializeComponent() 
    {
      // 
      // Form1
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
      this.ClientSize = new System.Drawing.Size(392, 349);
      this.Name = "Form1";
      this.Text = "Exploring GDI+ Graphics";
      this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
    }

    static void Main() 
    {
      Application.Run(new Form1());
    }

    // the paint event
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      Graphics g = e.Graphics ; 
      Rectangle rect = this.ClientRectangle; 
 
      // neat, paints a gradiant background for the window form 
      LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Blue, Color.Yellow, 
        LinearGradientMode.BackwardDiagonal); 
      g.FillRectangle(lBrush, rect);
 
      // draws an arc 
      Pen pn = new Pen(Color.Lime, 4); 
      rect = new Rectangle(10, 50, 300, 150); 
      g.DrawArc(pn, rect, 10, 80); 
  
      // draws a line with a black pen 
      Pen pn2 = new Pen(Color.Black, 3); 
      Point pt1 = new Point(30, 30); 
      Point pt2 = new Point(150, 30); 
      g.DrawLine(pn2, pt1, pt2);
 
      // draw white graphic text 
      g.DrawString("Lard is better than War!", this.Font, new SolidBrush(Color.White), 30,10);
 
      // draws an ellipse/circle
      Pen pn3 = new Pen(Color.Aqua , 3); 
      rect = new Rectangle(ClientRectangle.Right - 85, ClientRectangle.Bottom - 200, 50, 50); 
      g.DrawEllipse(pn3, rect);
 
      // draw with bezier curves 
      GraphicsPath path = new GraphicsPath( 
        new Point[]
        {
          new Point(40, 140), new Point(275, 200), 
          new Point(105, 225), new Point(190, ClientRectangle.Bottom), 
          new Point(50, ClientRectangle.Bottom), new Point(20, 180), 
        },
        new byte[] 
        {
          (byte)PathPointType.Start, 
          (byte)PathPointType.Bezier, 
          (byte)PathPointType.Bezier, 
          (byte)PathPointType.Bezier, 
          (byte)PathPointType.Line, 
          (byte)PathPointType.Line, 
        }
      );
      
      // more gradient stuff
      PathGradientBrush pgb = new PathGradientBrush(path); 
      pgb.SurroundColors = new Color[] { 
        Color.Green,Color.Yellow,Color.Red, Color.Blue, 
        Color.Orange, Color.Thistle, 
      };
      
      g.FillPath(pgb, path); 
    }
  }
}

How can we connect circles dynamically while taking imput from the user.e.g if user asks to connect circle 4 with circle 2 and circle2?

just follow the mouse down event and where the mouse x and y direction is moving

The article starter has earned a lot of community kudos, and such articles offer a bounty for quality replies.