string appFolder = AppDomain.CurrentDomain.BaseDirectory;
13 Ekim 2010 Çarşamba
11 Ağustos 2010 Çarşamba
dBase (.dbf) Dosya Okuma
C Sharp ile Excel Dosyasına Yazmak
Bir süre önce excell dosyası oluşturan ve bu dosyanın içerisine belirtilen değerleri yazan bir class yazmıştım. Bu class’ı sizinle paylaşmak istedim. Belki bir gün bir yerde ihtiyacınız olabilir.
public class ExcelService
{
private Microsoft.Office.Interop.Excel.Application app;
private Microsoft.Office.Interop.Excel.Workbook workbook;
private Microsoft.Office.Interop.Excel.Worksheet worksheet;
private Microsoft.Office.Interop.Excel.Range range;
public void CreateExcelDocument()
{
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
app = new Microsoft.Office.Interop.Excel.Application();
app.Visible = false;
Thread.CurrentThread.CurrentCulture = oldCulture;
}
public void Save(string path)
{
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
workbook.SaveAs(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Thread.CurrentThread.CurrentCulture = oldCulture;
}
public void CreateWorkSheet(string workSheetName)
{
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Microsoft.Office.Interop.Excel.Worksheet retVal;
if (workbook == null)
{
workbook = app.Workbooks.Add(true);
retVal = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
retVal.Name = workSheetName;
Microsoft.Office.Interop.Excel.Worksheet currentWorkSheet;
for (int i = 1; i <= workbook.Worksheets.Count; i++)
{
currentWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[i];
if (currentWorkSheet.Name.Equals("Sheet1"))
{
currentWorkSheet.Delete();
}
}
}
else
{
retVal = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
retVal.Name = workSheetName;
}
Thread.CurrentThread.CurrentCulture = oldCulture;
}
public void WriteData(int row, int col, string data, string stringFormat, string workSheetName)
{
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
for (int i = 1; i <= workbook.Worksheets.Count; i++)
{
Microsoft.Office.Interop.Excel.Worksheet retVal =
(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[i];
if (retVal.Name.Equals(workSheetName))
{
if (!(string.IsNullOrEmpty(stringFormat)))
{
range = retVal.get_Range(retVal.Cells[row, col], retVal.Cells[row, col]);
range.Value2 =data.Replace(",", ".");
range.NumberFormat = stringFormat;
}
else
{
range = retVal.get_Range(retVal.Cells[row, col], retVal.Cells[row, col]);
range.Value2 = data;
}
}
}
Thread.CurrentThread.CurrentCulture = oldCulture;
}
public void MergeColumns(int row, int col, int row2, int col2, int mergeColumns, string workSheetName)
{
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
for (int i = 1; i <= workbook.Worksheets.Count; i++)
{
Microsoft.Office.Interop.Excel.Worksheet retVal =
(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[i];
if (retVal.Name.Equals(workSheetName))
{
range = retVal.get_Range(retVal.Cells[row, col], retVal.Cells[row2, col2]);
range.Merge(mergeColumns);
}
}
Thread.CurrentThread.CurrentCulture = oldCulture;
}
public void EditCell(int row, int col, string color, bool isBold, int size, string workSheetName)
{
CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
for (int i = 1; i <= workbook.Worksheets.Count; i++)
{
Microsoft.Office.Interop.Excel.Worksheet retVal =
(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[i];
if (retVal.Name.Equals(workSheetName))
{
range = retVal.get_Range(retVal.Cells[row, col], retVal.Cells[row, col]);
switch (color)
{
case "ORANGE":
range.Interior.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Orange);
break;
case "KHAKI":
range.Interior.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Khaki);
break;
case "BURLYWOOD":
range.Interior.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.BurlyWood);
break;
case "SKYBLUE":
range.Interior.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SkyBlue);
break;
case "GAINSBORO":
range.Interior.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Gainsboro);
break;
case "WHITESMOKE":
range.Interior.Color =
System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.WhiteSmoke);
break;
default:
// workSheet_range.Interior.Color = System.Drawing.Color..ToArgb();
break;
}
range.Font.Bold = isBold;
range.ColumnWidth = size;
}
}
Thread.CurrentThread.CurrentCulture = oldCulture;
}
internal void Dispose()
{
if (app != null)
{
app.Quit();
}
app = null;
workbook = null;
worksheet = null;
range = null;
}
}
Kullanmadan önce projemize interop excell referansını vermeniz gerekir.
using System.Globalization;
using System.Threading;
Bu işlemlerden sonra sınıfımız kullanmaya hazırdır. Kullanımı için basit bir örnek verecek olursam.
excellApp.CreateExcelDocument();
excellApp.CreateWorkSheet("Deneme Work Sheet");
excellApp.WriteData(1, 1, "Emrah", "", "Deneme Work Sheet");
excellApp.MergeColumns(1, 1, 1, 2, 2, "Deneme Work Sheet");
excellApp.EditCell(1, 1, "ORANGE", true, 7, "Deneme Work Sheet");
excellApp.Save(@"C:\deneme");
Bu kod yardımıyla C: \ dizini altında deneme excell dosyası oluşur. Sonucunda deneme dosyasının içerisinde şunu görürsünüz.
10 Ağustos 2010 Salı
MsSql’de Bir Tablodan Başka Bir Tabloya Veri Kopyalamak
Bu manuel olarak yapılmaya kalkışıldığında eziyet çekmeniz içten değildir. Bu durumda hemen Sql de bir query aracılığıyla işlemimizi gerçekleştirebiliriz.
INSERT INTO TabloAdı(ad, soyad)
SELECT Ad, Soyad
FROM TabloAdı
WHERE Id = 4
Bu şekilde basit bir sorgu ile işlemimiz gerçekleşir. Eğer Farklı database tablolarında aynı işlemi yaparsak Linked Server kullanarak tabloların başına sadece varsa ip ve db adını yazarak işleminizi gerçekleştirebilirsiniz.
27 Haziran 2010 Pazar
Cannot start Microsoft Office Outlook. Cannot open the Outlook window.
Sorunu şu şekilde çözdüm.
Başlat –> Çalıştır
C:\Program Files (x86)\Microsoft Office\Office12\outlook.exe /resetnavpane
İşletim sistemim win-7 64 bit bunu söylemektede yarar var.
25 Haziran 2010 Cuma
Hata Yakalama (Exception Handling) – Hata Sınıfı Oluştumak
Bir önceki makalemizde kullandığımız hata sınıflarının tümü Exception sınıfına aitti. Programcılar bazı durumlarda kendi hata sınıfını oluşturmak isteyebilir. Kendi hata sınıfınızı hazırlarken hazırlayacağınız sınıf Exception ve ApplicationException sınıflarının mirasçısı olmalıdır. Aşağıda basit bir Exception sınıfı oluşturuyorum.
public class MyExceptionClass : Exception
{
public MyExceptionClass()
{
}
}
Oluşturduğum bu sınıfın metodu herhangi bir satıra ve parametreye sahip değil. Bu şekilde oluşturduğumuz Exception sınıfını herhangi bir uygulamada kullanabiliriz. Şimdi sınıfımız test edelim. Bunun için formuma bir buton koyuyorum. Click olayında 2 sayının birbirine eşit olup olmadığını kontrol edecek. Eğer sayılar birbirine eşit değilse Exception fırlatmasını istiyorum.
try
{
int a = 3;
int b = 5;
if (a == b )
{
MessageBox.Show("Ok");
}
else
{
throw new MyExceptionClass();
}
}
catch (MyExceptionClass ex )
{
MessageBox.Show(ex.Message);
}
throw keywordunu kullanarak programda bir hata olduğunu ve işlemin catch bloğuna düşmesini sağladım. Catch bloğunda ise hazırladığım exception nesnesinin orjinal mesajını kullanıcıya yansıttım.
Eğer kullanıcıya kendi hazırladığımız hata mesajını göstermek istersek MyExceptionClass sınıfında ki metodumuzun string bir değer alarak bunu kullancıya göstermesini sağlayabiliriz.
private string errorMessage;
public MyExceptionClass(string errorMessage): base(errorMessage)
{
this.errorMessage = errorMessage;
}
Sıfımızı bu şekilde güncelledikten sonra örneğimizi güncelleyerek sonucu görelim.
try
{
int a = 3;
int b = 5;
if (a == b)
{
MessageBox.Show("Ok");
}
else
{
throw new MyExceptionClass("Sayılar birbirine eşit değil");
}
}
catch (MyExceptionClass ex)
{
MessageBox.Show(ex.Message);
}
Bu şekilde kendi exception sınıfımızı üretebilir. Daha da detaylandırabiliriz. Önemli olan sınıfımızda doğru parametreler kullanarak sınıfımızı özelleştirmekten ibaret olacaktır.
Umarım yararlı olmuştur.
22 Haziran 2010 Salı
Hata Yakalama(Exception Handling)
Merhaba bu yazımızda hata yakalama konusu üzerinde duracağız. Geliştirme yaparken farkında olmadan bir çok mantıksal hata yapabilir, run-time’da bu hataların acısını çekerek programınızın sonlandırılmasını izleyebilirsiniz. İşte hata yakalama, run- time’da oluşan ve programızın sonlandırılmasına neden olan hataları yakalamamızı sağlayan ve bu hataların yönetilebilir bir duruma getiren mekanizmadır.
Bazı hataları öngörebilir, bu hatalara gerekli önlemleri siz kod yazarken alabilirsiniz. Peki öngöremediğiniz hatalarda ne olacak? Bu durumda .Net hata yakalama mekanizması devreye giriyor.
Hata yakalama mekanizması nasıl çalışır?
Aslına bakacak olursak .Net için tüm hatalar bir nesnedir. Oluşan tüm hatalar System.Exception sınıfından türemektedir.Eğer sizin yakalayamadığınız bir hata oluşursa Common Language Runtime bunu yakalar ve programınızın sonlanmasına sebep olur.
Oluşan bu hata nesnelerini nasıl yakalayıp, nasıl yöneteceğiz?
Hata yakalama ve yönetme işlemini aşağıdaki kod bloğunu yazarak gerçekleştireceğiz.
try
{
//Hata oluşabilecek hata kosu bu bloğa yazılır
}
catch
{
//Hata oluşursa bu blok devreğe girer hatayı yakalar ve işler.
}
finally
{
//Hata oluşssada, oluşmasada çalışması istediğimiz bir kod varsa bu bloğa yazılır.
}
Bunu bir örnek ile açıklayacak olursak.
try
{
List<int> numbers = new List<int>();
for (int i = 0; i < 10; i++)
{
numbers.Add(i);
}
MessageBox.Show(numbers[15].ToString());
}
catch (Exception ex)
{
MessageBox.Show("Hata Mesajı: " + ex.Message);
MessageBox.Show("Hatanın oluştuğu kısım: " + ex.StackTrace );
}
finally
{
Application.Exit();
}
Bu örneğimizde bir sayı koleksiyon oluşduk. Bu sayı koleksiyona ona kadar olan sayıları ekledik. Ama indexi 15 olan bir sayıyı mesaj kutusunda göstermek istedik. Dolayısıyla bu kod parçası hataya düşecektir. catch bloğunda tanımlanan ex Exception nesnesine ait property olan Message bize bu hatayı bir mesaj kutusunda gösterecek, diğer bir property olan StackTrace bize bu hatanın oluştuğu adımı başka bir mesaj kutusunda gösterecek finally bloğunda yer alan Application.Exit() kodu programımızı sonlandıracaktır.
Hata Mesajı:
Hatanın oluştuğu kısım:
finally bloğunda yapabileceğiniz durum kodun davranışına göre değişebilir. Örneğin try bloğu içerisinde bir sql bağlantısı oluşturdunuz ve açtınız. bağlantıyı kapattığınız satıra daha gelmeden bir hataya düşerek catch bloğuna düştünüz. Dolayısıyla bağlantınız açık kaldı. Finally bloğunda bu bağlantıyı kapatabilirsiniz.
Birden fazla catch bloğu kullanmak
try
{
List<int> numbers = new List<int>();
for (int i = 0; i < 10; i++)
{
numbers.Add(i);
}
numbers = null;
MessageBox.Show(numbers[15].ToString());
}
catch (NullReferenceException ex)
{
MessageBox.Show("Hata Mesajı: " + ex.Message);
MessageBox.Show("Hatanın oluştuğu kısım: " + ex.StackTrace);
}
catch (Exception ex)
{
MessageBox.Show("Hata Mesajı: " + ex.Message);
MessageBox.Show("Hatanın oluştuğu kısım: " + ex.StackTrace);
}
finally
{
Application.Exit();
}
Bu kodda bir catch bloğu ekleyerek ex NullReferenceException nesnesi yardımıyla boş değerden kaynaklanan işlem hatalarını yakalamaya çalışacağız. Bir önceki örneğimizde kullandığım numbers koleksiyonuna boş değer set ederek boş bir koleksiyonun indeksine ulaşmayı istemek bana bu hata mesajını döndürecektir.
Hata Mesajı:
Hatanın oluştuğu kısım:
Birden fazla catch bloğu kullandığımız zaman catch blokları sırası ile değerlendirilir. Oluşan hata ilk hangi bloğa uyuyorsa o blokta çalıştırılır ve diğer bloklar dikkate alınmaz. Bu nedenle catch bloklarımız oluştururken tüme varım ilkesiyle hareket etmemiz daha iyi olacaktır. Yani özelden genele doğru bir hata yakalama işlemi yapmamız gerekmektedir. Aynı yukarıdaki örnek gibi.
Bir sonraki makalemde kendi hata sınıflarımızı yaratarak kullanacağız.
İyi çalışmalar.
25 Mart 2010 Perşembe
C# ile geçerli E-Mail adres kontrolü
Bunun için gerekli olan using ifademiz System.Text.RegularExpressions;
private const string MatchEmailPattern =
@"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@"
+ @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?
[0-9]{1,2}|25[0-5]|2[0-4][0-9])\."
+ @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?
[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
+ @"([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$";
Karakter ve format kontrolünü sabit bir string değişkenime atadım.
private string mail = emraheroglu@msn.com;
Sonra mail adresimi aynı şekilde bir string değişkene atadım.Son olarak buttonun Click eventine şu kodu yazın size dönen değere göre olumlu veya olumsuz mesaj kutuları alıcaksınız.
private void button1_Click(object sender, EventArgs e)
{
bool retVal = false;
retVal = Regex.IsMatch(mail, MatchEmailPattern);
if (retVal)
{
MessageBox.Show("OK");
}
else
{
MessageBox.Show("FAIL");
}
}
Uygulama Sonucu;
Eğer mail adresimizi şu şekilde tanımlamış olsaydık.
private string mail = “emraheroglu@msn”;
sonuç false dönerek “FAIL” mesajımızı görecektik. Şimdilik bu kadar.Hoşçakalın..
24 Mart 2010 Çarşamba
“Syntax error: Missing operand after 's' operator.” hatası, nedeni ve çözümü
Bu hata bir DataTable nesnesi içerisinde filtreleme yaparak DataRow Array’i elde ederken yazılan söz diziminden kaynaklanıyor. rowFilter işlemide diyebiliriz. Özel bir karakter olan “ ‘ “ karakteri ( Apostrophe, Iyelik durumu, kesme işareti ) koşul içerisindeyse bu hatayı alabilirsiniz.
Örneğin,
DataRow[] rowList = resultDt.Select(string.Format(" [{0}] = '{1}'",resultDt.Columns["Company"],"Dyn's"));
Kod parçasında Company alanında "Dyn's" bulunanları ararken "Dyn's" içerinde ki kesme işareti bize sorun yaşatır.
Çözüm,
Replace() metodunu kullanmanız yeterli olacaktır. “ ‘ ” yerine “ ’ ’ ” ,yani kesme işareti yerine 2 tane kesme işareti kullanmak yeterlidir.
DataRow[] rowList = resultDt.Select(string.Format(" [{0}] = '{1}'",resultDt.Columns["Company"],"Dyn's".Replace("'","''")));
Kolay gelsin..
C# ile pasta tablosu oluşturma (draw pie chart)
Kod kısmına geçebiliriz.
İlk öncelikle formun load eventinde pasta dilimimizde hangi dilimlerin hangi öğrenci grubunu temsil ettiğini anlmak için textboxların arka plan rengi değiştiriyorum.
private void Form1_Load(object sender, EventArgs e)
{
textBox1.BackColor = Color.Red;
textBox2.BackColor = Color.Blue;
textBox3.BackColor = Color.Yellow;
textBox4.BackColor = Color.Green;
textBox5.BackColor = Color.Orange;
}
Daha sonra Tamam butonunun click eventinde textboxlardan sayısal değerleri alarak bunları pasta diliminde yorumlanabilir bir şekle getiriyoruz.
int not1= 0;
int not2 = 0;
int not3 = 0;
int not4 = 0;
int not5 = 0;
try
{
not1 = int.Parse(textBox1.Text);
not2 = int.Parse(textBox2.Text);
not3 = int.Parse(textBox3.Text);
not4 = int.Parse(textBox4.Text);
not5 = int.Parse(textBox5.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
float total = not1 + not2 + not3 + not4 + not5;
float deg1 = (not1 / total) * 360;
float deg2 = (not2 / total) * 360;
float deg3 = (not3 / total) * 360;
float deg4 = (not4 / total) * 360;
float deg5 = (not5 / total) * 360;
Yukarıda ki kod parçaşıyla notu 1,2,3,4,5 olan tüm öğrencileri buluyorum. Elde ettiğim sonucu total değişkenine atıyorum. Sonra 1 alan öğrencilerin sınıfın kaçta kaçını oluşturduğunu bularak 360 ile çarparak dilimdeki payını (açısal) hesaplıyor ve bir değişkene aktarıyorum. Bunu farklı not alan öğrenciler içinde uyguluyorum.
Şimdi pastamızı oluşturmaya başlıyoruz.
Pen p = new Pen(Color.Black, 1);
Graphics g = this.CreateGraphics();
Rectangle rec = new Rectangle(textBox1.Location.X + textBox1.Size.Width + 10, 12, 150, 150);
Brush b1 = new SolidBrush(Color.Red);
Brush b2 = new SolidBrush(Color.Blue);
Brush b3 = new SolidBrush(Color.Yellow);
Brush b4 = new SolidBrush(Color.Green);
Brush b5 = new SolidBrush(Color.Orange);
g.Clear(Form1.DefaultBackColor);
g.DrawPie(p, rec, 0, deg1);
g.FillPie(b1, rec, 0, deg1);
g.DrawPie(p, rec, deg1, deg2);
g.FillPie(b2, rec, deg1, deg2);
g.DrawPie(p, rec, deg2 + deg1, deg3);
g.FillPie(b3, rec, deg2 + deg1, deg3);
g.DrawPie(p, rec, deg3 + deg2 + deg1, deg4);
g.FillPie(b4, rec, deg3 + deg2 + deg1, deg4);
g.DrawPie(p, rec, deg4 + deg3 + deg2 + deg1, deg5);
g.FillPie(b5, rec, deg4 + deg3 + deg2 + deg1, deg5);
İlk önce pasta dilimlerini birbirinden ayıran çizgimizi Pen ile rengi siyah ve kalınlığı 1 px olacak şekilde oluşturduk.Graphics ise çizimi oluşturacak metodları içerir. Rectangle, pasta tablomuzun formun hangi koordinatlarda ve hangi büyüklükte olucağını belirler. Bizim örneğimizde x koordinatı “textBox1.Location.X + textBox1.Size.Width + 10” olarak ayarlanmıştır. Böylece grafiğimizin textboxların yanında çıkmasını sağladık. Daha sonra Brush yardımıyla pasta dilimlerimizi renklendirmede kullanacağımız renkleri Brush tipindeki değişkenlere aktardık.
Graphics’in bize sunduğu metodlardan biri olan g.Clear() metoduyla grafiğimizi işlemlere başlamadan siliyoruz. Burada gördüğümüz ikinci metod olan g.DrawPie() ile ilk pasta dilimimizi oluşturuyoruz. Bu metodun içerisine oluşturduğumuz pen tipindeki değişkenimiz olan p yi, rectangle tipindeki değişkeninimizi, çizime başlıyacağı başlangıç açısını ve son olarak oluşturacağımız pasta açısını veriyoruz. g.FillPie() metoduyla ile farklı olarak sadece Brush ile pasta dilimimize renk veriyoruz. Ama dikkat edilmesi gereken şey g.DrawPie ve g.FillPie metodlarında başlangıç açısı “0” ile başlar ve oluşturulan herbir dilim kendinden önceki dilim ve dilimlerin açısının toplamı, başlangıç açısını oluşturur.
Programımızı artık deneyebiliriz.
Umarım yararlı olmuştur.
13 Mart 2010 Cumartesi
"Cannot serialize the DataTable. DataTable name is not set." hatası
DataTable dt= new DataTable();
dt.TableName="DataTableIsmi";
ile sorun çözülür
23 Ocak 2010 Cumartesi
C# ve Enumeration (Enum) Kullanımı
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
MessageBox.Show(day.ToString());
{
Monday,
Tuesday = 1,
Wednesday = 3,
Thursday,
Friday,
Saturday,
Sunday
}
{
Spring,
Summer,
Fall = Autumn,
Winter
}
string[] days = Enum.GetNames(typeof(DaysOfTheWeek));
{
daysCombo.Item.Add(day);
}
Artık daysCombo adındaki combobox’ta sırasıyla DayOfTheWeek’teki sabitlerimiz eklenmiş durumda.
Birde şunu anlatmanın yararlı olacağını düşünüyorum. DaysOfTheWeek sabitlerinin içerisinde bir kontrol yaparak istediğimiz sabitin enum altında tanımlı olan bir sabit olup, olmadığını görmek için IsDefined(); metodunu kullanmamız yeterli olacaktır. Bu metod bool bir sonuç gönderir. Dikkat etmemiz gereken şey ise case sensitive çalışmasıdır.
bool success = Enum.IsDefined(typeof(DaysOfTheWeek), “Thursday”);
{
MessageBox.Show(“Found”);
}
else
{
MessageBox.Show(“Not Found”);
}
Burada hemen parametre değerlerini ve işlevlerini açıklamak ve nasıl kullanıcalağını göstermenin yeterli olacağını düşünüyorum.
Parametre Değeri | İşlevi |
G | Enum sabiti içerisindeki ilgili değeri genel(General) formatta yazar. |
D | Enum sabiti içerisindeki ilgili değerin sayısal(Decimal) karşılığını yazar. |
X | Enum sabiti içerisindeki ilgili değerin Hexadecimal (16lı sayı sistemindeki) karşılığını yazar. |
F | FlagsAttribute’ unun kullanılıp kullanılmamasına göre ilgili enum sabiti değerinin string karşılığını yazar. |