Forma sin bordes y redimensionable (C #)

Encontré un código en línea y lo copié, hasta ahora he podido hacer todo bien, excepto por una cosa que es que quiero que el formulario (ventana) sea completamente sin bordes.

Estoy usando Visual Studio 2013 y esta pregunta es simplemente sobre el código que se necesita para que el formulario (ventana) no tenga bordes. El problema es que cuando lo haces sin bordes, ya no se puede cambiar su tamaño, pero cuando tiene un borde, se puede cambiar su tamaño.

Sé que usando algún código es posible anular y lograr ambos. Esto es lo que tengo hasta ahora (copiado de otro sitio web). Esto elimina la barra superior que tiene el nombre del programa, hace que el formulario se mueva haciendo clic y arrastrando el formulario, y es redimensionable.

El único problema es que la frontera sigue ahí. ¿Qué código puedo agregar a esto para que el borde desaparezca? Quiero mantener este código actual porque está sirviendo un par de características que ya necesito.

Por cierto, miré algunas preguntas anteriores con temas similares, pero no encontré el código correcto que necesito.

Para el mod que me dirigió a otro hilo: Probé el código allí y no es exactamente lo que estoy tratando de lograr, aunque es un problema similar. Cuando probé ese código, no pude hacer clic en ninguna parte del formulario (ventana) para moverlo. Además, tenía una esquina de tamaño variable en la parte inferior derecha, que no es lo que estoy buscando. Necesito la función de cambio de tamaño en todas las esquinas y lados como una ventana normal.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BoxHider
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //Next line doesn't seem to be working
            this.FormBorderStyle = FormBorderStyle.None;
        }
        const int WM_NCHITTEST = 0x0084;
        const int HTCLIENT = 1;
        const int HTCAPTION = 2;
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            switch (m.Msg)
            {
                case WM_NCHITTEST:
                    if (m.Result == (IntPtr)HTCLIENT)
                    {
                        m.Result = (IntPtr)HTCAPTION;
                    }
                    break;
            }
        }
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= 0x40000;
                return cp;
            }
        }               
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta