static public double SzalF(InitialStatisticalAnalys ISAX, InitialStatisticalAnalys ISAY, List <Data> Q, string RegresTypeN)
        {
            double Szal = 0;

            for (int i = 0; i < ISAX.unsortl.Length; i++)
            {
                Szal += Math.Pow(ISAY.unsortl[i] - RegresType.Model(ISAX.unsortl[i], Q, RegresTypeN), 2);
            }
            Szal /= (ISAX.unsortl.Length - Q.Count);
            return(Math.Sqrt(Szal));
        }
Exemplo n.º 2
0
        static public void Repaint(InitialStatisticalAnalys gr, InitialStatisticalAnalys gr2, Correlation_RegressionAnalysis CRA, Chart chart1, Chart chart2)
        {
            chart1.ChartAreas[0].AxisX.LabelStyle.Format = "###,##0.000";
            chart1.ChartAreas[0].AxisY.LabelStyle.Format = "###,##0.000";

            chart2.ChartAreas[0].AxisX.LabelStyle.Format = "###,##0.000";
            chart2.ChartAreas[0].AxisY.LabelStyle.Format = "###,##0.000";
            ///++++++++++++++++++++++++++++++++++++++++++++++
            ///GISTOGAMA_PAINT
            ///++++++++++++++++++++++++++++++++++++++++++++++
            chart1.Series.Clear();
            chart2.Series.Clear();

            if (CRA.f == null)
            {
                return;
            }
            chart1.Series.Add(CorelPaint(gr.unsortl, gr2.unsortl, Color.DarkBlue, "f"));
            chart1.ChartAreas[0].AxisX.Minimum  = gr.Min.Q - gr.Len.Q * 0.05;
            chart1.ChartAreas[0].AxisX.Maximum  = gr.Max.Q + gr.Len.Q * 0.05;
            chart1.ChartAreas[0].AxisX.Interval = Math.Round(gr.Len.Q * 0.1, 3);
            chart1.ChartAreas[0].AxisY.Interval = Math.Round(gr2.Len.Q * 0.1, 3);
            chart1.ChartAreas[0].AxisY.Minimum  = gr2.Min.Q - gr2.Len.Q * 0.05;
            chart1.ChartAreas[0].AxisY.Maximum  = gr2.Max.Q + gr2.Len.Q * 0.05;
            chart2.ChartAreas[0].AxisX.Minimum  = chart2.ChartAreas[0].AxisY.Minimum = 0;
            chart2.ChartAreas[0].AxisX.Maximum  = CRA.f.GetLength(0);
            chart2.ChartAreas[0].AxisY.Maximum  = CRA.f.GetLength(1);
            chart2.ChartAreas[0].AxisX.Interval = chart2.ChartAreas[0].AxisY.Interval = 100;

            chart1.Titles[0].Text = "y";
            chart1.Titles[1].Text = "x";
            chart2.Titles[0].Text = "x";
            chart2.Titles[1].Text = "y";

            chart2.ChartAreas[0].AxisY.CustomLabels.Clear();

            /*for (int j = 0; j < CRA.f.GetLength(0); j++)
             * {
             *  string str2 = "";
             *  for (int k = 0; k < CRA.f.GetLength(1); k++)
             *  {
             *      str2 = "f" + j.ToString() + "_" + k.ToString();
             *      chart2.Series.Add(str2);
             *      chart2.Series[str2].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point;
             *      chart2.Series[str2].MarkerStyle = MarkerStyle.Square;
             *      chart2.Series[str2].IsVisibleInLegend = false;
             *      chart2.Series[str2].MarkerSize = (chart2.Size.Width - 20 + k * 10) / CRA.f.GetLength(0);
             *      //chart2.Series[str2]["PixelPointWidth"] = "200";//PointWidth
             *      double z = CRA.f[j, k];
             *      if (z > 0.07)
             *          chart2.Series[str2].Color = Color.Black;
             *      else
             *      {
             *          int r = 255 - (int)(255 * CRA.f[j, k] / 0.07);
             *          chart2.Series[str2].Color = Color.FromArgb(r, r, r);
             *      }
             *      //chart2.Series[str2].Color = Color.FromArgb(r, r, r);
             *      //chart2.Series[str2]["StackedGroupName"] = "Group" + j.ToString();
             *      chart2.Series[str2].Points.AddXY(j + 0.5,
             *          k + 0.5);
             *  }
             * }*/
            Image      d  = PaintData.Paintf(CRA, 1000, 1000);
            NamedImage ni = new NamedImage("backimage", d);

            chart2.Images.Add(ni);
            chart2.ChartAreas[0].BackImageAlignment = ChartImageAlignmentStyle.Center;
            chart2.ChartAreas[0].BackImageWrapMode  = ChartImageWrapMode.Scaled;
            chart2.ChartAreas[0].BackImage          = "backimage";

            if (CRA.Doubl == true && CRA.Nezal == true)
            {
                chart1.Series.Add("Лін Рег" + ":" + CRA.RegresTypeVib);
                chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].ChartType   = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].Color       = Color.Yellow;
                chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].BorderWidth = 3;
                if (CRA.RegresTypeVib == RegresTypeName.LineRegresion)
                {
                    //CRA.ABTeil
                    ///teilor
                    chart1.Series.Add("Лін Рег Тейл");
                    chart1.Series["Лін Рег Тейл"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                    chart1.Series["Лін Рег Тейл"].Color     = Color.Green;
                    chart1.Series["Лін Рег Тейл"].Points.AddXY(gr.Min.Q, CRA.ABTeil[0] + gr.Min.Q * CRA.ABTeil[1]);
                    chart1.Series["Лін Рег Тейл"].BorderWidth = 3;
                    chart1.Series["Лін Рег Тейл"].Points.AddXY(gr.Max.Q, CRA.ABTeil[0] + gr.Max.Q * CRA.ABTeil[1]);
                }

                chart1.Series.Add("Тол меж");
                chart1.Series["Тол меж"].ChartType   = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                chart1.Series["Тол меж"].Color       = Color.DarkRed;
                chart1.Series["Тол меж"].BorderWidth = 2;
                chart1.Series.Add("Тол меж2");
                chart1.Series["Тол меж2"].ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                chart1.Series["Тол меж2"].Color             = chart1.Series["Тол меж"].Color;
                chart1.Series["Тол меж2"].IsVisibleInLegend = false;
                chart1.Series["Тол меж2"].BorderWidth       = 2;

                chart1.Series.Add("Дов інтр");
                chart1.Series["Дов інтр"].ChartType   = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                chart1.Series["Дов інтр"].Color       = Color.DarkMagenta;
                chart1.Series["Дов інтр"].BorderWidth = 2;
                chart1.Series.Add("Дов інтр2");
                chart1.Series["Дов інтр2"].ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                chart1.Series["Дов інтр2"].Color             = chart1.Series["Дов інтр"].Color;
                chart1.Series["Дов інтр2"].IsVisibleInLegend = false;
                chart1.Series["Дов інтр2"].BorderWidth       = 2;
                if (CRA.RegresTypeVib != RegresTypeName.ParabRegresion)
                {
                    for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005)
                    {
                        double Sx0 = Math.Sqrt(CRA.Szal * (1 + 1.0 / gr.l.Count) + CRA.Q[1].QSigma * Math.Pow(x0 - gr.Mx.Q, 2));
                        if (CRA.RegresTypeVib == RegresTypeName.LineRegresion)
                        {
                            chart1.Series["Дов інтр"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) - CRA.T * Sx0);
                            chart1.Series["Дов інтр2"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) + CRA.T * Sx0);
                        }
                        chart1.Series["Тол меж"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) - CRA.T * CRA.Szal);
                        chart1.Series["Тол меж2"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) + CRA.T * CRA.Szal);
                    }
                    for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005)
                    {
                        chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib));
                    }
                }
                else if (CRA.RegresTypeVib == RegresTypeName.ParabRegresion)
                {
                    double x2 = InitialStatisticalAnalys.StartMoment(gr.l, 2);
                    double x3 = InitialStatisticalAnalys.StartMoment(gr.l, 3);
                    double x4 = InitialStatisticalAnalys.StartMoment(gr.l, 4);
                    double Tt = Distributions.StudentQuantile(1 - gr.alf.Q / 2, gr.unsortl.Length - 3);
                    for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005)
                    {
                        double Sx0 = Math.Sqrt(Math.Pow(CRA.Szal2, 2) * (1 + 1.0 / gr.l.Count) +
                                               Math.Pow(CRA.Q[4].QSigma * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q), 2) +
                                               Math.Pow(CRA.Q[5].QSigma * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3), 2));

                        /*
                         * chart1.Series["Дов інтр"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) - CRA.T * Sx0);
                         * chart1.Series["Дов інтр2"].Points.AddXY(x0, RegresType.Model(x0, CRA.Q, CRA.RegresTypeVib) + CRA.T * Sx0);*/

                        chart1.Series["Дов інтр"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q)
                                                               + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3)
                                                               - Tt * Sx0);
                        chart1.Series["Дов інтр2"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q)
                                                                + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3)
                                                                + Tt * Sx0);


                        chart1.Series["Тол меж"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q)
                                                              + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3)
                                                              - Tt * CRA.Szal2);
                        chart1.Series["Тол меж2"].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q)
                                                               + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3)
                                                               + Tt * CRA.Szal2);
                    }
                    for (double x0 = gr.Min.Q; x0 <= gr.Max.Q; x0 += gr.Len.Q * 0.005)
                    {
                        chart1.Series["Лін Рег" + ":" + CRA.RegresTypeVib].Points.AddXY(x0, CRA.Q[3].Q + CRA.Q[4].Q * Correlation_RegressionAnalysis.fi1F(x0, gr.Mx.Q)
                                                                                        + CRA.Q[5].Q * Correlation_RegressionAnalysis.fi2F(x0, gr.Dx.Q, gr.Mx.Q, x2, x3));
                    }
                }
            }
        }
        static public List <Data> RegresParamFound(InitialStatisticalAnalys ISAX, InitialStatisticalAnalys ISAY, double Korelation, string TypeRegVib, ref double Szal2)
        {
            List <Data> Qm = new List <Data>();

            if (TypeRegVib == RegresTypeName.ParabRegresion)
            {
                Data a = new Data(), b = new Data(), c = new Data();
                Qm.Add(a);
                Qm.Add(b);
                Qm.Add(c);
                a.Name = "a";
                b.Name = "b";
                c.Name = "c";
                double n1 = 0;//107 page andan
                double x2 = InitialStatisticalAnalys.StartMoment(ISAX.l, 2);
                double x3 = InitialStatisticalAnalys.StartMoment(ISAX.l, 3);
                double x4 = InitialStatisticalAnalys.StartMoment(ISAX.l, 4);
                for (int i = 0; i < ISAX.unsortl.Length; i++)
                {
                    n1 += (ISAY.unsortl[i] - ISAY.Mx.Q) * (Math.Pow(ISAX.unsortl[i], 2) - x2);
                }
                n1  /= ISAX.unsortl.Length;
                c.Q  = ISAX.Dx.Q * n1 - (x3 - x2 * ISAX.Mx.Q) * Korelation * ISAX.Gx.Q * ISAY.Gx.Q;
                c.Q /= ISAX.Dx.Q * (x4 - Math.Pow(x2, 2)) - Math.Pow(x3 - x2 * ISAX.Mx.Q, 2);
                b.Q  = (x4 - Math.Pow(x2, 2)) * Korelation * ISAX.Gx.Q * ISAY.Gx.Q - (x3 - x2 * ISAX.Mx.Q) * n1;
                b.Q /= ISAX.Dx.Q * (x4 - Math.Pow(x2, 2)) - Math.Pow(x3 - x2 * ISAX.Mx.Q, 2);
                a.Q  = ISAY.Mx.Q - b.Q * ISAX.Mx.Q - c.Q * ISAX.X_2.Q;
                Data a2 = new Data(), b2 = new Data(), c2 = new Data();
                Qm.Add(a2);
                Qm.Add(b2);
                Qm.Add(c2);
                a2.Name = "a2";
                b2.Name = "b2";
                c2.Name = "c2";
                a2.Q    = ISAY.Mx.Q;
                double Mfi2scv = 0;
                {
                    double TD = 0;
                    for (int i = 0; i < ISAX.l.Count; i++)
                    {
                        Mfi2scv += Math.Pow(fi2F(ISAX.unsortl[i], ISAX.Dx.Q, ISAX.Mx.Q, x2, x3), 2);
                        b2.Q    += (ISAX.unsortl[i] - ISAX.Mx.Q) * ISAY.unsortl[i];
                        c2.Q    += fi2F(ISAX.unsortl[i], ISAX.Dx.Q, ISAX.Mx.Q, x2, x3) * ISAY.unsortl[i];
                        TD      += Math.Pow(fi2F(ISAX.unsortl[i], ISAX.Dx.Q, ISAX.Mx.Q, x2, x3), 2);
                    }
                    c2.Q /= TD;
                }
                Mfi2scv /= ISAX.l.Count;
                b2.Q    /= ISAX.l.Count;
                b2.Q    /= ISAX.Dx.Q;
                Szal2    = 0;
                for (int i = 0; i < ISAX.l.Count; i++)
                {
                    Szal2 += Math.Pow(ISAY.unsortl[i] - a2.Q - b2.Q * fi1F(ISAX.unsortl[i], ISAX.Mx.Q) - c2.Q * fi2F(ISAX.unsortl[i], ISAX.Dx.Q, ISAX.Mx.Q, x2, x3), 2);
                }
                Szal2    /= ISAX.l.Count - 3;
                Szal2     = Math.Sqrt(Szal2);
                a2.QSigma = Szal2 / Math.Sqrt(ISAX.unsortl.Length);
                b2.QSigma = Szal2 / (ISAX.Dx.Q * Math.Sqrt(ISAX.unsortl.Length));
                c2.QSigma = Szal2 / Math.Sqrt(ISAX.unsortl.Length * Mfi2scv);
                double Tt = Distributions.StudentQuantile(1 - ISAX.alf.Q / 2, ISAX.unsortl.Length - 3);
                a2.QButton = a2.Q - Tt * a2.QSigma;
                a2.QUpper  = a2.Q + Tt * a2.QSigma;
                b2.QButton = b2.Q - Tt * b2.QSigma;
                b2.QUpper  = b2.Q + Tt * b2.QSigma;
                c2.QButton = c2.Q - Tt * c2.QSigma;
                c2.QUpper  = c2.Q + Tt * c2.QSigma;
                double at = ISAY.Mx.Q - b.Q * ISAX.Mx.Q - c.Q * Math.Pow(ISAX.Mx.Q, 2) - a.Q;
                Data   ta = new Data(), tb = new Data(), tc = new Data();
            }
            else
            {
                Data a = new Data(), b = new Data();
                Qm.Add(a);
                Qm.Add(b);
                a.Name = "a";
                b.Name = "b";
                List <double> t = new List <double>();
                List <double> z = new List <double>();
                for (int i = 0; i < ISAX.unsortl.Length; i++)
                {
                    t.Add(RegresType.FiX(ISAX.unsortl[i], TypeRegVib));
                    z.Add(RegresType.FiY(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib));
                }

                /*double Mfx = 0,Mfxfx=0, Mfy = 0, Mfxfy = 0,W = 0;
                 * for (int i = 0; i < ISAX.unsortl.Length; i++)
                 * {
                 *  Mfx += RegresType.FiX(ISAX.unsortl[i], TypeRegVib) *
                 *      RegresType.W(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib);
                 *  Mfxfx += Math.Pow(RegresType.FiX(ISAX.unsortl[i], TypeRegVib),2) *
                 *      RegresType.W(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib);
                 *  Mfy += RegresType.FiY(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib) *
                 *      RegresType.W(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib);
                 *  Mfxfy += RegresType.FiX(ISAX.unsortl[i], TypeRegVib) * RegresType.FiY(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib) *
                 *      RegresType.W(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib);
                 *  W += RegresType.W(ISAY.unsortl[i], ISAX.unsortl[i], TypeRegVib);
                 *
                 * }
                 * Mfx /= W;
                 * Mfxfx /= W;
                 * Mfxfy /= W;
                 * Mfy /= W;*/
                // Qm[1].Q = (Mfxfy - Mfx * Mfy) / (Mfxfx - Math.Pow(Mfx, 2));
                //Qm[0].Q = Mfy - Qm[1].Q * Mfx;
                InitialStatisticalAnalys ISAt = new InitialStatisticalAnalys(t);
                InitialStatisticalAnalys ISAz = new InitialStatisticalAnalys(z);
                double Kor_tz = Correlation_RegressionAnalysis.KorelationFound(ISAt, ISAz);
                Qm[1].Q = Kor_tz * ISAz.Gx.Q / ISAt.Gx.Q;
                Qm[0].Q = RegresType.A(ISAz.Mx.Q - Qm[1].Q * ISAt.Mx.Q, TypeRegVib);
                double Szal = SzalF(ISAX, ISAY, Qm, TypeRegVib);
                Qm[0].QSigma  = RegresType.A(Szal * Math.Sqrt(1.0 / ISAX.unsortl.Length + Math.Pow(ISAt.Mx.Q, 2) / (ISAt.Dx.Q * (ISAX.unsortl.Length - 1))), TypeRegVib);
                Qm[1].QSigma  = Szal / (ISAX.unsortl.Length - 1);
                Qm[0].QButton = RegresType.A(Qm[0].Q - Distributions.StudentQuantile(1 - ISAX.alf.Q / 2, ISAX.unsortl.Length - 2) * Qm[0].QSigma, TypeRegVib);
                Qm[0].QUpper  = RegresType.A(Qm[0].Q + Distributions.StudentQuantile(1 - ISAX.alf.Q / 2, ISAX.unsortl.Length - 2) * Qm[0].QSigma, TypeRegVib);
                Qm[1].QButton = Qm[1].Q - Distributions.StudentQuantile(1 - ISAX.alf.Q / 2, ISAX.unsortl.Length - 2) * Qm[1].QSigma;
                Qm[1].QUpper  = Qm[1].Q + Distributions.StudentQuantile(1 - ISAX.alf.Q / 2, ISAX.unsortl.Length - 2) * Qm[1].QSigma;
            }
            return(Qm);
        }
Exemplo n.º 4
0
        private void Button1_Click(object sender, EventArgs e)
        {
            Random rand = new Random();

            if (type < 2)
            {
                double Q1 = 0, Q2 = 0, Q3 = 0, N = 0;
                try
                {
                    Q1 = Convert.ToDouble(Q1textBox.Text);
                    Q2 = Convert.ToDouble(Q2textBox.Text);
                    Q3 = Convert.ToDouble(Q3textBox.Text);
                    N  = Convert.ToDouble(NtextBox.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Невірні дані\n" + ex.Message, "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (type == 0)
                {
                    if (comboBox1.Text == Distributions.Normal)
                    {
                        for (int i = 0; i < N; i++)
                        {
                            RezDat.Add(SimpleRNG.GetNormal(Q1, Q2));
                        }
                    }
                    else if (comboBox1.Text == Distributions.Exp)
                    {
                        for (int i = 0; i < N; i++)
                        {
                            RezDat.Add(Math.Log(1.0 / (1 - rand.NextDouble())) / Q1);
                        }
                    }
                    else if (comboBox1.Text == Distributions.Line)
                    {
                        for (int i = 0; i < N; i++)
                        {
                            RezDat.Add((rand.NextDouble() * (Q2 - Q1) + Q1));
                        }
                    }
                }
                else if (type == 1)
                {
                    for (int i = 0; i < FirstData.Length; i++)
                    {
                        double dat = RegresType.Model(FirstData[i], new double[] { Q1, Q2, Q3 }, comboBox1.Text);
                        double eps = SimpleRNG.GetNormal(0, N);
                        if (double.IsInfinity(dat) || double.IsNaN(dat))
                        {
                            MessageBox.Show("Неможливо створити даний тип регресії\n", "Помилка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            RezDat.Clear();
                            return;
                        }
                        dat = dat + eps;
                        RezDat.Add(dat);
                    }
                }
            }
            else if (type == 2)
            {
                double   A0 = 0, N = 0;
                double[] A = new double[ISA.Count];
                try
                {
                    N  = Convert.ToDouble(NtextBox.Text);
                    A0 = Convert.ToDouble(Q2textBox.Text);
                    string[] As = Regex.Split(Q1textBox.Text, ";");
                    if (As.Length != A.Length)
                    {
                        throw new System.ArgumentException("Невірний вектор A", "Помилка");
                    }
                    for (int i = 0; i < As.Length && i < A.Length; i++)
                    {
                        A[i] = Convert.ToDouble(As[i]);
                    }
                }
                catch { goto error; }
                for (int i = 0; i < ISA[0].unsortl.Length; i++)
                {
                    double dat = 0;
                    for (int j = 0; j < A.Length; j++)
                    {
                        dat += A[j] * ISA[j].unsortl[i];
                    }
                    dat += A0;
                    double eps = SimpleRNG.GetNormal(0, N);
                    dat = dat + eps;
                    RezDat.Add(dat);
                }
            }
            this.DialogResult = DialogResult.OK;
            this.Close();
            return;

error:
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }