AIDE .NET

.NET Software Development (How It Works For Developers) (Développement de logiciels .NET (Comment cela fonctionne pour les développeurs))

Publié mars 26, 2024
Partager:

développement de logiciels avec le Framework .NET représente un cadre puissant et polyvalent soutenu par Microsoft qui permet aux développeurs .NET de créer des applications robustes et de haute qualité couvrant diverses plateformes, systèmes d'exploitation et appareils. Ce framework de développement logiciel est conçu pour être complet, fournissant des outils, des bibliothèques et des API que les développeurs de logiciels peuvent utiliser pour créer efficacement des applications web, de bureau et mobiles dans la plateforme .NET.

Grâce à la prise en charge de plusieurs langages de programmation, notamment C#, Visual Basic et F#, le développement .NET étend sa flexibilité aux développeurs, leur garantissant de pouvoir travailler dans leur langage préféré tout en bénéficiant des riches fonctionnalités de l'écosystème .NET Core. Dans ce tutoriel, nous verrons IronPDF en action pour démontrer le développement .NET dans le cadre de la résolution d'un problème réel.

Comprendre l'écosystème du développement logiciel .NET

L'écosystème .NET, une mise en œuvre clé de .NET, est une plateforme large et englobante qui comprend divers composants et technologies conçus pour faciliter le développement d'applications sur différents systèmes d'exploitation. À la base, le .NET Framework et le .NET Core servent de moteurs principaux pour l'exécution des applications .NET, en fournissant un moteur d'exécution de langage commun (CLR) qui gère l'exécution du code et offre des services tels que la gestion de la mémoire, la sécurité des types, la gestion des exceptions, etc.

Le Common Language Runtime (CLR)

Le CLR est un élément crucial de l'architecture .NET, permettant l'exécution du code .NET sur différents systèmes d'exploitation. Il compile le langage intermédiaire commun (CIL) en code machine natif que la machine hôte peut directement exécuter. Ce processus garantit que les applications .NET peuvent fonctionner de manière transparente sur différentes plateformes, des principaux systèmes d'exploitation mobiles aux serveurs web Windows.

Cadre multiplateforme

.NET Core apparaît comme un framework multiplateforme, permettant aux applications .NET de s'exécuter sur Linux, macOS et Windows. Cette adaptabilité fait de .NET un choix intéressant pour les développeurs qui souhaitent toucher un public plus large sur différents appareils et plateformes. Avec .NET Core, les applications peuvent être développées et déployées sur n'importe quel système d'exploitation pris en charge, ce qui renforce la portée et la flexibilité du développement de logiciels .NET, soutenu par la vaste communauté .NET.

Environnement de développement intégré (L'IDE)

Visual Studio est le premier environnement de développement intégré (L'IDE) pour le développement .NET. Il fournit aux développeurs des outils puissants pour l'écriture de code, le débogage et le déploiement d'applications .NET. Visual Studio prend en charge différents langages de programmation et offre un large éventail de fonctionnalités pour la création d'applications web, bureautiques et mobiles, ce qui en fait un outil indispensable pour les développeurs .NET.

Créer des applications avec .NET

La création d'applications sur la plateforme .NET implique de tirer parti d'un large éventail d'outils, de bibliothèques et de langages de programmation offerts par le framework, tels que Visual Basic, qui met en évidence son écosystème complet. Cette polyvalence permet aux développeurs de logiciels de créer différents types d'applications .NET, des applications web et de bureau aux solutions mobiles et basées sur le cloud.

Développement Web avec ASP.NET

ASP.NET, élément clé du Framework .NET, est spécialement conçu pour la création de pages web et d'applications dynamiques. Il permet aux développeurs de créer des applications web réactives et évolutives capables de gérer d'importants volumes de trafic. ASP.NET Core, la version open-source d'ASP.NET, apporte des fonctionnalités supplémentaires pour la création d'applications web multiplateformes, ce qui permet de développer et de déployer des applications web sur Windows, Linux et macOS.

Développement d'applications de bureau

.NET propose deux approches principales pour créer des applications de bureau : Windows Forms et Windows Presentation Foundation (WPF). Windows Forms offre un moyen simple de créer des applications de bureau avec une interface utilisateur graphique riche, tandis que WPF utilise XAML (Langage de balisage d'application extensible) pour permettre le développement d'interfaces utilisateur visuellement attrayantes avec des graphiques et des animations avancés.

Développement d'applications mobiles

Pour le développement mobile, .NET étend sa portée aux principaux systèmes d'exploitation mobiles grâce au framework Xamarin, désormais intégré à .NET sous le nom de .NET MAUI (L'interface utilisateur des applications multiplateformes). Cette approche permet aux développeurs de réutiliser le code entre iOS, Android et Windows, ce qui simplifie le processus de création d'applications mobiles offrant des performances et une expérience utilisateur natives.

Nuage et microservices

.NET est également bien adapté au développement d'applications fonctionnant dans le nuage. Grâce à la prise en charge d'Azure et d'autres plateformes en nuage, les développeurs peuvent créer des applications évolutives et distribuées qui tirent parti des ressources informatiques en nuage. ASP.NET Core joue un rôle important dans le développement de microservices, en offrant des services légers, modulaires et déployables de manière indépendante, qui peuvent évoluer au sein d'environnements cloud.

Apprentissage automatique et IA

L'écosystème .NET englobe ML.NET, un framework d'apprentissage automatique qui permet aux développeurs d'incorporer des modèles d'apprentissage automatique personnalisés dans leurs applications .NET. Cette intégration ouvre des possibilités de création d'applications intelligentes capables d'analyses prédictives, de traitement du langage naturel et bien plus encore, en tirant parti de la puissance de l'IA au sein du Framework .NET.

Améliorer le développement de logiciels .NET avec IronPDF for .NET

développement de logiciels .NET (Comment cela fonctionne-t-il pour les développeurs ?) (Développement de logiciels .NET (Comment cela fonctionne pour les développeurs) : Figure 1 - IronPDF

Dans l'écosystème dynamique du développement de logiciels .NET, la possibilité de générer, de manipuler et de gérer des documents PDF directement dans les applications présente un avantage considérable. IronPDF, une bibliothèque robuste conçue pour les développeurs .NET, s'intègre parfaitement dans cet environnement, offrant un moyen efficace de créer des PDF à partir d'applications .NET, y compris celles construites avec Windows Forms.

Le rôle d'IronPDF pour les applications .NET

IronPDF témoigne de la souplesse et de la puissance de l'écosystème .NET, en fournissant aux développeurs une API intuitive pour générer des documents PDF à partir de HTM L, des images, du texte et même des pages web ASP.NET. Cette capacité est particulièrement utile dans les scénarios nécessitant la création dynamique de documents, tels que la génération de factures, de rapports ou de documents personnalisés dans les applications de bureau.

Création d'un générateur de factures à partir d'un formulaire Windows avec IronPDF

Une application Windows Form de génération de factures illustre l'application pratique du développement de logiciels .NET combiné à IronPDF. Cette application permet aux utilisateurs de saisir des détails tels que les informations sur les clients, les articles achetés et les prix, puis de générer une facture professionnelle au format PDF en un seul clic.

Mise en place du projet Windows Forms et conception de l'interface utilisateur

Commencez par créer un nouveau projet Windows Forms dans Visual Studio. Il s'agit de votre base, où vous concevrez l'interface utilisateur de votre générateur de factures. Concevez votre formulaire de manière à inclure les champs de saisie nécessaires pour les détails relatifs au client et à l'article, ainsi qu'un bouton permettant de générer le PDF. Il s'agit de l'interface utilisateur de notre générateur de factures :

développement de logiciels .NET (Comment ça marche pour les développeurs) : Figure 2 - Sortie du formulaire Windows du générateur de factures

L'interface utilisateur de l'application Windows Forms est méticuleusement conçue pour garantir la facilité d'utilisation et la fonctionnalité. La fenêtre principale, intitulée "Générateur de factures", est divisée en différentes sections pour une expérience utilisateur transparente.

Section d'information des clients

En haut, le formulaire comprend des champs pour le "nom du client", l'"adresse du client", l'"adresse électronique du client" et le "numéro de téléphone du client" Cette zone est consacrée à la saisie des informations essentielles sur le client qui figureront en bonne place sur la facture générée.

Ajout d'éléments de facture

Juste en dessous des informations sur le client, il y a une zone intitulée "Ajouter un article à la facture" Les utilisateurs peuvent y saisir les détails de chaque article, tels que l'"ID de l'article", la "Description", la "Quantité" et le "Prix unitaire" Un bouton "Ajouter un article" se trouve à côté de ces champs, ce qui permet aux utilisateurs d'ajouter l'article saisi à la liste de factures ci-dessous.

Liste des éléments de la facture

La partie centrale du formulaire comporte la section "Informations sur la facture", qui affiche un tableau dans lequel les éléments saisis apparaissent au fur et à mesure qu'ils sont ajoutés. Les colonnes du tableau comprennent "ID de l'article", "Description", "Quantité", "Prix unitaire" et "Prix total", la dernière colonne étant automatiquement calculée sur la base de la quantité et du prix unitaire. Un sélecteur de date intitulé "Select Date" permet à l'utilisateur de spécifier la date de la facture, ce qui renforce la spécificité du document.

Opérations de facturation

Au bas du formulaire, une étiquette affiche le "montant total", qui se met à jour dynamiquement au fur et à mesure que des éléments sont ajoutés ou supprimés. Les utilisateurs disposent ainsi en temps réel du montant total de la facture. En outre, un bouton "Générer une facture" invite l'application à utiliser la bibliothèque IronPDF pour créer une version PDF de la facture sur la base des données saisies.

Cette interface utilisateur est non seulement fonctionnelle mais aussi intuitive, ce qui permet aux utilisateurs d'interagir facilement avec l'application sans avoir à suivre une courbe d'apprentissage abrupte. Il est conçu pour contenir toutes les informations nécessaires à la génération de factures, tout en offrant un chemin clair et direct de la saisie des données à la création du PDF.

Ajouter IronPDF à votre projet

Une fois votre projet mis en place, l'étape suivante consiste à intégrer IronPDF. Cela se fait par le biais de NuGet, le gestionnaire de paquets intégré à Visual Studio, qui vous permet d'ajouter IronPDF à votre projet sans effort. Écrivez la commande suivante et exécutez-la :

Install-Package IronPdf

Cette commande installera IronPDF et sera disponible pour être utilisé dans notre projet.

.NET (Comment ça marche pour les développeurs) : Figure 3 - Installer IronPDF

Mise en œuvre de la génération de factures

Le cœur de l'application Windows Forms est sa capacité à traiter les entrées de l'utilisateur, à organiser les données dans un format structuré et à produire un document tangible - dans ce cas, une facture au format PDF. La fonctionnalité est construite sur une série d'étapes méthodiques dans la base de code de l'application.

Configuration de la grille de données

Lors de l'initialisation du formulaire, l'application appelle SetupDataGridViewColumns pour établir la structure de données dans laquelle les factures seront affichées. Des colonnes sont créées pour l'ID de l'article, la description, la quantité, le prix unitaire et le prix total, le prix total étant un champ en lecture seule car il est calculé automatiquement. En outre, une colonne de boutons permettant de supprimer des éléments a été ajoutée, ce qui renforce le contrôle de l'utilisateur sur le contenu de la facture.

private void SetupDataGridViewColumns()
{
    invoiceDataGridView.Columns.Clear(); // Clear existing columns if any
    // Now add the rest of your columns
    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; // This will 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
    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
    // Now add the rest of your columns
    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; // This will 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
    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
	' Now add the rest of your columns
	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 ' This will 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
	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
VB   C#

Ajout d'éléments de facture

Lorsqu'un utilisateur saisit les détails d'un article et clique sur "Ajouter un article", l'événement btnAddItem_Click recueille les données saisies, les valide, puis appelle AddItemToInvoice. Cette méthode ajoute une nouvelle ligne au DataGridView avec les valeurs saisies, en calculant le prix total de l'article et en mettant à jour le montant total de la facture affiché au bas du formulaire.

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);
     }
     lblTotalAmount.Text = $"{totalAmount:C2}"; // Assuming 'lblTotalAmount' is the name of your Label control
 }
private void btnAddItem_Click(object sender, EventArgs e)
{
    // Assuming your text boxes and numeric up/down controls have the following names:
    // txtItemID, txtDescription, txtUnitPrice, and numericUpDownQuantity
    // Collect data from input controls
    string itemId = txtItemID.Text;
    string description = txtDescription.Text;
    int quantity = (int)numericUpDownQuantity.Value;
    decimal unitPrice;
    // Validate the collected data
    // Check if the unit price is a valid decimal
    bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
    // Additional validation can be implemented as needed
    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);
    // Optionally, clear the input fields after adding the item to the grid
    txtItemID.Clear();
    txtDescription.Clear();
    txtUnitPrice.Clear();
    numericUpDownQuantity.Value = 0; // or numericUpDownQuantity.Minimum if 0 is not allowed
    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);
     }
     lblTotalAmount.Text = $"{totalAmount:C2}"; // Assuming 'lblTotalAmount' is the name of your Label control
 }
private void btnAddItem_Click(object sender, EventArgs e)
{
    // Assuming your text boxes and numeric up/down controls have the following names:
    // txtItemID, txtDescription, txtUnitPrice, and numericUpDownQuantity
    // Collect data from input controls
    string itemId = txtItemID.Text;
    string description = txtDescription.Text;
    int quantity = (int)numericUpDownQuantity.Value;
    decimal unitPrice;
    // Validate the collected data
    // Check if the unit price is a valid decimal
    bool isUnitPriceValid = decimal.TryParse(txtUnitPrice.Text, out unitPrice);
    // Additional validation can be implemented as needed
    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);
    // Optionally, clear the input fields after adding the item to the grid
    txtItemID.Clear();
    txtDescription.Clear();
    txtUnitPrice.Clear();
    numericUpDownQuantity.Value = 0; // or numericUpDownQuantity.Minimum if 0 is not allowed
    CalculateTotalAmount();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Génération de la facture PDF

En cliquant sur "Generate Invoice", l'application exécute le gestionnaire d'événement btnInvoice_Click, où elle construit une chaîne HTML à l'aide d'un StringBuilder. Cette chaîne comprend les coordonnées du client et un tableau HTML stylisé alimenté par les éléments de la facture provenant de la grille de données (DataGridView). Le moteur de rendu d'IronPDF convertit ensuite ce HTML en un document PDF, qui est enregistré dans un chemin d'accès spécifié. L'application confirme la création de la facture en envoyant un message à l'utilisateur.

private void btnInvoice_Click(object sender, EventArgs e)
        {
            IronPdf.License.LicenseKey = "License-Key";
            // Collect customer information
            var customerName = txtName.Text; // Adjusted to your actual TextBox names
            var customerEmail = txtEmail.Text;
            var customerAddress = txtAddress.Text;
            var customerPhone = txtPhone.Text;
            // Start building the HTML content for the invoice
            var htmlStringBuilder = new StringBuilder();
            htmlStringBuilder.Append("<html>");
            htmlStringBuilder.Append("<head>");
            htmlStringBuilder.Append("<title>Invoice</title>");
            // Add some basic CSS styles for the invoice
            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 {
        font-family: 'Helvetica', 'Arial', sans-serif;
        line-height: 1.6;
        margin-bottom: 20px;
    }
    .customer-info p {
        margin: 0 0 10px 0;
        color: #333;
    }
    .customer-info label {
        font-weight: bold;
    }
    </style>");
            // You can add style tags here for styling your PDF content
            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>");
            // Add the invoice items
            htmlStringBuilder.Append("<table border='1'><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; // Skip the new row placeholder
                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>");
            // Add the total amount
            htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
            // Close the HTML string
            htmlStringBuilder.Append("</body></html>");
            // Use IronPDF to convert the HTML string to a PDF document
            var renderer = new IronPdf.ChromePdfRenderer();
            var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
            // Save the PDF to a file
            string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf"); // to avoid file name conflicts and save to desktop
            pdfDocument.SaveAs(savePath);
            // Show a success dialog
            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 = "License-Key";
            // Collect customer information
            var customerName = txtName.Text; // Adjusted to your actual TextBox names
            var customerEmail = txtEmail.Text;
            var customerAddress = txtAddress.Text;
            var customerPhone = txtPhone.Text;
            // Start building the HTML content for the invoice
            var htmlStringBuilder = new StringBuilder();
            htmlStringBuilder.Append("<html>");
            htmlStringBuilder.Append("<head>");
            htmlStringBuilder.Append("<title>Invoice</title>");
            // Add some basic CSS styles for the invoice
            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 {
        font-family: 'Helvetica', 'Arial', sans-serif;
        line-height: 1.6;
        margin-bottom: 20px;
    }
    .customer-info p {
        margin: 0 0 10px 0;
        color: #333;
    }
    .customer-info label {
        font-weight: bold;
    }
    </style>");
            // You can add style tags here for styling your PDF content
            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>");
            // Add the invoice items
            htmlStringBuilder.Append("<table border='1'><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; // Skip the new row placeholder
                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>");
            // Add the total amount
            htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>");
            // Close the HTML string
            htmlStringBuilder.Append("</body></html>");
            // Use IronPDF to convert the HTML string to a PDF document
            var renderer = new IronPdf.ChromePdfRenderer();
            var pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString());
            // Save the PDF to a file
            string savePath = Path.Combine($"F:\\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf"); // to avoid file name conflicts and save to desktop
            pdfDocument.SaveAs(savePath);
            // Show a success dialog
            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 = "License-Key"
			' Collect customer information
			Dim customerName = txtName.Text ' Adjusted to your actual TextBox names
			Dim customerEmail = txtEmail.Text
			Dim customerAddress = txtAddress.Text
			Dim customerPhone = txtPhone.Text
			' Start building the HTML content for the invoice
			Dim htmlStringBuilder = New StringBuilder()
			htmlStringBuilder.Append("<html>")
			htmlStringBuilder.Append("<head>")
			htmlStringBuilder.Append("<title>Invoice</title>")
			' Add some basic CSS styles for the invoice
			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 {
        font-family: 'Helvetica', 'Arial', sans-serif;
        line-height: 1.6;
        margin-bottom: 20px;
    }
    .customer-info p {
        margin: 0 0 10px 0;
        color: #333;
    }
    .customer-info label {
        font-weight: bold;
    }
    </style>")
			' You can add style tags here for styling your PDF content
			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>")
			' Add the invoice items
			htmlStringBuilder.Append("<table border='1'><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 ' Skip the new row placeholder
				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>")
			' Add the total amount
			htmlStringBuilder.Append($"<h2>Total Amount: {lblTotalAmount.Text}</h2>")
			' Close the HTML string
			htmlStringBuilder.Append("</body></html>")
			' Use IronPDF to convert the HTML string to a PDF document
			Dim renderer = New IronPdf.ChromePdfRenderer()
			Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlStringBuilder.ToString())
			' Save the PDF to a file
			Dim savePath As String = Path.Combine($"F:\Invoice_{DateTime.Now:yyyyMMddHHmmss}.pdf") ' to avoid file name conflicts and save to desktop
			pdfDocument.SaveAs(savePath)
			' Show a success dialog
			MessageBox.Show("The invoice has been successfully saved to your desktop.", "Invoice Saved", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
VB   C#

Exécuter l'application et générer des factures

Une fois l'application Windows Forms développée et la bibliothèque IronPDF intégrée, l'exécution de l'application et la génération de factures au format PDF sont des opérations simples. L'utilisateur interagit avec l'interface utilisateur de l'application pour saisir des données et produire le résultat souhaité. Voici comment se déroule généralement le processus :

Lancement de l'application

Démarrer l'application en l'exécutant dans Visual Studio ou en exécutant le fichier exécutable compilé (.exe) directement à partir de l'environnement Windows. L'affichage du formulaire de l'application, prêt à être utilisé par l'utilisateur.

Saisie des données de la facture

Saisissez les coordonnées du client dans les zones de texte prévues à cet effet en haut du formulaire, y compris son nom, son adresse, son adresse électronique et son numéro de téléphone. Ajoutez des éléments de facture en remplissant les champs "ID de l'élément", "Description", "Quantité" et "Prix unitaire" situés dans la section "Ajouter un élément de facture" du formulaire.

Cliquez sur "Ajouter un article " pour inclure l'article dans la liste des factures. Le DataGridView se met à jour et affiche le nouvel article, ses détails et le prix total calculé. Répétez le processus pour ajouter tous les articles nécessaires à la facture. L'étiquette "Montant total" sera dynamiquement mise à jour pour refléter le total cumulé des articles listés.

développement de logiciels .NET (Comment ça marche pour les développeurs) : Figure 4 - Données de la facture

Génération de la facture PDF

Cliquez sur "Générer une facture " une fois que tous les articles ont été ajoutés et que les informations sur le client sont complètes. L'application compilera les données au format HTML, stylisé avec CSS. IronPDF prend le relais pour convertir la chaîne HTML en un document PDF. Il est rendu avec le moteur Chrome, ce qui garantit une grande fidélité aux normes web modernes.

Visualisation de la facture générée

Après la génération du PDF, l'application enregistre le fichier PDF à un emplacement spécifié, souvent dans le même répertoire que l'application ou dans un chemin défini par l'utilisateur. Un message de réussite apparaît pour informer l'utilisateur que la facture PDF a été enregistrée avec succès. Les utilisateurs peuvent ensuite se rendre à l'emplacement sauvegardé pour consulter ou distribuer la facture.

développement de logiciels .NET (Comment cela fonctionne-t-il pour les développeurs ?) (Développement de logiciels .NET (Comment cela fonctionne pour les développeurs) : Figure 5 - Boîte de dialogue Facture enregistrée

Sortie PDF

Le produit PDF affiche les informations du client en haut de page, suivies d'un tableau détaillé des articles achetés, y compris les descriptions, les quantités et les prix. Le montant total de la facture figure à la fin du document, indiquant clairement le montant que le client doit payer. Le PDF est stylisé pour être propre et professionnel, en utilisant le CSS défini dans le code pour s'assurer que la facture n'est pas seulement fonctionnelle mais aussi esthétique.

développement de logiciels .NET (Comment cela fonctionne-t-il pour les développeurs ?) (Développement de logiciels .NET (Comment cela fonctionne pour les développeurs) : Figure 6 - Sortie PDF

Transformer le projet Windows Forms en un exécutable

Après avoir testé minutieusement votre application Windows Forms et vous être assuré que toutes les fonctionnalités telles que l'entrée de données, la génération de PDF et la sortie fonctionnent parfaitement, la phase suivante consiste à emballer votre projet dans un exécutable (.exe) . Ce processus de conversion est rationalisé au sein du Framework .NET, ce qui garantit que votre application est prête à être installée et utilisée sur des machines Windows.

Voici une approche étape par étape de la création de l'exécutable :

  1. Construire l'application: Allez dans le menu "Construire" et choisissez "Construire la solution" Cette opération permet de compiler le code en assemblages et d'effectuer les optimisations nécessaires.

    développement de logiciels .NET (Comment ça marche pour les développeurs) : Figure 7 - Solution de construction

  2. Localiser l'exécutable: Une fois la compilation terminée, naviguez jusqu'au dossier 'bin\Debug\net8.0' à l'intérieur du répertoire de votre projet. Vous y trouverez le fichier .exe ainsi que toutes les autres dépendances nécessaires à l'exécution de votre application.

    développement de logiciels .NET (Comment cela fonctionne-t-il pour les développeurs ?) (Développement de logiciels .NET (Comment cela fonctionne pour les développeurs) : Figure 8 - Emplacement de l'exécutable

  1. Tester l'exécutable: Il est conseillé d'exécuter le fichier .exe sur une autre machine pour confirmer qu'il fonctionne correctement en dehors de votre environnement de développement.
  2. Préparation de la distribution: Pour la distribution, vous pouvez partager directement le fichier .exe si aucune dépendance supplémentaire n'est nécessaire. Cependant, pour une approche plus professionnelle, envisagez de créer un programme d'installation à l'aide d'un projet d'installation dans Visual Studio ou d'un programme d'installation tiers comme Inno Setup ou WiX Toolset. Un programme d'installation peut gérer le processus d'installation, créer des raccourcis et gérer d'autres aspects complexes tels que l'enregistrement dans le registre Windows si nécessaire.

    En suivant ces étapes, votre application Windows Forms est condensée en un seul fichier exécutable, prêt à être partagé et utilisé. Cette conversion marque l'aboutissement du processus de développement, en passant d'un projet sur votre machine de développement à un logiciel déployable qui peut être distribué et installé efficacement dans une multitude d'environnements Windows.

Conclusion

développement de logiciels .NET (Comment ça marche pour les développeurs) : Figure 9 - Licences

En conclusion, le développement d'une application Windows Forms pour la génération de factures PDF à l'aide d'IronPDF et du Framework .NET est un exemple d'application pratique des principes de développement de logiciels. Ce projet illustre non seulement la polyvalence et la puissance de l'écosystème .NET, mais aussi la manière dont les développeurs peuvent intégrer des bibliothèques tierces comme IronPDF pour étendre les fonctionnalités et répondre aux besoins spécifiques des entreprises.

En suivant les étapes décrites, de la configuration de l'interface utilisateur à la mise en œuvre de la génération de PDF et à l'intégration de l'application dans un exécutable, les développeurs peuvent créer une application fonctionnelle et conviviale. Ce processus met en évidence l'importance de combiner des cadres de programmation robustes avec des bibliothèques innovantes pour résoudre des problèmes concrets, afin de fournir un produit à la fois efficace et efficient.

IronPDF fournit généreusement une essai gratuit pour que les développeurs explorent ses fonctionnalités et déterminent dans quelle mesure il répond à leurs besoins. Une fois que vous avez expérimenté les avantages et que vous êtes prêt à intégrer IronPDF dans votre environnement de production, les licences commencent à partir de $749.

< PRÉCÉDENT
Dotnet NuGet (Comment ça marche pour les développeurs)
SUIVANT >
Expressions de correspondance de motifs en C# (Comment ça marche pour les développeurs)