Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
95 / 87 / 61
Регистрация: 21.04.2014
Сообщений: 1,186
1

Вывод текста точно по центру столбца гистограммы

16.03.2016, 12:46. Просмотров 691. Ответов 1
Метки нет (Все метки)

Здравствуйте.
У меня есть гистограмма и под каждым её столбцом я вывожу текст. Мне нужно сделать его точно по центру. Изначально делал так:
C#
1
g.DrawString(dic.Key.ToString(), this.Font, Brushes.Black, new PointF(((fStepX * i + (fStepX * CoefficientWidth)) - sLenText.Width)/2, fVertical + 10));
Где
(fStepX * i + (fStepX * CoefficientWidth)) - ширина столбца в пикселях
sLenText.Width - ширина текста в пикселях
Это работает только для первого столбца, т.к. в дальнейшем столбцы начинают рисоваться не в нулю по Х...
Они рисуются в цикле вот так:
C#
1
g.FillRectangle(gradBrush, fStepX*i, fVertical - fBarHeight, fStepX*CoefficientWidth, fBarHeight);
Помогите составить нормальную формулу для рисования текста по центру каждого столбца.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 12:46
Ответы с готовыми решениями:

Ввод и вывод текста в таблицу с сортировкой 1 столбца
Здравствуйте. Помогите, пожалуйста, написать фрагмент кода программы(функции, в которых выполняется...

HTML!? Выравнивание IMG после текста по центру этого текста
как выровнять изображение по центру текста? имеется в виду опустить изображение на пару пикселей,...

Регулировка текста по центру и создания границ для этого текста
Уже который час парюсь и не могу никак отрегулировать текст по центру и сделать ему границы как я...

Вывод гистограммы в консоль
Хочу вывести гистограмму в консоль на подобие как в пакете tqdm, но мне нужен не динамический...

1
Эксперт .NETАвтор FAQ
9634 / 4749 / 1708
Регистрация: 11.01.2015
Сообщений: 5,926
Записей в блоге: 34
16.03.2016, 22:47 2
Цитата Сообщение от FaceHoof Посмотреть сообщение
составить нормальную формулу для рисования текста по центру каждого столбца
Не нужно там никаких формул. Метод Graphics.DrawString() имеет перегрузки, принимающие прямоугольник в котором нужно рисовать и параметр типа StringFormat, который указывает как выравнивать строку в пределах заданного прямоугольника.

Комбинируя все вместе, получаем:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO.Ports;
using System.Net;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication332
{
    public partial class Form1 : Form
    {
        private List<int> lstParameters = new List<int>();
 
        public Form1()
        {
            InitializeComponent();
 
            lstParameters.Add(5);
            lstParameters.Add(35);
            lstParameters.Add(451);
            lstParameters.Add(88);
            lstParameters.Add(1);
            lstParameters.Add(997);
            lstParameters.Add(632);
 
            new ChartPanel { Parent = this, Dock = DockStyle.Fill, Data = lstParameters };
 
        }
    }
 
    public class ChartPanel : Control
    {
        public List<int> Data { get; set; }
 
        public ChartPanel()
        {
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
 
            Padding = new Padding(20, 20, 20, 50);
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            if (Data == null) return;
 
            var w = ClientSize.Width - Padding.Left - Padding.Right;
            var h = ClientSize.Height - Padding.Top - Padding.Bottom;
            var g = e.Graphics;
 
            g.TranslateTransform(Padding.Left, Padding.Top);
 
            //Рисуем горизонтальную и вертикальную линии (левая и нижняя стенки)
            g.DrawLine(Pens.Black, 0, h, w, h);
            g.DrawLine(Pens.Black, 0, 0, 0, h);
 
            //Определяем наибольшее число в списке
            var max = int.MinValue;
            for (int j = 0; j < Data.Count; j++)
                if (Data[j] > max)
                    max = Data[j];
 
 
            var stepX = w / Data.Count;
 
            for (int i = 0; i < Data.Count; i++)
            {
                var barHeight = 1f * h * Data[i] / max;
                var rect = new RectangleF(stepX * i, h - barHeight, stepX * 0.8f, barHeight);
                g.FillRectangle(Brushes.Red, rect);
 
                //выводим надпись по центру столбца
                rect = new RectangleF(rect.Left, h + 2, rect.Width, 100);
                var sf = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Near};
                g.DrawString(Data[i].ToString(), Font, Brushes.Black, rect, sf);
            }
        }
    }
}
Название: 0.png
Просмотров: 29

Размер: 25.0 Кб
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2016, 22:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывод гистограммы случайных чисел в пределах от 1 до 10
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define NUMBER 100 #define LOWER 1 #define UPPER 10 ...

mvs 2010 - сканирование изображения в массив и вывод гистограммы
Приветствую народ! подскажите пожалуйста, каким образом перетащить код из Билдера(обработчик...

Вывод гистограммы (с вертикальными столбцами) длин слов во входном потоке
Написать программу для вывода гистограммы длин слов во входном потоке. Гистограмма должна быть с...

Нужен скрипт, который берёт данные из столбца A и в столбец B помещает изображение текста из столбца A
Нужен скрипт, который берёт данные из столбца A и в столбец B помещает изображение текста из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.