Использование onPaint для рисования графики на вкладках - PullRequest
0 голосов
/ 29 декабря 2011

Мне нужно рисовать графику на вкладках, которые создаются динамически. И данные, которые я намереваюсь использовать, поступают из класса mainform. Я очень сожалею о том, что избегаю делать еще один урок. Но я не могу начать все сначала, особенно после написания 2k строк кода.

Вот мой класс tabcontrol

partial class grafCizKont : TabControl
        {
            public grafCizKont()
            {
                Init();
            }

            private void Init()
            {
                this.SetStyle(ControlStyles.UserPaint, true);
                this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                this.SetStyle(ControlStyles.DoubleBuffer, true);
                this.SetStyle(ControlStyles.ResizeRedraw, true);
            }
            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                DrawTabPane(e.Graphics);
            }

            private void DrawTabPane(Graphics yuzey)
            {
                if (!Visible)
                    return;

                // here we draw our tabs
                for (int i = 0; i < 30; i++)
                    if (pGenClickTut > i) 
                      graphCiz(yuzey,graphDizi, it2, i);


            }

        }

и мой метод graphCiz, который находится внутри класса mainform.

public static void graphCiz(Graphics yuzey, int[,] graphDizi, int it, int kSayi = 1)
        {



        int bolum;
        yuzey.Clear(Color.Snow);
        Pen kalem;
        SolidBrush s;
        kalem = new Pen(Color.Black, 2.0f);
        s = new SolidBrush(Color.Blue);

        yuzey.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        yuzey.DrawLine(kalem, 30, 15, 30, 135);
        yuzey.DrawLine(kalem, 30, 135, 300, 135);


        int orta, sayi;
        orta = graphDizi[kSayi,0]; 
        int son = 15 * it;
        sayi = graphDizi[kSayi, it];
        graphDiziDuzgun[kSayi, it] = minMax(orta, sayi);

        if (it > 0)
        {
         bolum = 15;
            int j = 0;
            for (int i = 0; i < son; i += bolum)
            {

                if (i > 0)
                {
                    cizgi(yuzey, 30 + i, graphDiziDuzgun[kSayi, j - 1] , 30 + i + bolum, graphDiziDuzgun[kSayi, j], kSayi) ;
                }
                if (i == 0)
                {
                    cizgi(yuzey, 30, 135, 30 + bolum, graphDiziDuzgun[kSayi, j], kSayi );
                }
                j++;
            }
        }

    }

когда я выполняю эту программу. я получил сообщение об ошибке «System.NullReferenceException было обработано». я думаю, что это указывает на юзея, который должен быть графическим объектом. И я понятия не имею, как отнести это к моему tabcontrol. И я не уверен, что делает мой метод onpaint. Я сомневаюсь, что я ясно даю понять, но это все, что я могу сделать. Пожалуйста, дайте мне выход.

...