Altbilgi içeriğine atla
.NET YARDıM

.NET Yazılım Geliştirme (Geliştiriciler için Nasıl Çalışır)

.NET Framework yazılım geliştirme, Microsoft tarafından desteklenen güçlü ve çok yönlü bir çerçeveyi temsil eder; bu çerçeve, .NET geliştiricilerin çeşitli platformlar, işletim sistemleri ve cihazlarda kapsamlı, yüksek kaliteli uygulamalar oluşturmasına olanak tanır. Bu yazılım geliştirme çerçevesi, yazılım geliştiricilerin .NET platformunda verimli bir şekilde web, masaüstü ve mobil uygulamalar oluşturabilmesi için araçlar, kütüphaneler ve API'ler sağlayarak geniş kapsamlı olacak şekilde tasarlanmıştır.

C#, Visual Basic ve F# dahil olmak üzere çeşitli programlama dillerinin desteğiyle, .NET geliştirme, geliştiricilere esneklik sağlamakta, böylece tercih ettikleri dilde çalışırken .NET Core ekosisteminin zengin özelliklerinden faydalanmalarını garanti etmektedir. Bu eğitimde, IronPDF'nin .NET geliştirmeyi nasıl geliştirdiğini ve gerçek dünya problemlerini çözmek için nasıl kullanıldığını göreceğiz.

.NET Yazılım Geliştirme Ekosistemini Anlamak

.NET ekosistemi, .NET Uygulamasının anahtar bir parçası olarak farklı işletim sistemlerinde uygulama geliştirmeyi kolaylaştırmak amacıyla tasarlanmış çeşitli bileşenler ve teknolojileri içeren geniş kapsamlı bir platformdur. .NET Framework ve .NET Core, kodun yürütülmesini yöneten ve bellek yönetimi, tür güvenliği, istisna işleme gibi hizmetler sunan ortak dil çalışma zamanı (CLR) sağlayarak .NET uygulamaları için birincil motorlar olarak hizmet eder.

Ortak Dil Çalışma Zamanı (CLR)

CLR, farklı işletim sistemlerinde .NET kodunun yürütülmesini sağlayan .NET mimarisinin hayati bir unsurudur. Bu ünite, Genel Ara Dil'i (CIL) ana makinenin doğrudan çalıştırabileceği yerel makine koduna derler. Bu süreç, .NET uygulamalarının başlıca mobil işletim sistemlerinden Windows web sunucularına kadar çeşitli platformlarda sorunsuz çalışmasını sağlar.

Çapraz Platform Çerçevesi

.NET Core, Linux, macOS ve Windows üzerinde .NET uygulamalarının çalışmasına izin veren bir çapraz platform çerçevesi olarak öne çıkar. Bu uyarlanabilirlik, geliştiricilerin farklı cihazlar ve platformlar üzerinde daha geniş bir kitleye ulaşmalarını hedefleyen .NET'i cazip bir seçim haline getirir. .NET Core ile, uygulamalar herhangi bir desteklenen işletim sistemi üzerinde geliştirilebilir ve dağıtılabilir, bu da .NET yazılım geliştirmesinin erişim alanını ve esnekliğini artırır ve geniş .NET Topluluğu tarafından desteklenir.

Entegre Geliştirme Ortamı (IDE)

Visual Studio, .NET geliştirme için önde gelen entegre geliştirme ortamı (IDE) olarak öne çıkıyor. Kod yazma, hata ayıklama ve .NET uygulamalarını dağıtma için güçlü araçlar sunar. Visual Studio, çeşitli programlama dillerini destekler ve web, masaüstü ve mobil uygulamalar oluşturmak için geniş bir özellik yelpazesi sunar, bu da onu .NET geliştiricileri için vazgeçilmez bir araç haline getirir.

.NET ile Uygulama Oluşturma

.NET platformunda uygulama oluşturmak, Visual Basic gibi çerçevenin sunduğu geniş araçlar, kütüphaneler ve programlama dillerinden yararlanmayı içerir ve kapsamlı ekosistemini gösterir. Bu çok yönlülük, yazılım geliştiricilerin .NET uygulamaları, web ve masaüstü uygulamalarından bulut tabanlı ve mobil çözümlere kadar çeşitli türlerde uygulamalar oluşturmasına olanak tanır.

ASP.NET ile Web Geliştirme

.NET çerçevesinin önemli bir parçası olan ASP.NET, dinamik web sayfaları ve uygulamaları oluşturmaya özel olarak tasarlanmıştır. Geliştiricilerin, büyük miktarda trafikle başa çıkabilecek duyarlı ve ölçeklenebilir web uygulamaları oluşturmasını mümkün kılar. Açık kaynaklı ASP.NET sürümü olan ASP.NET Core, çapraz platform web uygulamaları oluşturmak için ek özellikler sunar; bu, web uygulamalarını Windows, Linux ve macOS üzerinde geliştirip dağıtmayı mümkün kılar.

Masaüstü Uygulama Geliştirme

.NET, masaüstü uygulamalar oluşturmak için iki ana yaklaşım sunar: Windows Forms ve Windows Presentation Foundation (WPF). Windows Forms, zengin grafiksel kullanıcı arayüzü ile masaüstü uygulamaları oluşturmanın basit bir yolunu sunarken, WPF, gelişmiş grafikler ve animasyonlarla görsel olarak çekici kullanıcı arayüzleri geliştirmeyi sağlamak için XAML (Genişletilebilir Uygulama İşaretleme Dili) kullanır.

Mobil Uygulama Geliştirme

Mobil geliştirme için, .NET, Xamarin çerçevesi aracılığıyla başlıca mobil işletim sistemlerine erişimini genişletir ve şimdi .NET MAUI (Çoklu platform Uygulama UI) olarak .NET'e entegre edilmiştir. Bu yaklaşım, geliştiricilerin iOS, Android ve Windows üzerinde kodları yeniden kullanmalarını sağlar, yerel performans ve kullanıcı deneyimi sunan mobil uygulamalar oluşturma sürecini basitleştirir.

Bulut ve Mikro hizmetler

.NET, bulutta çalışan uygulamalar geliştirmek için de oldukça uygun bir seçenektir. Azure ve diğer bulut platformları desteği ile, geliştiriciler bulut bilişim kaynaklarından yararlanarak ölçeklenebilir, dağıtılmış uygulamalar oluşturabilir. ASP.NET Core, bulut ortamlarında ölçeklenebilir hafif, modüler ve bağımsız dağıtılabilir hizmetler sunarak mikro hizmetler geliştirmede önemli bir rol oynar.

Makine Öğrenimi ve Yapay Zeka

.NET ekosisteminde yer alan ML.NET, geliştiricilerin özel makine öğrenme modellerini .NET uygulamalarına entegre etmesine olanak tanıyan bir makine öğrenimi çerçevesidir. Bu entegrasyon, .NET çerçevesi içinde yapay zekanın gücünden yararlanarak öngörücü analizler, doğal dil işleme ve daha fazlasını mümkün kılacak şekilde zeki uygulamalar oluşturma olasılıklarını açar.

IronPDF ile .NET Yazılım Geliştirmeyi İyileştirme

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF

.NET yazılım geliştirme ekosisteminin hareketli yapısında, uygulamalar içerisinde doğrudan PDF belgeleri oluşturma, manipüle etme ve yönetme yeteneği önemli bir avantaj sağlar. .NET geliştiricileri için tasarlanmış güçlü bir kütüphane olan IronPDF, bu ortama sorunsuz bir şekilde entegre olur, Windows Forms ile oluşturulmuş olanlar da dahil olmak üzere .NET uygulamalarından PDF'ler yaratmanın verimli bir yolunu sunar.

IronPDF'nin .NET Uygulamalarındaki Rolü

IronPDF, HTML, resimler, metin ve hatta ASP.NET web sayfalarından PDF belgeleri oluşturmak için geliştiricilere sezgisel bir API sağlayarak .NET ekosisteminin esnekliği ve gücüne tanıklık eder. Bu yetenek, masaüstü uygulamalarında faturalar, raporlar veya kişiselleştirilmiş belgeler oluşturmak gibi dinamik belge oluşturma gerektiren senaryolarda özellikle faydalıdır.

IronPDF ile Windows Form Fatura Üretici İnşası

Fatura oluşturmak için bir Windows Form uygulaması, IronPDF ile birleşen .NET yazılım geliştirmesinin pratik uygulamasını örneklendirir. Bu uygulama, kullanıcıların müşteri bilgileri, satın alınan ürünler ve fiyatlar gibi detayları girmesine olanak tanır ve ardından tek bir tıklama ile profesyonel bir PDF fatura oluşturur.

Windows Forms Projenizi Ayarlama ve UI Tasarlama

Visual Studio'da yeni bir Windows Forms projesi oluşturarak başlayın. Bu, fatura üreticinizin kullanıcı arayüzünü oluşturacağınız temelinizdir. Formunuzu, müşteri ve ürün detayları için gerekli giriş alanlarını ve PDF üretimi için bir düğme içerecek şekilde tasarlayın. İşte fatura üreticimiz kullanıcı arayüzü:

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - Fatura Üretici Windows Form Çıktısı

Windows Forms uygulamasının kullanıcı arayüzü, kullanımı kolay ve işlevsel olacak şekilde titizlikle tasarlanmıştır. Ana pencere, "Fatura Üretici" başlıklı olup, sorunsuz bir kullanıcı deneyimi sunmak üzere farklı bölümlere ayrılmıştır.

Müşteri Bilgileri Bölümü

Formun en üstünde, 'Müşteri Adı', 'Müşteri Adresi', 'Müşteri E-postası' ve 'Müşteri Telefon Numarası' alanları bulunur. Bu alan, oluşturulacak faturada belirgin bir şekilde yer alacak olan temel müşteri detaylarını yakalamak için ayrılmıştır.

Fatura Ürünlerini Ekleme

Müşteri bilgilerinin hemen altında, 'Fatura Ürünü Ekle' etiketli bir alan bulunur. Burada, kullanıcılar 'Ürün ID'si', 'Açıklama', 'Miktar' ve 'Birim Fiyatı' gibi bireysel ürünlerin detaylarını girebilirler. Bu alanların yanında yer alan bir 'Ürün Ekle' düğmesi, kullanıcıların girilen ürünü faturanın altındaki listeye eklemelerine olanak tanır.

Fatura Ürünleri Listesi

Formun merkezi bölümü, eklenen ürünlerin göründüğü 'Fatura Bilgileri' bölümünü içeren bir tabloyu görüntüler. Tablo sütunları 'Ürün ID'si', 'Açıklama', 'Miktar', 'Birim Fiyatı' ve 'Toplam Fiyatı' içerir; son sütun miktar ve birim fiyatına göre otomatik olarak hesaplanır. 'Tarih Seç' başlıklı bir tarih seçici, kullanıcının fatura tarihini belirtmesine izin vererek belgenin doğruluğunu artırır.

Fatura İşlemleri

Formun alt kısmında, ürünler eklendikçe veya çıkarıldıkça dinamik olarak güncellenen 'Toplam Tutar' etiketini gösteren bir alan bulunur. Bu, kullanıcıların faturanın toplam değerini gerçek zamanlı olarak takip etmelerini sağlar. Ayrıca, 'Faturayı Üret' düğmesi, IronPDF kütüphanesini kullanarak girilen verilere dayalı olarak faturanın PDF versiyonunu oluşturması için uygulamayı tetikler.

Bu kullanıcı arayüzü, yalnızca işlevsel değil, aynı zamanda sezgiseldir ve kullanıcıların uygulama ile zorluk çekmeden etkileşim kurmasını sağlayan kolay bir kullanım eğrisi sunar. Fatura üretimi için gerekli tüm bilgileri sağlarken, veri girişinden PDF oluşturma sürecine kadar net ve basit bir yol sağlamak üzere tasarlanmıştır.

Projenize IronPDF Eklemek

Projeniz kurulduktan sonra, sırada IronPDF'yi devreye almak var. Bu, Visual Studio'nun entegre NuGet paket yöneticisi NuGet vasıtasıyla gerçekleştirilir ve IronPDF'nin projenize zahmetsizce eklenmesini sağlar. Paket Yöneticisi Konsolunda aşağıdaki komutu çalıştırın:

Install-Package IronPdf

Bu komut, IronPDF'yi yükleyecek ve projenizde kullanıma hazır hale getirecektir.

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - IronPDF Kurulumu

Fatura Oluşturmayı Uygulamak

Windows Forms uygulamasının özü, kullanıcı girişini işleyebilmesi, verileri yapılandırılmış bir formatta organize edebilmesi ve somut bir belge üretebilmesidir; bu durumda, PDF formatında bir faturadır. İşlevsellik, uygulamanın kod tabanında bir dizi metodik adım üzerine inşa edilmiştir.

Veri Izgarası Görünümünü Ayarlama

Form başlatıldığında, uygulama fatura ürünlerinin görüntüleneceği veri yapısını kurmak için SetupDataGridViewColumns çağrısı yapar. Ürün ID'si, açıklama, miktar, birim fiyatı ve toplam fiyat için sütunlar oluşturulur, toplam fiyat otomatik olarak hesaplandığından yalnızca okunabilir bir alandır. Ayrıca, silme işlemi yapmak için bir düğme sütunu eklenir, bu da kullanıcının fatura içeriği üzerinde daha fazla kontrol sağlamasına olanak tanır.

private void SetupDataGridViewColumns()
{
    invoiceDataGridView.Columns.Clear(); // Clear existing columns if any
    // Add columns specifying the details to be displayed in the invoice
    invoiceDataGridView.Columns.Add("itemIdColumn", "Item ID");
    invoiceDataGridView.Columns.Add("descriptionColumn", "Description");
    invoiceDataGridView.Columns.Add("quantityColumn", "Quantity");
    invoiceDataGridView.Columns.Add("unitPriceColumn", "Unit Price");
    invoiceDataGridView.Columns.Add("totalPriceColumn", "Total Price");
    // Set the Total Price column to read-only as it will be calculated automatically
    invoiceDataGridView.Columns["totalPriceColumn"].ReadOnly = true;
    // Add a button column for delete action
    DataGridViewButtonColumn deleteButtonColumn = new DataGridViewButtonColumn();
    deleteButtonColumn.HeaderText = "";
    deleteButtonColumn.Name = "deleteButtonColumn";
    deleteButtonColumn.Text = "Delete";
    deleteButtonColumn.UseColumnTextForButtonValue = true; // Set the button text to "Delete"
    // Add the delete button column to the DataGridView
    invoiceDataGridView.Columns.Add(deleteButtonColumn);
}

public Form1()
{
    InitializeComponent();
    SetupDataGridViewColumns();
    // Wire up the CellClick event to a handler to manage deletion of items
    invoiceDataGridView.CellClick += invoiceDataGridView_CellClick;
}

private void invoiceDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // If the clicked cell is part of the button column and not the header row
    if (e.ColumnIndex == invoiceDataGridView.Columns["deleteButtonColumn"].Index && e.RowIndex >= 0)
    {
        // Confirm delete operation
        if (MessageBox.Show("Are you sure you want to delete this item?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            // Remove the row from the DataGridView
            invoiceDataGridView.Rows.RemoveAt(e.RowIndex);
        }
    }
}
private void SetupDataGridViewColumns()
{
    invoiceDataGridView.Columns.Clear(); // Clear existing columns if any
    // Add columns specifying the details to be displayed in the invoice
    invoiceDataGridView.Columns.Add("itemIdColumn", "Item ID");
    invoiceDataGridView.Columns.Add("descriptionColumn", "Description");
    invoiceDataGridView.Columns.Add("quantityColumn", "Quantity");
    invoiceDataGridView.Columns.Add("unitPriceColumn", "Unit Price");
    invoiceDataGridView.Columns.Add("totalPriceColumn", "Total Price");
    // Set the Total Price column to read-only as it will be calculated automatically
    invoiceDataGridView.Columns["totalPriceColumn"].ReadOnly = true;
    // Add a button column for delete action
    DataGridViewButtonColumn deleteButtonColumn = new DataGridViewButtonColumn();
    deleteButtonColumn.HeaderText = "";
    deleteButtonColumn.Name = "deleteButtonColumn";
    deleteButtonColumn.Text = "Delete";
    deleteButtonColumn.UseColumnTextForButtonValue = true; // Set the button text to "Delete"
    // Add the delete button column to the DataGridView
    invoiceDataGridView.Columns.Add(deleteButtonColumn);
}

public Form1()
{
    InitializeComponent();
    SetupDataGridViewColumns();
    // Wire up the CellClick event to a handler to manage deletion of items
    invoiceDataGridView.CellClick += invoiceDataGridView_CellClick;
}

private void invoiceDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // If the clicked cell is part of the button column and not the header row
    if (e.ColumnIndex == invoiceDataGridView.Columns["deleteButtonColumn"].Index && e.RowIndex >= 0)
    {
        // Confirm delete operation
        if (MessageBox.Show("Are you sure you want to delete this item?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        {
            // Remove the row from the DataGridView
            invoiceDataGridView.Rows.RemoveAt(e.RowIndex);
        }
    }
}
Private Sub SetupDataGridViewColumns()
	invoiceDataGridView.Columns.Clear() ' Clear existing columns if any
	' Add columns specifying the details to be displayed in the invoice
	invoiceDataGridView.Columns.Add("itemIdColumn", "Item ID")
	invoiceDataGridView.Columns.Add("descriptionColumn", "Description")
	invoiceDataGridView.Columns.Add("quantityColumn", "Quantity")
	invoiceDataGridView.Columns.Add("unitPriceColumn", "Unit Price")
	invoiceDataGridView.Columns.Add("totalPriceColumn", "Total Price")
	' Set the Total Price column to read-only as it will be calculated automatically
	invoiceDataGridView.Columns("totalPriceColumn").ReadOnly = True
	' Add a button column for delete action
	Dim deleteButtonColumn As New DataGridViewButtonColumn()
	deleteButtonColumn.HeaderText = ""
	deleteButtonColumn.Name = "deleteButtonColumn"
	deleteButtonColumn.Text = "Delete"
	deleteButtonColumn.UseColumnTextForButtonValue = True ' Set the button text to "Delete"
	' Add the delete button column to the DataGridView
	invoiceDataGridView.Columns.Add(deleteButtonColumn)
End Sub

'INSTANT VB WARNING: The following constructor is declared outside of its associated class:
'ORIGINAL LINE: public Form1()
Public Sub New()
	InitializeComponent()
	SetupDataGridViewColumns()
	' Wire up the CellClick event to a handler to manage deletion of items
	AddHandler invoiceDataGridView.CellClick, AddressOf invoiceDataGridView_CellClick
End Sub

Private Sub invoiceDataGridView_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs)
	' If the clicked cell is part of the button column and not the header row
	If e.ColumnIndex = invoiceDataGridView.Columns("deleteButtonColumn").Index AndAlso e.RowIndex >= 0 Then
		' Confirm delete operation
		If MessageBox.Show("Are you sure you want to delete this item?", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
			' Remove the row from the DataGridView
			invoiceDataGridView.Rows.RemoveAt(e.RowIndex)
		End If
	End If
End Sub
$vbLabelText   $csharpLabel

Fatura Ürünlerini Ekleme

Kullanıcı bir ürün için detaylar girip 'Ürün Ekle'ye tıkladığında, btnAddItem_Click olayı giriş verilerini toplar, doğrular ve ardından AddItemToInvoice fonksiyonunu çağırır. Bu metod, girilen değerlerle yeni bir satır ekler, ürün için toplam fiyatı hesaplar ve formun alt kısmında gösterilen toplam fatura tutarını günceller.

public void AddItemToInvoice(string itemId, string description, int quantity, decimal unitPrice)
{
    decimal totalPrice = quantity * unitPrice;
    invoiceDataGridView.Rows.Add(itemId, description, quantity, unitPrice, totalPrice);
}

private void CalculateTotalAmount()
{
    decimal totalAmount = 0m;
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        totalAmount += Convert.ToDecimal(row.Cells["totalPriceColumn"].Value ?? 0);
    }
    // Display the total amount accumulated
    lblTotalAmount.Text = $"{totalAmount:C2}";
}

private void btnAddItem_Click(object sender, EventArgs e)
{
    // Collect data from input controls
    string itemId = txtItemID.Text;
    string description = txtDescription.Text;
    int quantity = (int)numericUpDownQuantity.Value;
    decimal unitPrice;
    // Validate the collected data
    bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
    if (string.IsNullOrEmpty(itemId) || string.IsNullOrEmpty(description) || quantity <= 0 || !isUnitPriceValid || unitPrice <= 0)
    {
        MessageBox.Show("Please enter valid data for all fields.", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }
    // Add data to the DataGridView
    AddItemToInvoice(itemId, description, quantity, unitPrice);
    // Clear the input fields after adding the item to the grid
    txtItemID.Clear();
    txtDescription.Clear();
    txtUnitPrice.Clear();
    numericUpDownQuantity.Value = 0;
    CalculateTotalAmount();
}
public void AddItemToInvoice(string itemId, string description, int quantity, decimal unitPrice)
{
    decimal totalPrice = quantity * unitPrice;
    invoiceDataGridView.Rows.Add(itemId, description, quantity, unitPrice, totalPrice);
}

private void CalculateTotalAmount()
{
    decimal totalAmount = 0m;
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        totalAmount += Convert.ToDecimal(row.Cells["totalPriceColumn"].Value ?? 0);
    }
    // Display the total amount accumulated
    lblTotalAmount.Text = $"{totalAmount:C2}";
}

private void btnAddItem_Click(object sender, EventArgs e)
{
    // Collect data from input controls
    string itemId = txtItemID.Text;
    string description = txtDescription.Text;
    int quantity = (int)numericUpDownQuantity.Value;
    decimal unitPrice;
    // Validate the collected data
    bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
    if (string.IsNullOrEmpty(itemId) || string.IsNullOrEmpty(description) || quantity <= 0 || !isUnitPriceValid || unitPrice <= 0)
    {
        MessageBox.Show("Please enter valid data for all fields.", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }
    // Add data to the DataGridView
    AddItemToInvoice(itemId, description, quantity, unitPrice);
    // Clear the input fields after adding the item to the grid
    txtItemID.Clear();
    txtDescription.Clear();
    txtUnitPrice.Clear();
    numericUpDownQuantity.Value = 0;
    CalculateTotalAmount();
}
Imports System

Public Sub AddItemToInvoice(ByVal itemId As String, ByVal description As String, ByVal quantity As Integer, ByVal unitPrice As Decimal)
	Dim totalPrice As Decimal = quantity * unitPrice
	invoiceDataGridView.Rows.Add(itemId, description, quantity, unitPrice, totalPrice)
End Sub

Private Sub CalculateTotalAmount()
	Dim totalAmount As Decimal = 0D
	For Each row As DataGridViewRow In invoiceDataGridView.Rows
		totalAmount += Convert.ToDecimal(If(row.Cells("totalPriceColumn").Value, 0))
	Next row
	' Display the total amount accumulated
	lblTotalAmount.Text = $"{totalAmount:C2}"
End Sub

Private Sub btnAddItem_Click(ByVal sender As Object, ByVal e As EventArgs)
	' Collect data from input controls
	Dim itemId As String = txtItemID.Text
	Dim description As String = txtDescription.Text
	Dim quantity As Integer = CInt(Math.Truncate(numericUpDownQuantity.Value))
	Dim unitPrice As Decimal = Nothing
	' Validate the collected data
	Dim isUnitPriceValid As Boolean = Decimal.TryParse(txtUnitPrice.Text, unitPrice)
	If String.IsNullOrEmpty(itemId) OrElse String.IsNullOrEmpty(description) OrElse quantity <= 0 OrElse Not isUnitPriceValid OrElse unitPrice <= 0 Then
		MessageBox.Show("Please enter valid data for all fields.", "Invalid Data", MessageBoxButtons.OK, MessageBoxIcon.Warning)
		Return
	End If
	' Add data to the DataGridView
	AddItemToInvoice(itemId, description, quantity, unitPrice)
	' Clear the input fields after adding the item to the grid
	txtItemID.Clear()
	txtDescription.Clear()
	txtUnitPrice.Clear()
	numericUpDownQuantity.Value = 0
	CalculateTotalAmount()
End Sub
$vbLabelText   $csharpLabel

PDF Faturayı Oluşturmak

Kullanıcı 'Faturayı Üret'e tıkladığında, uygulama, bir StringBuilder kullanarak bir HTML dizesi oluşturan btnInvoice_Click olay işleyicisini çalıştırır. Bu dize, müşteri detaylarını ve DataGridView'dan fatura öğeleriyle doldurulan stillendirilmiş bir HTML tablosunu içerir. IronPDF'nin oluşturucu daha sonra bu HTML'yi bir PDF belgesine çevirir, bu da belirli bir yola kaydedilir. Uygulama, kullanıcının başarılı bir şekilde yapılan fatura oluşturumunu bir mesajla teyit eder.

private void btnInvoice_Click(object sender, EventArgs e)
{
    IronPdf.License.LicenseKey = "your-license-key"; // Replace with your IronPDF license key
    var customerName = txtName.Text;
    var customerEmail = txtEmail.Text;
    var customerAddress = txtAddress.Text;
    var customerPhone = txtPhone.Text;
    var htmlStringBuilder = new StringBuilder();
    htmlStringBuilder.Append("<html>");
    htmlStringBuilder.Append("<head>");
    htmlStringBuilder.Append("<title>Invoice</title>");
    htmlStringBuilder.Append(@"
        <style>
            body { font-family: 'Arial', sans-serif; }
            h1 { color: #333; text-align: center; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid #999; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            tr:nth-child(even) { background-color: #f9f9f9; }
            h2 { text-align: right; margin-top: 20px; }
            .customer-info { line-height: 1.6; margin-bottom: 20px; }
            .customer-info p { margin: 0 0 10px 0; color: #333; }
            .customer-info label { font-weight: bold; }
        </style>");
    htmlStringBuilder.Append("</head>");
    htmlStringBuilder.Append("<body>");
    htmlStringBuilder.Append("<h1>Invoice</h1>");
    htmlStringBuilder.Append("<div class='customer-info'>");
    htmlStringBuilder.Append($"<p><strong>Customer Name:</strong> {customerName}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Email:</strong> {customerEmail}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Address:</strong> {customerAddress}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Phone:</strong> {customerPhone}</p>");
    htmlStringBuilder.Append("</div>");
    htmlStringBuilder.Append("<table><tr><th>Item ID</th><th>Description</th><th>Quantity</th><th>Unit Price</th><th>Total Price</th></tr>");
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        if (row.IsNewRow) continue; 
        htmlStringBuilder.Append("<tr>");
        htmlStringBuilder.Append($"<td>{row.Cells["itemIdColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["descriptionColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["quantityColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["unitPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["totalPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append("</tr>");
    }
    htmlStringBuilder.Append("</table>");
    htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
    htmlStringBuilder.Append("</body></html>");
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
    string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf");
    pdfDocument.SaveAs(savePath);
    MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void btnInvoice_Click(object sender, EventArgs e)
{
    IronPdf.License.LicenseKey = "your-license-key"; // Replace with your IronPDF license key
    var customerName = txtName.Text;
    var customerEmail = txtEmail.Text;
    var customerAddress = txtAddress.Text;
    var customerPhone = txtPhone.Text;
    var htmlStringBuilder = new StringBuilder();
    htmlStringBuilder.Append("<html>");
    htmlStringBuilder.Append("<head>");
    htmlStringBuilder.Append("<title>Invoice</title>");
    htmlStringBuilder.Append(@"
        <style>
            body { font-family: 'Arial', sans-serif; }
            h1 { color: #333; text-align: center; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid #999; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            tr:nth-child(even) { background-color: #f9f9f9; }
            h2 { text-align: right; margin-top: 20px; }
            .customer-info { line-height: 1.6; margin-bottom: 20px; }
            .customer-info p { margin: 0 0 10px 0; color: #333; }
            .customer-info label { font-weight: bold; }
        </style>");
    htmlStringBuilder.Append("</head>");
    htmlStringBuilder.Append("<body>");
    htmlStringBuilder.Append("<h1>Invoice</h1>");
    htmlStringBuilder.Append("<div class='customer-info'>");
    htmlStringBuilder.Append($"<p><strong>Customer Name:</strong> {customerName}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Email:</strong> {customerEmail}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Address:</strong> {customerAddress}</p>");
    htmlStringBuilder.Append($"<p><strong>Customer Phone:</strong> {customerPhone}</p>");
    htmlStringBuilder.Append("</div>");
    htmlStringBuilder.Append("<table><tr><th>Item ID</th><th>Description</th><th>Quantity</th><th>Unit Price</th><th>Total Price</th></tr>");
    foreach (DataGridViewRow row in invoiceDataGridView.Rows)
    {
        if (row.IsNewRow) continue; 
        htmlStringBuilder.Append("<tr>");
        htmlStringBuilder.Append($"<td>{row.Cells["itemIdColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["descriptionColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["quantityColumn"].Value}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["unitPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append($"<td>{row.Cells["totalPriceColumn"].Value:C2}</td>");
        htmlStringBuilder.Append("</tr>");
    }
    htmlStringBuilder.Append("</table>");
    htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
    htmlStringBuilder.Append("</body></html>");
    var renderer = new IronPdf.ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
    string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf");
    pdfDocument.SaveAs(savePath);
    MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Private Sub btnInvoice_Click(ByVal sender As Object, ByVal e As EventArgs)
	IronPdf.License.LicenseKey = "your-license-key" ' Replace with your IronPDF license key
	Dim customerName = txtName.Text
	Dim customerEmail = txtEmail.Text
	Dim customerAddress = txtAddress.Text
	Dim customerPhone = txtPhone.Text
	Dim htmlStringBuilder = New StringBuilder()
	htmlStringBuilder.Append("<html>")
	htmlStringBuilder.Append("<head>")
	htmlStringBuilder.Append("<title>Invoice</title>")
	htmlStringBuilder.Append("
        <style>
            body { font-family: 'Arial', sans-serif; }
            h1 { color: #333; text-align: center; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid #999; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            tr:nth-child(even) { background-color: #f9f9f9; }
            h2 { text-align: right; margin-top: 20px; }
            .customer-info { line-height: 1.6; margin-bottom: 20px; }
            .customer-info p { margin: 0 0 10px 0; color: #333; }
            .customer-info label { font-weight: bold; }
        </style>")
	htmlStringBuilder.Append("</head>")
	htmlStringBuilder.Append("<body>")
	htmlStringBuilder.Append("<h1>Invoice</h1>")
	htmlStringBuilder.Append("<div class='customer-info'>")
	htmlStringBuilder.Append($"<p><strong>Customer Name:</strong> {customerName}</p>")
	htmlStringBuilder.Append($"<p><strong>Customer Email:</strong> {customerEmail}</p>")
	htmlStringBuilder.Append($"<p><strong>Customer Address:</strong> {customerAddress}</p>")
	htmlStringBuilder.Append($"<p><strong>Customer Phone:</strong> {customerPhone}</p>")
	htmlStringBuilder.Append("</div>")
	htmlStringBuilder.Append("<table><tr><th>Item ID</th><th>Description</th><th>Quantity</th><th>Unit Price</th><th>Total Price</th></tr>")
	For Each row As DataGridViewRow In invoiceDataGridView.Rows
		If row.IsNewRow Then
			Continue For
		End If
		htmlStringBuilder.Append("<tr>")
		htmlStringBuilder.Append($"<td>{row.Cells("itemIdColumn").Value}</td>")
		htmlStringBuilder.Append($"<td>{row.Cells("descriptionColumn").Value}</td>")
		htmlStringBuilder.Append($"<td>{row.Cells("quantityColumn").Value}</td>")
		htmlStringBuilder.Append($"<td>{row.Cells("unitPriceColumn").Value:C2}</td>")
		htmlStringBuilder.Append($"<td>{row.Cells("totalPriceColumn").Value:C2}</td>")
		htmlStringBuilder.Append("</tr>")
	Next row
	htmlStringBuilder.Append("</table>")
	htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>")
	htmlStringBuilder.Append("</body></html>")
	Dim renderer = New IronPdf.ChromePdfRenderer()
	Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString())
	Dim savePath As String = Path.Combine($"F:\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf")
	pdfDocument.SaveAs(savePath)
	MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
$vbLabelText   $csharpLabel

Uygulamayı Çalıştırma ve Fatura Üretimi

Windows Forms uygulaması geliştirilip IronPDF kütüphanesi ile entegre edildikten sonra, uygulamayı çalıştırmak ve PDF faturalar oluşturmak oldukça basit bir süreçtir. Kullanıcı, uygulamanın kullanıcı arayüzü ile etkileşime girerek verileri girer ve istenilen çıktıyı üretir. İşte süreç genellikle şu şekilde devam eder:

Uygulamayı Başlatma

Uygulamayı, Visual Studio içinde çalıştırarak veya Windows ortamından doğrudan derlenmiş yürütülebilir dosyayı (.exe) çalıştırarak başlatın. Uygulamanın formu, kullanıcı etkileşimine hazır bir şekilde görüntülenir.

Fatura Verilerini Girme

Müşteri detaylarını girin, formun üst kısmında yer alan metin kutularında, müşterinin adı, adresi, e-postası ve telefon numarası dahil. Formun 'Fatura Ürünü Ekle' bölümünde bulunan 'Ürün ID'si', 'Açıklama', 'Miktar' ve 'Birim Fiyatı' alanlarını doldurarak fatura ürünlerini ekleyin.

'Ürün Ekle'ye tıklayın ve ürünü fatura listesine ekleyin. DataGridView yeni ürünü, detaylarını ve hesaplanmış toplam fiyatı gösterecek şekilde güncellenecektir. İhtiyacınız olan tüm ürünleri fatura için eklemek üzere süreci tekrarlayın. 'Toplam Tutar' etiketi, listedeki ürünlerin kümülatif toplamını yansıtacak şekilde dinamik olarak güncellenecektir.

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 4 - Fatura Verileri

PDF Faturayı Oluşturmak

'Fatura Oluştur'a Tıklayın: tüm öğeler eklendiğinde ve müşteri bilgileri tamamlandığında. Uygulama, veriyi CSS ile stillendirilmiş HTML formatına derleyecek. IronPDF, HTML dizesini bir PDF dokümanına dönüştürmek için devralır. Chrome motoru ile işlenmiş olup, modern web standartlarına yüksek uyum sağlar.

Olusan Faturayi Görüntüleme

PDF oluştuktan sonra, uygulama PDF dosyasını belirtilen bir konuma kaydeder; bu genellikle uygulama ile aynı dizinde veya kullanıcı tarafından tanımlanmış bir yoldadır. Bir başarı mesajı kullanıcıya PDF faturasının başarıyla kaydedildiğini bildirmek için görünür. Kullanıcılar daha sonra kaydedilen konuma giderek faturayı görmek veya dağıtmak için ilerleyebilirler.

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 5 - Kaydedilen Fatura Diyaloğu

Çıktı PDF

Çıktı PDF, yukarıda müşterinin bilgilerini, ardından açıklamalar, miktarlar ve fiyatlar dahil satın alınan öğelerin ayrıntılı bir tablosunu göstermektedir. Faturanın toplam tutarı, belgenin sonunda belirtilerek müşterinin ödemesi gereken tutarın açıkça belirtilmesini sağlar. PDF, kod içerisinde tanımlanmış olan CSS kullanılarak temiz ve profesyonel bir tarzda biçimlendirilmiş olup, faturanız sadece işlevsel değil aynı zamanda estetik olarak da hoş görünür.

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 6 - PDF Çıktısı

Windows Forms Projesini Çalıştırılabilir Hale Getirmek

Windows Forms uygulamanızı kapsamlı bir şekilde test ettikten ve veri girişi, PDF oluşturma ve çıktı gibi tüm fonksiyonların hatasız çalıştığından emin olduktan sonra, sonraki aşama projenizin çalıştırılabilir (.exe) bir dosyaya paketlenmesidir. Bu dönüşüm işlemi .NET çerçevesi içerisinde düzenleyici bir şekilde yapılarak uygulamanızın Windows makinelerine yüklenebilir ve kullanılabilir duruma gelmesini sağlar.

Çalıştırılabilir dosya oluşturmak için adım adım yaklaşım:

  1. Uygulamayi Derle: 'Build' menusune gidin ve 'Build Solution'u secin. Bu işlem kodu derler ve gerekli optimizasyonlari yapar.

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 7 - Çözüm İnşası

  1. Calistirilabilir Dosyayi Bul: Derleme tamamlandiktan sonra projenizin dizininde 'bin\Debug\net8.0' klasorune gidin. Burada, uygulamanizi calistirmak icin gereken diğer bagimliliklarla birlikte .exe dosyasini bulacaksiniz.

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 8 - Yürütülebilir Dosya Konumu

  1. Calistirilabilir Dosyayi Test Etme: .exe dosyasini baska bir makinada calistirmaniz, geliştirme ortaminiz disinda dogru calistigini doğrulamak icin iyi bir uygulamadir.
  2. Dağıtim Icin Hazirlama: Ek bagimlililar gerekmiyorsa .exe dosyasini dogrudan paylasabilirsiniz. Ancak, daha profesyonel bir yaklasim icin, Visual Studio'da bir kurulum projesi kullanarak veya Inno Setup ya da WiX Toolset gibi ucuncu taraf kurulum paketiyle bir yukleyici oluşturmayi dusunun. Bir yukleyici, kurulum surecini yonetebilir, kisa yol oluşturabilir ve gerekiyorsa Windows Kayıt Defteri ile kayıt gibi diğer karmasikliklari ele alabilir.

Bu adimlari takip ederek, Windows Forms uygulamaniz tek bir calistirilabilir dosyada yogunlasmis olacak, paylasilmaya ve kullanilmaya hazır. Bu donusum, geliştirme surecinin dorugunu isaret eder, geliştirme makinenizdeki bir projeden genis bir Windows ortaminda etkili bir sekilde dağıtilabilecek ve yuklenebilecek kurulum yazilimina gecisi gerceklestirir.

Sonuç

.NET Yazılım Geliştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 9 - Lisanslama

Sonuc olarak, IronPDF ve .NET Framework kullanarak PDF faturalar oluşturma Windows Forms uygulamasi geliştirmenin yazilim geliştirme prensiplerinin pratik bir uygulamasini temsil eder. Bu proje, .NET ekosisteminin çok yonluluğunu ve gucunu gösterirken, ayni zamanda IronPDF gibi ucuncu taraf kutuphanelerini entegre ederek fonksiyonaliteyi nasıl arttirabileceginizi ve belirli is gereksinimlerini karsilayabileceginizi de demonstr eder.

Kullanıcı arayuzu kurulumundan PDF oluşturma uygulamasini paketlemeye kadar belirtilen adimlari izleyerek, geliştiriciler fonksiyonel ve kullanıcı dostu bir uygulama oluşturabilirler. Bu surec, gerçek hayat problemlerini cozmeye yonelik yenilikci kutuphanelerle birlikte, guclu programlama cercevelerini birlestirmenin onemini vurgular, nihayetinde hem etkili hem de verimli bir ürün teslim eder.

IronPDF, geliştiricilerin özelliklerini kesfetmeleri ve ihtiyaçlarina nasıl en iyi sekilde uydugunu belirleyebilmesi icin PDF oluşturma özellikleri icin ücretsiz bir deneme saglar. Faydalarini deneyimledikten ve IronPDF'u uretim ortaminiza entegre etmeye hazır oldugunuzda, lisanslar uygun fiyat seçenekleriyle başlar.

Sıkça Sorulan Sorular

HTML'yi C#'de PDF'ye nasıl dönüştürebilirim?

HTML dizgilerini PDF'lere dönüştürmek için IronPDF'nin RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca RenderHtmlFileAsPdf kullanarak HTML dosyalarının PDF'lere dönüştürülmesini de sağlayabilirsiniz.

Çapraz platform geliştirme için .NET Core kullanmanın faydaları nelerdir?

.NET Core, birden çok platformda (Linux, macOS ve Windows gibi) uygulamalari çalıştırmaniza olanak tanir. Bu da daha genis bir kitleye tek bir kod tabaniyla ulasmak isteyen geliştiriciler için çok yonlu bir seçim yapar.

Windows Form uygulamasindan nasıl PDF oluşturabilirim?

IronPDF kullanarak, kütüphaneyi projenize entegre edip form verilerini veya HTML icerigini PDF dokümanlarina dönüştüren metodlarini kullarak Windows Form uygulamasindan PDF uretebilirsiniz.

.NET'i web uygulamalari için ideal bir framework yapan nedir?

.NET, özellikle ASP.NET, dinamik ve olceklendirilebilir web uygulamalari geliştirmek için güçlü bir framework saglar. Sunucu tarafli betik yazimi, kimlik doğrulama, veri işlemi ve daha fazlasi için entegre araclar sunar.

.NET uygulamami belge oluşturma yetenekleriyle nasıl geliştirebilirim?

IronPDF gibi bir kütüphaneyi .NET uygulamaniza entegre etmek, PDF dosyalarini doğrudan uygulamaniz icinde oluşturmaniza, değiştirmenize ve yönetmenize olanak tanir, belge oluşturma yeteneklerini önemli olcude geliştirir.

.NET mobil uygulama gelisimi için kullanilabilir mi?

Evet, .NET, Xamarin catisi uzerinden mobil uygulama geliştirmeyi destekler; bu, artik .NET MAUI'nin bir parcasidir. Bu, iOS, Android ve Windows uzerinde yerel performansla capraz platform mobil uygulamalar oluşturulmasini saglar.

.NET'teki Ortak Dil Çalıştırma Ortamı (CLR)'nin önemi nedir?

Ortak Dil Çalıştırma Ortami (CLR), derlenmis kodu yerel makine koduna dönüştürerek, farkli işletim sistemleri arasinda uyumlulugu saglayarak programlarin yurutulmesini yönettigi için .NET'te çok önemlidir.

NuGet kullanarak .NET projemde PDF oluşturma işlemini nasıl entegre edebilirim?

NuGet kullanarak IronPDF gibi bir kütüphaneyi yükleyerek, .NET projenizde PDF oluşturma yetenekleri eklemek kolay ve kullanisli hale gelir; bu da Visual Studio icinde oldukca zahmetsizdir.

Windows Forms kullanarak bir PDF fatura oluşturucu nasıl yaratilir?

Süreç, bir Windows Forms projesi kurmayi, arayuzu tasarlamayi, gerekli kütüphaneleri NuGet uzerinden eklemeyi, veri girisi ve fatura oluşturma için logikleri uygulamayi ve fatura ayrintilarini PDF'e dönüştürmek için IronPDF'i kullanmayi icerir.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara