Счетчик не работает должным образом - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть некоторый код, который выглядит следующим образом:

int i = 0;

foreach (var line in theCP4UnknownList.Distinct())
{
    var splitUnknowns = line.Split(' ');

    i++;
    unknownCP4Counter = unknownCP4Counter - i;

    KTS_Save saveForm = new KTS_Save (splitUnknowns[0], splitUnknowns[1], splitUnknowns[3], splitUnknowns[4], openDataBase2File.FileName, unknownCP4Counter);

    saveForm.ShowDialog();
}

По сути, я пытаюсь отобразить количество неизвестных частей и уменьшить счетчик в каждой форме.

Таким образом, если бы было 10 частей, первая форма, которая всплывала бы для пользователя, имела бы «10» в верхнем правом углу.После того, как пользователь выходит из текущей формы, всплывет новая форма, и в верхнем правом углу будет отображаться цифра «9». Это будет происходить до тех пор, пока не достигнет 0. Что также происходит, когда формы перестают приходить, посколькуunknownCP4Counter установлено на количество элементов в theCP4UnknownList.

Кто-нибудь знает, что не так с моим кодом?Кажется, он выводит «0» в каждой форме.

РЕДАКТИРОВАТЬ:

    private string _Name;
    private string _PtpName;
    private string _TapeWidth;
    private string _FeederPitch;
    private string _DataBaseFileName;
    private int _Counter;

    public KTS_Save()
    {
        InitializeComponent();
    }
    public KTS_Save(string Name, string PtpName, string TapeWidth, string FeederPitch, string DBFileName, int Counter)
    {
        InitializeComponent();

        _Name = Name;
        _PtpName = PtpName;
        _TapeWidth = TapeWidth;
        _FeederPitch = FeederPitch;
        _DataBaseFileName = DBFileName;

        nameTextBox.Text = _Name;
        ptpNameTextBox.Text = _PtpName;
        tapeWidthTextBox.Text = _TapeWidth;
        feederPitchTextBox.Text = _FeederPitch;
        counterLabel.Text = _Counter.ToString();
    }

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Делая

int i = 0;
int unknownCP4Counter = theCP4UnknownList.Distinct().Count; // 10
foreach (var line in theCP4UnknownList.Distinct())
{
    i++;
    unknownCP4Counter = unknownCP4Counter - i;
}

, вы делаете:

unknownCP4Counter = 10;
// foreach starts
unknownCP4Counter = 9;
unknownCP4Counter = 7;
unknownCP4Counter = 4;
unknownCP4Counter = 0;
unknownCP4Counter = -5;   
unknownCP4Counter = -11;
unknownCP4Counter = -18;
unknownCP4Counter = -26;
unknownCP4Counter = -35;
unknownCP4Counter = -45;
// foreach stops

Если вы хотите создать уменьшающийся счетчик, я предлагаю вам вместо этого:

int unknownCP4Counter = theCP4UnknownList.Distinct().Count; // 10
foreach (var line in theCP4UnknownList.Distinct())
{
    unknownCP4Counter--;
}

РЕДАКТИРОВАТЬ на основе правки OP:

Вы забыли инициализировать поле _Counter в конструкторе KTS_Save с параметром Counter.Так как int не является обнуляемым типом, его значением по умолчанию будет 0.

0 голосов
/ 13 декабря 2011

Что такое неизвестный CP4Counter, инициализированный как?Каждый раз он отвлекается на i, и если он инициализируется общим счетом, то я всегда буду итоговым - итоговым значением, равным 0. Возможно, вы хотели написать:

unknownCP4Counter = i;

?

...