private void btnOK_Click(object sender, EventArgs e)
        {
            string strModel      = cmbModel.Text;
            string strSolverType = cmbSolver.Text;
            int    nIterations;
            int    nIntermediateIterations = 0;
            double dfLr;
            double dfTvLoss      = 0;
            int    nMaxImageSize = 640;

            if (!int.TryParse(edtIterations.Text, out nIterations) || nIterations < 1)
            {
                MessageBox.Show("The 'Iterations' value is invalid - enter a positive integer greater than one.", "Invalid Iterations", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DialogResult = DialogResult.None;
                edtIterations.Focus();
                return;
            }

            if (!BaseParameter.TryParse(edtLearningRate.Text, out dfLr) || dfLr <= 0)
            {
                MessageBox.Show("The 'Learning Rate' value is invalid - enter a positive real value greater than one.", "Invalid Learning Rate", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DialogResult = DialogResult.None;
                edtLearningRate.Focus();
                return;
            }

            if (!int.TryParse(edtMaxImageSize.Text, out nMaxImageSize) || nMaxImageSize < 64 || nMaxImageSize > 2048)
            {
                MessageBox.Show("The 'Max Image Size' value is invalid - enter a positive integer within the range [64, 2048].", "Invalid Max Image Size", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DialogResult = DialogResult.None;
                edtMaxImageSize.Focus();
                return;
            }

            if (!Directory.Exists(edtResultPath.Text))
            {
                MessageBox.Show("The 'Result Path' is invalid, please enter the path to an existing folder.", "Invalid Result Path", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DialogResult = DialogResult.None;
                btnBrowseResultPath.Focus();
                return;
            }

            if (chkIntermediateOutput.Checked)
            {
                if (!int.TryParse(edtIntermediateIterations.Text, out nIntermediateIterations) || nIntermediateIterations < 0 || nIntermediateIterations > nIterations)
                {
                    MessageBox.Show("The 'Intermediate Iterations' value is invalid - enter a positive integer within the range [1," + nIterations.ToString() + "].", "Invalid Intermediate Iterations", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    DialogResult = DialogResult.None;
                    edtIntermediateIterations.Focus();
                    return;
                }
            }

            if (chkEnableTvLoss.Checked)
            {
                if (!BaseParameter.TryParse(edtTvLoss.Text, out dfTvLoss) || dfTvLoss < 0 || dfTvLoss > 0.1)
                {
                    MessageBox.Show("The 'TV-Loss' value is invalid - enter a real value within the range [0,0.1].", "Invalid TV-Loss", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    DialogResult = DialogResult.None;
                    edtTvLoss.Focus();
                    return;
                }
            }

            if (!File.Exists(edtContentImageFile.Text))
            {
                MessageBox.Show("Could not find the content file '" + edtContentImageFile.Text + "'!", "Invalid Content File", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DialogResult = DialogResult.None;
                btnBrowseContent.Focus();
                return;
            }

            if (!File.Exists(edtStyleImageFile.Text))
            {
                MessageBox.Show("Could not find the style file '" + edtStyleImageFile.Text + "'!", "Invalid Style File", MessageBoxButtons.OK, MessageBoxIcon.Error);
                DialogResult = DialogResult.None;
                btnBrowseStyle.Focus();
                return;
            }

            m_info = new NeuralStyleInfo(edtStyleImageFile.Text, edtContentImageFile.Text, nIterations, strModel.ToLower(), strSolverType, dfLr, edtResultPath.Text, nIntermediateIterations, dfTvLoss, nMaxImageSize);
        }
 public FormNeuralStyle(string strStyleFile, string strContentFile, int nIterations, string strModelName, string strSolverType, double dfLr, string strResultPath, int nIntermediateIterations, double dfTvLoss, int nMaxImageSize)
 {
     m_info = new NeuralStyleInfo(strStyleFile, strContentFile, nIterations, strModelName, strSolverType, dfLr, strResultPath, nIntermediateIterations, dfTvLoss, nMaxImageSize);
     InitializeComponent();
 }