Der er noget omkring scope regler du mangler at sætte dig ind i eller bare ikke har forstået (som Ronny også er inde på).
Når du erklærer en variabel (fx int i) i en metode så er variablen kun synlig for metoden selv og hvis en anden metode skal se din variabel så skal den sendes med som en parameter.
En måde at omgås dette på er at erklære din variabel på klasseniveau og på denne måde kan alle metoder i samme klasse se din variabel. Men hvis en metode har en reference til et objekt af din klasse (og din variabel er makeret public) så kan du også få fat i din variabel selv fra en anden klasse.
Hvilket er det der er løsningen i dit tilfælde. Jeg har tilladt mig at omskrive dit program således jeg tror det virker som du ønsker det. Det kan dog gøres på mange måder alt efter hvem det i sidste ende er der skal eje din ”i” variabel.
Den absolut nemmeste måde (og mest horribel måde hvis man laver professionel programmering

) er at gøre din ”i” variabel statisk således den kan tilgås af din Form1 klasse uden nogen reference (ikke noget problem når din Program klasse alligevel fungerer rent statisk):
form1.cs:
- namespace win1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- Program.i = Program.i-5;
- label1.Text = Convert.ToString(i);
- }
-
-
- }
- }
program.cs
- namespace win1
- {
- static class Program
- {
- public static int i;
-
- /// <summary>
- /// The main entry point for the application.
- /// </summary>
- [STAThread]
- static void Main()
- {
- i = 50;
-
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new Form1());
-
- }
- }
- }
Jeg synes ikke det er værd at komme med et bedre alternativ da det er tydeligt du kun lige er begyndt at lære C# og det er bedre du bare leger lidt med det i starten og herefter begynder at læse ordentligt op på hvordan din programstruktur skal laves korrekt.