c # нарисовать круговую диаграмму на вкладке - PullRequest
1 голос
/ 28 ноября 2011

Довольно простой вопрос, к сожалению, никогда не использовал элементы управления рисованием и т. Д. В C #, так что я не уверен, как на это смотреть.Хорошо, я рисую круговую диаграмму из набора текстовых полей для ввода и запускаю рисование по событию кнопки.мне нужно нарисовать диаграмму на одной из моих вкладок вместо фона.как мне это установить?вот мой код:

      private void tempButton_Click(object sender, EventArgs e)
    {
        Rectangle tabArea;
        RectangleF tabTextArea;

        Bitmap B = new Bitmap(500, 500);

        tabArea = tabControl1.GetTabRect(0);

        tabTextArea = (RectangleF)tabControl1.GetTabRect(0);

        using (Graphics g = Graphics.FromImage(B))
        {
            int i1 = int.Parse(textBox1.Text);
            int i2 = int.Parse(textBox2.Text);
            int i3 = int.Parse(textBox3.Text);
            int i4 = int.Parse(textBox4.Text);

            float total = i1 + i2 + i3 + i4;
            float deg1 = (i1 / total) * 360;
            float deg2 = (i2 / total) * 360;
            float deg3 = (i3 / total) * 360;
            float deg4 = (i4 / total) * 360;

            Font font = new Font("Arial", 10.0f);
            SolidBrush brush = new SolidBrush(Color.Red);
            Pen p = new Pen(Color.Black, 2);
            p.Width = 0.5f;

            tabArea = new Rectangle(textBox1.Location.X + textBox1.Size.Width + 250, 150, 500, 500);

            Brush b1 = new SolidBrush(Color.Gold);
            Brush b2 = new SolidBrush(Color.Silver);
            Brush b3 = new SolidBrush(Color.DarkOrange);
            Brush b4 = new SolidBrush(Color.Black);

            g.DrawRectangle(p, tabArea);

            g.DrawPie(p, tabTextArea, 0, deg1);
            g.FillPie(b1, tabArea, 0, deg1);
            g.DrawPie(p, tabTextArea, deg1, deg2);
            g.FillPie(b2, tabArea, deg1, deg2);
            g.DrawPie(p, tabTextArea, deg2 + deg1, deg3);
            g.FillPie(b3, tabArea, deg2 + deg1, deg3);
            g.DrawPie(p, tabTextArea, deg3 + deg2 + deg1, deg4);
            g.FillPie(b4, tabArea, deg3 + deg2 + deg1, deg4);

            //set picturebox3 as data source??
            pictureBox3.Image = B;

        }
    }

Как вы можете видеть, когда я нажимаю кнопку тестирования, она рисует график, но за моей областью вкладок мне нужно, чтобы он рисовал на одной из моих вкладок (у меня такое ощущение, что этосупер легкое 1line решение, но гугл не мой друг атм).Большое спасибо заранее!

1 Ответ

1 голос
/ 28 ноября 2011

Самое простое решение - создать растровое изображение нужных размеров, создать Graphics для этого растрового изображения, выполнить рисование, а затем установить это растровое изображение в качестве источника изображения для графического блока автоматического изменения размера, который вы помещаете на вкладку. Это самый чистый способ.

UPDATE
Я отметил в своих комментариях, что ваш код рисования не продуман до конца. Измените первые строки следующим образом:

    Rectangle tabArea;
    RectangleF tabTextArea;

    Bitmap B = new Bitmap(500, 500, PixelFormat.Format32bppArgb);

    tabArea = new Rectangle(0, 0, B.Width, B.Height);
    tabTextArea = new RectangleF(0, 0, B.Width, B.Height);

Также: определение tabArea на основе контрольных местоположений не является хорошей идеей. И наконец: установите для свойства «SizeMode» значение «AutoSize», чтобы растягивание рамки изображения до размера растрового изображения.

...