C #: como arrastar um pelo formulário e seus controles?

Eu uso o seguinte código para arrastar um formulário sem borda, clicando e arrastando o próprio formulário. Funciona, mas não quando você clica e arrasta um controle localizado no formulário. Eu preciso ser capaz de arrastá-lo quando clicado em alguns dos controles, mas não em outros - arrastar por rótulos, mas não por botões e caixas de texto. Como eu faço isso?

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    const int WM_NCHITTEST = 0x84;
    const int HTCLIENT = 0x1;
    const int HTCAPTION = 0x2;

    if (m.Msg == WM_NCHITTEST && (int)m.Result == HTCLIENT)
        m.Result = (IntPtr)HTCAPTION;
}

questionAnswers(2)

yourAnswerToTheQuestion