C# Winforms simple number analyzer application

18 hours ago 3
ARTICLE AD BOX

I started learning and practicing C# WinForms again after quite a long break, and I’m rebuilding my basics with smaller practice projects before moving on to larger applications.

This project is a simple number analyzer application. The main goal was to practice core WinForms concepts again, such as working with toolbox controls, event handling, List collections, updating UI elements dynamically, and implementing basic desktop application logic.

The application allows the user to:

add numbers using a NumericUpDown control

display them inside a ListBox

calculate count, sum, average, minimum, maximum

calculate even/odd, positive/negative, and zero counts

sort numbers in ascending/descending order

delete selected numbers

clear the list

handle menu actions

I used several common WinForms elements and concepts in this project, including:

NumericUpDown

ListBox

Labels

Buttons

GroupBoxes

MenuStrip

MessageBox validation

List collections

loops and conditional logic

some LINQ methods

I’ll upload the full project files together with screenshots of the application.

I would mainly like feedback regarding:

whether my overall structure is reasonable for a beginner/intermediate WinForms practice project

whether storing data in multiple List<decimal> collections is a good approach here

whether manually refreshing the ListBox is acceptable in smaller WinForms projects

possible improvements regarding naming, validation, separation of logic, and cleaner WinForms practices

I’m not looking for someone to rewrite the project for me — I mainly want to understand what habits or structural decisions I should improve early while relearning WinForms.

Form1.cs:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Numbers { public partial class Form1 : Form { List<decimal> numbers = new List<decimal>(); List<decimal> even = new List<decimal>(); List<decimal> odd = new List<decimal>(); List<decimal> Null = new List<decimal>(); public Form1() { InitializeComponent(); numericUpDown1.Minimum = -1000000; numericUpDown1.Maximum = 1000000; } private void button1_Click(object sender, EventArgs e) { decimal number = numericUpDown1.Value; numbers.Add(number); if (number % 2 == 0 && number!= 0) { even.Add(number); } if (number % 2 == 1 || number%2 == -1 && number != 0) { odd.Add(number); } else { Null.Add(number); } listBox1.Items.Clear(); foreach (decimal n in numbers) { listBox1.Items.Add(n); } } private void button3_Click(object sender, EventArgs e) { int pt = 0; int nt = 0; int null_ = 0; Count.Text = Convert.ToString(numbers.Count); Sum.Text = Convert.ToString(numbers.Sum()); Avarage.Text = (numbers.Sum() / numbers.Count()).ToString("F2"); Minimum.Text = Convert.ToString(numbers.Min()); Maximum.Text = Convert.ToString(numbers.Max()); Even.Text = Convert.ToString(even.Count()); Odd.Text = Convert.ToString(odd.Count()); foreach (decimal item in numbers) { if (item > 0) { pt++; } if (item < 0) { nt++; } if (item == 0) { null_++; } } Positive.Text = Convert.ToString(pt); Negative.Text = Convert.ToString(nt); Nulls.Text = Convert.ToString(null_); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedItem != null) { label3.Text = "Selected number: " + listBox1.SelectedItem.ToString(); } } private void sToolStripMenuItem_Click(object sender, EventArgs e) { if (numbers.Count != 0) { numbers.Clear(); even.Clear(); odd.Clear(); Null.Clear(); } } private void quitToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult answer = MessageBox.Show( "Are you sure, you wanna leave?", "Exit", MessageBoxButtons.YesNo ); if (answer == DialogResult.Yes) { Application.Exit(); } } private void addNumberToolStripMenuItem_Click(object sender, EventArgs e) { numericUpDown1.Focus(); } private void deleteSelectedToolStripMenuItem_Click(object sender, EventArgs e) { button2.Focus(); } private void analysisToolStripMenuItem_Click(object sender, EventArgs e) { button3.Focus(); } private void button2_Click(object sender, EventArgs e) { if (listBox1.SelectedItem == null ) { MessageBox.Show("There is no selected row!"); return; } listBox1.Items.Remove(listBox1.SelectedItem); } private void button4_Click(object sender, EventArgs e) { numbers.Sort(); listBox1.Items.Clear(); foreach (decimal n in numbers) { listBox1.Items.Add(n); } } private void button5_Click(object sender, EventArgs e) { numbers.Sort(); numbers.Reverse(); listBox1.Items.Clear(); foreach (decimal n in numbers) { listBox1.Items.Add(n); } } private void increasToolStripMenuItem_Click(object sender, EventArgs e) { button4.Focus(); } private void decreaseToolStripMenuItem_Click(object sender, EventArgs e) { button5.Focus(); } } }

enter image description here

enter image description here

enter image description here

Read Entire Article