Tabloyu oluşturmak ve eklemek için aşağıdaki methodu kullanacağız. Kodların içinde kısa açıklamalar var ama altta daha ayrıntılı açıklama yaptım.
private void TabloEkle(int nRow, int nCol, int wCell)
{
// Tabloyu metinsel olarak çizmek için SringBuilder nesnesi
StringBuilder tableRtf = new StringBuilder();
// Tablo oluşturma formatının başlangıcı
tableRtf.Append(@"{\rtf1 ");
// Döngünün dönüş sayısı satır sayısını belirleyecek
for (int i = 0; i < nRow; i++)
{
// satır oluştur
tableRtf.Append(@"\trowd");
for (int y = 1; y <= nCol; y++)
{
// cell komutu ile yeni hücre oluşturalım
tableRtf.Append(@"\cellx" + y * wCell);
}
// satır sonu
tableRtf.Append(@"\intbl \cell \row");
}
// Tablo çizimini kapatalım
tableRtf.Append(@"\pard");
tableRtf.Append(@"}");
// Son olarak hazırladığımız tablo çizimini RichTextbox'a atalım
this.richTextBox1.Rtf = tableRtf.ToString();
}
StringBuilder nesnesini, rtf formatındaki tablo kodlarımızı toplamak için kullandık. Append methodu nesne içindeki metne ekleme yapar. İki tane iç içe for döngüsü görüyorsunuz bunlarda ilki satırları, içindeki de sütunları oluşturuyor.
Rtf metninin içindeki “cellx” hücre oluşturmaya yarar, “cellx1000″ gibi kullanılır ve 1000 rakamı hücre genişliğini gösterir. Döngü içinde yazdırırken “y * wCell” yapmamızın sebebi, hücre genişlikleri offsetlerle beraber verilir. Yani, direkt hücrenin genişliği verilmez, nereye kadar uzanacağı verilir. Biz de hücrelerin hepsi aynı yerde olmasın yan yana dursun diye sütun sayısıyla çarpıp yazdırdık.
Son olarak tableRtf nesnesindeki metin tabanlı tablo kodlarını RichTextBox‘a aktardık.
Ekle butonunda şu kod satırlarını kullandık:
int satirSayisi = Int32.Parse(txt_satir.Text);
int sutunSayisi = Int32.Parse(txt_sutun.Text);
int hucreGenisligi = Int32.Parse(txt_hucre.Text);
TabloEkle(satirSayisi, sutunSayisi, hucreGenisligi);
Basit bir şekilde textboxlara yazılan değerleri methoda parametre olarak gönderdik.
Kaynak: http://yenikod.com/c-richtextbox-icinde-tablo-olusturma/ (önizleme & kaynak kodları)