Доступ и сохранение настроек из поля со списком из другого класса

В настоящее время у меня есть класс формы, который обрабатывает поля со списком под названием «Настройки». В поле со списком есть список секунд для выбора, т.е. 30 секунд, 60 секунд. Это кажется очень простым, но я не могу понять это!

В настоящее время у меня есть это в классе настроек, где используются поля со списком

    private void timeSelect_SelectedIndexChanged(object sender, EventArgs e)
    {           
        timeSelected = this.timeSelect.GetItemText(this.timeSelect.SelectedItem);

        if (timeSelected == "120 Seconds")
            seconds = 120;                   
    }

Переменная секунды является общедоступным целым числом в этом классе. В другом классе, называемом Time, я хочу иметь доступ к этому целому числу, чтобы я мог установить значение таймера на то, что было выбрано. Я попытался создать в Time метод, который принимает int, вызывал его в классе Settings, чтобы он сохранял значение в переменной в классе Time. Что-то вроде этого:

В классе Время:

public int j;
public void timeChosen(int secondsChosen)
{
     j = secondsChosen;
}

и вызвал метод выше в классе настроек, чтобы передать значение «секунды»

Однако это не работает, и когда приложение запускает значение j как 0. Но при первом вызове оно учитывает, что значение может быть 120, но, похоже, оно не сохраняет значение.

Какие-либо предложения?

В классе настроек:

Time time = new Time();
public int seconds;
public string timeSelected;

private void timeSelect_SelectedIndexChanged(object sender, EventArgs e)
        {           
           timeSelected = this.timeSelect.GetItemText(this.timeSelect.SelectedItem);

            if (timeSelected == "120 Seconds")
                seconds = 120;                   
        }

    private void nextButton_Click(object sender, EventArgs e)
    {
        time.timeChosen(seconds);
        this.Hide();
        var nextForm = new NextForm();
        nextForm.ShowDialog();
    }

В классе «Время»:

public int j;
    public void timeChosen(int secondsChosen)
    {
         j = secondsChosen;
    }

Таймер настроен в другом классе, но все работает нормально, это просто вопрос передачи и сохранения значения из поля со списком. Как и в случае с классом Time, я могу просто установить его в public int j = 60; и он видит это как 60 секунд и работает.


person Jed5931    schedule 14.04.2016    source источник
comment
Можете ли вы показать, как вы инициируете объект Time? вы всегда создаете его перед вызовом timeChosen?   -  person Valentin    schedule 14.04.2016
comment
@Валентин Извините, я опечатался. Я имел в виду, что вызвал метод timeChosen из класса Time и передал переменную секунд, которая находится в классе Settings. Проходя через него, он сохраняет значение в j при вызове, но приложение продолжает работу, и как только требуется значение секунд, оно просто возвращает значение 0 вместо этого. Поэтому он никогда не сохраняется в переменной j в классе Time. Я пытался заставить его работать, поэтому в то же время я только что создал экземпляр класса Time в классе Settings, чтобы я мог получить доступ к этому методу.   -  person Jed5931    schedule 14.04.2016
comment
Можете ли вы предоставить больше кода, пожалуйста. Спасибо   -  person Valentin    schedule 14.04.2016
comment
@Valentin Я предоставил немного больше. Я вызываю метод timeChosen, когда пользователь нажимает «Далее», чтобы перейти к следующей форме. Как уже упоминалось, он работает и передает значение при вызове, но, похоже, не сохраняет его в переменную, которую я хочу в классе Time.   -  person Jed5931    schedule 14.04.2016
comment
И вы пытаетесь получить Time.j в nextForm, не так ли?   -  person Valentin    schedule 14.04.2016
comment
В некотором роде. Я пытаюсь превратить Settings.seconds в Time.j. Я в основном сохраняю некоторые значения в классе Time, а в других формах я получаю доступ к классу Time. Итак, как только значение Settings.seconds сохраняется в Time.j. Затем я могу перейти в «nextForm» и получить доступ к Time.j.   -  person Jed5931    schedule 14.04.2016
comment
Вы уверены, что seconds не 0?   -  person Valentin    schedule 14.04.2016
comment
Он не установлен на 0 нет. Когда я прохожу, он вызывает метод, он переходит в класс Time. Устанавливает Time.j в 120. Переходит к следующей паре форм, и когда приложение запускается (когда фактически используется Time.j), оно больше не распознается как 120, а возвращается к 0.   -  person Jed5931    schedule 14.04.2016
comment
когда приложение запускается (когда фактически используется Time.j), оно больше не распознается как 120, а возвращается к 0. Итак, вы хотите сохранить настройки, а затем загрузить их при запуске приложения, не так ли?   -  person Valentin    schedule 14.04.2016
comment
Понимаю. Я на самом деле не знал, что он сбрасывается до нуля. Я хочу иметь возможность сохранять значение секунд да, чтобы его можно было использовать, когда это необходимо. Есть простой способ сделать это?   -  person Jed5931    schedule 14.04.2016


Ответы (1)


Я предлагаю использовать стандартные настройки приложения. Вам нужно создать файл настроек и добавить новую переменную в настройки

  1. Щелкните правой кнопкой мыши проект в обозревателе решений.
  2. Перейдите в «Свойства» -> вкладка «Настройки» и создайте новый файл настроек.
  3. Затем создайте новую переменную типа int Seconds в представлении сетки на той же странице.

Итак, после этого вы сможете get/set использовать эту переменную настройки, используя Properties.Settings.Default.Seconds

private void nextButton_Click(object sender, EventArgs e)
{
    Properties.Settings.Default.Seconds = seconds;
    this.Hide();
    var nextForm = new NextForm();
    nextForm.ShowDialog();
}
person Valentin    schedule 14.04.2016
comment
Это сработало отлично! Спасибо за ваше терпение и помощь! - person Jed5931; 14.04.2016
comment
@ Jed5931 Добро пожаловать. Вероятно, вам нужно обновить свой вопрос, чтобы каждый мог понять, что происходит. Спасибо - person Valentin; 14.04.2016