Question

I'm trying to make a countdown program, which I can start and stop and set the value of the countdown to 10 minutes if needed.

But I'm getting an error I don't quite understand. I'm not that into C#, so here's the code:

Can some one help me a bit here ? Think I run on framework 3.0 or something ?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;

namespace PauseMaster
{   
    public partial class MainForm : Form
    {           
        public MainForm()
        {           
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {               
        }

        private DateTime endTime;
        private void btnStartStop_Click(object sender, EventArgs e)
        {
            if(btnStartStop.Text == "START")
            {
                int hours = int.Parse(string.IsNullOrEmpty(txtCountFromHour.TextBox.Text) || txtCountFromHour.TextBox.Text == "timer" ? "0" : txtCountFromHour.TextBox.Text);
                int mins = int.Parse(string.IsNullOrEmpty(txtCountFromMin.TextBox.Text) || txtCountFromMin.TextBox.Text == "minutter" ? "0" : txtCountFromMin.TextBox.Text);
                int secs = int.Parse(string.IsNullOrEmpty(txtCountFromSec.TextBox.Text) || txtCountFromSec.TextBox.Text == "sekunder" ? "0" : txtCountFromSec.TextBox.Text);

                endTime = DateTime.Now.AddHours(hours).AddMinutes(mins).AddSeconds(secs);

                timer1.Enabled = true;  
                btnStartStop.Text = "STOP";
            }
            else
            {
                timer1.Enabled = false;
                btnStartStop.Text = "START";
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (endTime <= DateTime.Now)
            {
                timer1.Enabled = false;
                lblTimer.Text = "00:00:00";
                btnStartStop.Text = "Start";
                return;
            }

            TimeSpan ts = endTime - DateTime.Now;
            lblTimer.Text = string.Format("{0}:{1}:{2}.{3}", ts.Hours.AddZero(), ts.Minutes.AddZero(), ts.Seconds.AddZero());
        }

        public static class IntExt
        {
            public static string AddZero(this int i) // GETTING ERROR HERE AT 'AddZero'
            {
                int totLength = 2;
                int limit = (int)Math.Pow(10, totLength - 1);
                string zeroes = "";
                for (int j = 0; j < totLength - i.ToString().Length; j++)
                {
                    zeroes += "0";
                }
                return i < limit ? zeroes + i : i.ToString();
            }
        }     
    }       
}
Was it helpful?

Solution

The error message says exactly what's wrong: your IntExt method isn't a top-level static class. It's a nested static class. Just pull it out of MainForm and it'll be fine.

OTHER TIPS

I know this question is old, but in case anyone else runs into this problem...

Check to make sure that the keyword "this" is not in the parameter name definition (usually from copy/paste or drag)

So, replace:

public static string AddZero(this int i)

with this:

public static string AddZero(int i)

That should solve your problem.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top