728x90
반응형
728x170
■ RichTextBox 클래스에서 테이블을 추가하는 방법을 보여준다.
▶ RTFTable.cs
using System.Linq;
using System.Text;
namespace TestProject
{
/// <summary>
/// RTF 테이블
/// </summary>
public class RTFTable
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 내부 마진
/// </summary>
public int InternalMargin = 180;
/// <summary>
/// 행 카운트
/// </summary>
public int RowCount;
/// <summary>
/// 열 카운트
/// </summary>
public int ColumnCount;
/// <summary>
/// 열 너비 배열
/// </summary>
public int[] ColumnWidthArray = null;
/// <summary>
/// 컨텐트 배열
/// </summary>
public string[,] ContentArray = null;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - RTFTable(rowCount, colunmnCount, internalMargin)
/// <summary>
/// 생성자
/// </summary>
/// <param name="rowCount">행 카운트</param>
/// <param name="colunmnCount">열 카운트</param>
/// <param name="internalMargin">내부 마진</param>
public RTFTable(int rowCount, int colunmnCount, int internalMargin)
{
RowCount = rowCount;
ColumnCount = colunmnCount;
InternalMargin = internalMargin;
ColumnWidthArray = Enumerable.Repeat(1440, ColumnCount).ToArray();
ContentArray = new string[RowCount, ColumnCount];
for(int row = 0; row < RowCount; row++)
{
for(int column = 0; column < ColumnCount; column++)
{
ContentArray[row, column] = string.Empty;
}
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 열 너비 배열 설정하기 - SetColumnWidthArray(int[] columnWidthArray)
/// <summary>
/// 열 너비 배열 설정하기
/// </summary>
/// <param name="columnWidthArray">열 너비 배열</param>
public void SetColumnWidthArray(params int[] columnWidthArray)
{
for(int column = 0; column < ColumnCount; column++)
{
ColumnWidthArray[column] = columnWidthArray[column];
}
}
#endregion
#region 문자열 구하기 - ToString()
/// <summary>
/// 문자열 구하기
/// </summary>
/// <returns>문자열</returns>
public override string ToString()
{
StringBuilder stringBuilder = new StringBuilder();
string columnWidthString = GetColumnWidthString();
for(int row = 0; row < RowCount; row++)
{
stringBuilder.Append(@"\trowd");
stringBuilder.Append(@"\trgaph" + InternalMargin.ToString());
stringBuilder.Append(columnWidthString);
for(int c = 0; c < ColumnCount; c++)
{
stringBuilder.Append(@"\pard\intbl{" + ContentArray[row, c].Replace(@"\", @"\\") + @"}\cell");
}
stringBuilder.Append(@"\row");
}
return stringBuilder.ToString();
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 열 너비 문자열 구하기 - GetColumnWidthString()
/// <summary>
/// 열 너비 문자열 구하기
/// </summary>
/// <returns>열 너비 문자열</returns>
private string GetColumnWidthString()
{
StringBuilder stringBuilder = new StringBuilder();
int totalWidth = 0;
for(int column = 0; column < ColumnCount; column++)
{
totalWidth += ColumnWidthArray[column];
stringBuilder.Append(@"\cellx" + totalWidth.ToString());
}
return stringBuilder.ToString();
}
#endregion
}
}
▶ MainForm.cs
using System;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.insertButton.Click += insertButton_Click;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 테이블 추가 버튼 클릭시 처리하기 - insertButton_Click(sender, e)
/// <summary>
/// 테이블 추가 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void insertButton_Click(object sender, EventArgs e)
{
RTFTable table = new RTFTable(4, 3, 100);
table.SetColumnWidthArray(900, 900, 900);
for(int row = 0; row < 4; row++)
{
for(int column = 0; column < 3; column++)
{
table.ContentArray[row, column] = "(" + row.ToString() + ", " + column.ToString() + ")";
}
}
this.richTextBox.Rtf = this.richTextBox.Rtf.Replace("@@@", table.ToString());
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Image 클래스 : 이미지 복사하기 (0) | 2020.12.26 |
---|---|
[C#/WINFORM] Bitmap 클래스 : 비트맵 픽셀 밝게하기 (0) | 2020.12.26 |
[C#/WINFORM] 레이더 차트 그리기 (0) | 2020.12.26 |
[C#/WINFORM] Graphics 클래스 : DrawString 메소드를 사용해 회전 텍스트 그리기 (0) | 2020.12.26 |
[C#/WINFORM] PointF 구조체 : 포인트 밀접 여부 구하기 (0) | 2020.12.26 |
[C#/WINFORM] RichTextBox 클래스 : 이미지 캡처하기 (0) | 2020.12.25 |
[C#/WINFORM] Bitmap 클래스 : 합성 이미지 만들기 (0) | 2020.12.25 |
[C#/WINFORM] 화면 보호기/절전 모드 방지하기/허용하기 (0) | 2020.12.21 |
[C#/WINFORM] Form 클래스 : CreateParams 속성을 사용해 작업 전환기(Tab Switcher)에서 애플리케이션 숨기기 (0) | 2020.12.19 |
[C#/WINFORM] SVG 이미지 사용하기 (0) | 2020.12.19 |
댓글을 달아 주세요