728x90
728x170
▶ MainForm.cs
using System;
using System.Drawing;
using System.Drawing.Text;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 값 배열
/// </summary>
private string[][] valueArray =
{
new string[]
{
"WPF 3d, Three-Dimensional Graphics with WPF and C#",
"http://www.csharphelper.com/wpf3d.html",
"426 pages",
"2/2018",
"978-1983905964"
},
new string[]
{
"The C# Helper Top 100",
"http://www.csharphelper.com/top100.htm",
"382 pages",
"9/2017",
"978-1546886716"
},
new string[]
{
"Interview Puzzles Dissected, Solving and Understanding Interview Puzzles",
"http://www.csharphelper.com/puzzles.htm",
"300 pages",
"11/2016",
"978-1539504887"
},
new string[]
{
"C# 24-Hour Trainer, 2nd Edition",
"http://www.wrox.com/WileyCDA/WroxTitle/C-24-Hour-Trainer-2nd-Edition.productCd-1119065666.html",
"600 pages",
"11/2015",
"978-1119065661"
},
new string[]
{
"Beginning Software Engineering",
"http://www.wrox.com/WileyCDA/WroxTitle/Beginning-Software-Engineering.productCd-1118969146.html",
"480 pages",
"3/2015",
"978-1118969144"
},
new string[]
{
"C# 5.0 Programmer's Reference",
"http://www.wrox.com/WileyCDA/WroxTitle/C-5-0-Programmer-s-Reference.productCd-1118847288.html",
"960 pages",
"4/2014",
"978-1118847282"
},
new string[]
{
"Essential Algorithms : A Practical Approach to Computer Algorithms",
"http://www.csharphelper.com/algorithms.html",
"624 pages",
"8/2013",
"978-1118612101"
},
};
/// <summary>
/// 컬럼 너비 배열
/// </summary>
private int[] columnWidthArray = { 230, 230, 90, 70, 130};
/// <summary>
/// 수직 정렬 배열
/// </summary>
private StringAlignment[] verticalAlignmentArray =
{
StringAlignment.Center,
StringAlignment.Center,
StringAlignment.Near,
StringAlignment.Near,
StringAlignment.Near,
};
/// <summary>
/// 수평 정렬 배열
/// </summary>
private StringAlignment[] horizontalAlignmentArray =
{
StringAlignment.Near,
StringAlignment.Near,
StringAlignment.Far,
StringAlignment.Center,
StringAlignment.Near,
};
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
#region 이벤트를 설정한다.
this.canvasPictureBox.Paint += canvasPictureBox_Paint;
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 캔버스 픽처 박스 페인트시 처리하기 - canvasPictureBox_Paint(sender, e)
/// <summary>
/// 캔버스 픽처 박스 페인트시 처리하기
/// </summary>
/// <param name="sender">이벤트 인자</param>
/// <param name="e">이벤트 인자</param>
private void canvasPictureBox_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
using(StringFormat stringFormat = new StringFormat())
{
using(Font font = new Font("Times New Roman", 12))
{
const int MARGIN = 4;
int y = MARGIN;
foreach(string[] rowArray in this.valueArray)
{
int columnCount = rowArray.Length;
int maximumHeight = 0;
for(int column = 0; column < columnCount; column++)
{
SizeF columnSize = e.Graphics.MeasureString
(
rowArray[column],
font,
this.columnWidthArray[column] - 2 * MARGIN
);
int newHeight = (int)Math.Ceiling(columnSize.Height);
if(maximumHeight < newHeight)
{
maximumHeight = newHeight;
}
}
maximumHeight += 2 * MARGIN;
int x = MARGIN;
for(int column = 0; column < columnCount; column++)
{
Rectangle boxRectangle = new Rectangle
(
x,
y,
this.columnWidthArray[column],
maximumHeight
);
Rectangle textRectangle = boxRectangle;
textRectangle.Inflate(-MARGIN, -MARGIN);
stringFormat.Alignment = this.horizontalAlignmentArray[column];
stringFormat.LineAlignment = this.verticalAlignmentArray[column];
e.Graphics.DrawString
(
rowArray[column],
font,
Brushes.Black,
textRectangle,
stringFormat
);
e.Graphics.DrawRectangle(Pens.Blue, boxRectangle);
x += this.columnWidthArray[column];
}
y += maximumHeight;
}
}
}
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] 원(Oval) 이미지 구하기 (0) | 2019.01.15 |
---|---|
[C#/WINFORM] 시어핀스키 8각형(Sierpinski Octagon) 그리기 (0) | 2019.01.15 |
[C#/WINFORM] 쌍곡나사선(Hyperbolic Spiral) 그리기 (0) | 2019.01.15 |
[C#/WINFORM] 아르키메데스 나선(Archimedes Spiral) 그리기 (0) | 2019.01.15 |
[C#/WINFORM] Component 클래스 : 커스텀 컴포넌트 사용하기 (0) | 2019.01.15 |
[C#/WINFORM] 레이블을 갖는 히스토그램 그리기 (0) | 2019.01.14 |
[C#/WINFORM] 장미 곡선(Rose Curve) 그리기 (0) | 2019.01.14 |
[C#/WINFORM] 테오 스파이럴(Spiral of Theodorus) 그리기 (0) | 2019.01.14 |
[C#/WINFORM] 피타고라스 나무 프랙탈(Pythagorean Tree Fractal) 그리기 (0) | 2019.01.14 |
[C#/WINFORM] 시어핀스키 펜타곤(Sierpinski Pentagon) 그리기 (0) | 2019.01.14 |