@Stack, @PashaPash, проверил, этот код не закрывает ни одну из форм:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
const int WM_COMMAND = 0x0111, IDOK = 1, IDCANCEL = 2;
SendMessage(d.Handle, WM_COMMAND, (IntPtr)IDCANCEL, IntPtr.Zero);