Lesson 36 · Conclusion & Next Steps

Conclusion & Next Steps

You have completed all 35 lessons of VB.NET 2026. Here is a full recap, a best-practices checklist, recommended projects, the essential NuGet ecosystem, and a VBโ†’C# comparison for when you're ready to cross over.

๐ŸŽ“

You've completed VB.NET 2026!

35 lessons, 100+ code examples, 70+ interactive simulations, and a complete curriculum from "Hello World" to async REST APIs โ€” all in Visual Basic 2026 on .NET 10. Now it's time to build something real.

36.1 Curriculum Recap โ€” All 35 Lessons

01
Introduction
IDE, project types
02
Designing the UI
Forms, controls layout
03
Enhancing the UI
Colour, fonts, styles
04
Writing the Code
Events, first logic
05
Working with Controls
TextBox, Button, Label
06
ListBox & ComboBox
Selection, items
07
PictureBox
Images, SizeMode
08
Data Types
Integer, String, Booleanโ€ฆ
09
Variables & Constants
Scope, Dim, Const
10
Arrays
1D, 2D, ReDim
11
Math Operations
Operators, Math class
12
String Manipulation
Substring, Split, Format
13
Ifโ€ฆThenโ€ฆElse
Branching, ElseIf
14
Select Case
Multi-branch, ranges
15
Looping
For, While, Do Loop
16
Sub Procedures
Parameters, ByRef/ByVal
17
Functions
Return values, overloads
18
Math Functions
Sqrt, Round, Abs, Log
19
Trigonometric
Sin, Cos, Tan, Atan2
20
Format Function
Currency, date, numeric
21
CheckBox
Checked, ThreeState
22
Radio Button
GroupBox, mutual exclusion
23
Web Browser
WebView2, navigation
24
Error Handling
Try/Catch, Finally
25
OOP
Class, Property, Inheritance
26
Graphics & GDI+
DrawLine, DrawString
27
Using Timer
Interval, Tick event
28
Animation
Movement, collision, GDI+
29
Database Intro
ADO.NET, SQLite, CRUD
30
Connecting DB
BindingSource, DataGridView
31
Editing Data
Validation, transactions, undo
32
LINQ & Collections
List, Dictionary, GroupBy
33
File I/O & JSON
StreamReader/Writer, JsonSerializer
34
Async Programming
Async/Await, IProgress, Cancel
35
Web API & HttpClient
REST, JSON deserialise

36.2 Best Practices Checklist

These are the patterns that separate maintainable professional code from working-but-fragile code. Tick them off on every project.

๐Ÿ— Code Structure
  • One class per file, named identically to the file.
  • Business logic in classes, not in form event handlers.
  • Constants at module top with descriptive names (MAX_RETRIES not 3).
  • Methods < 20 lines; if longer, extract helpers.
โš ๏ธ Error Handling
  • Every database call and file I/O in Try/Catch.
  • Catch specific exceptions (SqliteException) before general (Exception).
  • Always use Finally to release resources (or Using blocks).
  • Log errors to a file โ€” don't show stack traces to users.
๐Ÿ—ƒ Database
  • Always use parameterised queries โ€” never string-concatenate SQL.
  • Wrap multi-row writes in a transaction.
  • Call Using on connections โ€” never leave them open.
  • Validate all user input before writing to the database.
โšก Async / UI
  • Every slow operation is Async Sub with Await.
  • Disable the triggering button; re-enable in Finally.
  • Use IProgress(Of Integer) โ€” never update UI from a background thread.
  • One static HttpClient โ€” never instantiate per request.
๐Ÿงน Collections & LINQ
  • Prefer List(Of T) over arrays for mutable sequences.
  • Call .ToList() to materialise a LINQ query you'll enumerate more than once.
  • Use FirstOrDefault not First โ€” never let LINQ throw on empty sequences.
  • Build a Dictionary for O(1) lookup rather than .Where().First() in a loop.
๐Ÿ“ File & Settings
  • All data files under LocalUserAppDataPath โ€” never write to Program Files.
  • Always check File.Exists before reading.
  • Wrap JSON Deserialize in Try/Catch โ€” files can be hand-edited.
  • Use Path.Combine, never & or + for path strings.
The 5 Most Common Beginner Mistakes
  • SQL injection: "SELECT * FROM Students WHERE Name='" & txtName.Text & "'" โ€” always use @Name parameters.
  • Blocking the UI thread: Thread.Sleep() or synchronous file reads inside a button click โ€” always Async/Await.
  • Creating HttpClient per request: port exhaustion at scale โ€” use one shared instance.
  • Forgetting Using: database connections and file handles left open โ€” always use Using โ€ฆ End Using.
  • Unhandled exceptions in Async Sub: exceptions silently crash the app โ€” always wrap Async Sub bodies in Try/Catch.

36.3 Project Ideas

The best way to solidify your skills is to build something end-to-end. Each project below has a difficulty rating and lists the exact lessons it exercises.

๐Ÿ“š Student Management System Beginner

Full CRUD for students, classes, and grades. Login form, DataGridView, CSV export, charts.

Lessons: 5โ€“15, 24โ€“25, 29โ€“33

๐Ÿ›’ Inventory Tracker Beginner

Products, categories, stock levels, low-stock alerts. SQLite backend, LINQ analytics, JSON settings.

Lessons: 13โ€“17, 29โ€“33

๐ŸŒฆ Weather Dashboard Intermediate

Search any city, display current conditions and 7-day forecast. Uses Open-Meteo (free, no key).

Lessons: 26, 34โ€“35

๐Ÿ’ฑ Currency Converter Intermediate

Real-time exchange rates, conversion calculator, rate history chart drawn with GDI+, cached settings.

Lessons: 26โ€“27, 33โ€“35

๐Ÿ“Š LINQ Analytics Board Intermediate

Import CSV data, apply Where/GroupBy/Aggregate queries interactively, export filtered results.

Lessons: 32โ€“33, 26

๐ŸŽฎ Simple Arcade Game Advanced

GDI+ sprites, Timer-driven game loop, collision detection, high-score table persisted to SQLite.

Lessons: 15, 24โ€“28, 29

๐Ÿ“ Notes App with Sync Advanced

Local SQLite + JSON export, async auto-save, tag-based LINQ filtering, optional REST sync endpoint.

Lessons: 29โ€“35

๐Ÿ“ˆ Stock Watcher Advanced

Poll a stock API every 60 seconds (Timer + HttpClient), draw price history with GDI+, alert on thresholds.

Lessons: 27, 33โ€“35

36.4 Essential NuGet Packages

Beyond what's built into .NET 10, these packages are widely used in real VB.NET applications. Search for them in Tools โ†’ NuGet Package Manager โ†’ Browse in Visual Studio.

Microsoft.Data.Sqlite
Official SQLite driver for .NET
Local database without SQL Server. Used in Lessons 29โ€“31.
Dapper
Micro-ORM โ€” SQL โ†’ typed objects
conn.Query(Of Student)("SELECTโ€ฆ") โ€” eliminates manual DataReader mapping.
Newtonsoft.Json
Popular JSON library (Json.NET)
More features than System.Text.Json: dynamic, LINQ to JSON, converters.
CsvHelper
Professional CSV reading/writing
Handles quoted fields, headers, type mapping. Replaces manual Split(",").
Serilog
Structured logging
Log to file, console, or cloud. Log.Information("Loaded {Count} rows", n).
LiveCharts2
Modern charting for WinForms
Line, bar, pie charts with animations. Replaces hand-drawn GDI+ charts.
FluentValidation
Validation rule builder
Replaces manual error lists. Define rules in a class; validate objects.
Polly
Resilience & retry library
Automatic HTTP retries, circuit breaker, timeout policies for HttpClient.
Package Manager Console โ€” install commands
' In Visual Studio โ†’ Tools โ†’ NuGet Package Manager โ†’ Package Manager Console:
Install-Package Microsoft.Data.Sqlite
Install-Package Dapper
Install-Package Newtonsoft.Json
Install-Package CsvHelper
Install-Package Serilog
Install-Package LiveChartsCore.SkiaSharpView.WinForms
Install-Package FluentValidation
Install-Package Polly

36.5 VB.NET โ†’ C# Comparison

C# is the dominant .NET language in industry. The languages are functionally identical โ€” same framework, same IL output, same NuGet packages. Syntax is the only difference. If you know VB, you can read C# within a week.

ConceptVB.NET 2026C# (.NET 10)
Class definitionPublic Class Student โ€ฆ End Classpublic class Student { โ€ฆ }
Auto-propertyPublic Property Name As Stringpublic string Name { get; set; }
Variable declarationDim x As Integer = 5int x = 5; or var x = 5;
String interpolation$"Hello {name}"$"Hello {name}" โ€” identical!
If statementIf x > 0 Then โ€ฆ End Ifif (x > 0) { โ€ฆ }
For each loopFor Each s In students โ€ฆ Nextforeach (var s in students) { โ€ฆ }
LINQ (method)students.Where(Function(s) s.Grade > 80)students.Where(s => s.Grade > 80)
Async functionAsync Function LoadAsync() As Task(Of T)async Task<T> LoadAsync()
Null coalescingIf(value, defaultVal)value ?? defaultVal
Null-conditionalobj?.Propertyobj?.Property โ€” identical!
And / OrAndAlso / OrElse&& / ||
Not equal<>!=
Using statementUsing conn As New SqliteConnection(โ€ฆ) โ€ฆ End Usingusing var conn = new SqliteConnection(โ€ฆ);
Throw exceptionThrow New ArgumentException("msg")throw new ArgumentException("msg");
Comments' single line// single line or /* block */
Migration Tips

The free CodeConverter (also available as a Visual Studio extension) converts VB.NET โ†” C# with high accuracy. It's an excellent tool for learning C# syntax from your own working VB code.

36.6 Continued Learning

Where to go from here, in rough order of priority for a VB.NET Windows Forms developer:

๐ŸŽฏ Next Topics to Learn
  • Entity Framework Core โ€” ORM; auto-generates SQL from class models
  • WinForms MVVM โ€” separate UI from logic using data binding
  • Unit Testing โ€” xUnit / NUnit; test business logic without the UI
  • Git & GitHub โ€” version control; essential for any project

๐Ÿš€ Now go build something!

Every great application starts as a simple form with a button. Pick one of the project ideas above, open Visual Studio 2026, and start writing. The best way to learn is always to ship.


Related Resources


Featured Books

Visual Basic 2022 Made Easy

Visual Basic 2022 Made Easy

by Dr. Liew Voon Kiong

The definitive companion to this tutorial series โ€” all 35 lesson topics in print with exercises.

View on Amazon โ†’
VB Programming With Code Examples

VB Programming With Code Examples

by Dr. Liew Voon Kiong

Practical VB applications: databases, graphics, networking, and advanced patterns.

View on Amazon โ†’