Se analizziamo il sorgente, possiamo notare che al momento del new della Form2, il programma passa nel costruttore della Form:
Fa la InitializeComponent e successivamente la MessageBox, che logicamente visualizza una stringa vuota.

Quindi terminato il costruttore, il programma torna nell'evento ListView1DoubleClick e assegna il valore alla variabile _IDCliente.

Da ora in poi la variabile privata in _IDCliente contiene il valore corretto.

In questi casi, e' piu' facile fare un overload del costruttore e passare il codice IDCliente come parametro in questo modo

codice:
   public Form2(string idCliente)
   {
      InitializeComponent();
      _IDCliente = idCliente;
      MessageBox.Show(_IDCliente);
   }