2014-01-26 2 views
0

У меня есть программа для окон, которую я хотел бы «запускать» определенное количество раз на основе номера, заданного пользователем.сделать программу, запускаемую несколько раз на основе пользовательского ввода

Я использую Visual Studio 2013 и C#.

У меня есть программа, которая имеет 16 ящиков для изображений и случайным образом присваивает фотографии 5 из этих ящиков. Человек должен выбрать правильный порядок изображений. Если они это сделают, они вознаграждаются, если они ошибаются, они наказываются раздражающим звуком.

В моей первой форме есть текстовое поле, которое пользователь может указать 'numberOfTrials' У меня есть вторая форма, которая принимает значение TextBox и преобразует его в int.

Я хочу, чтобы основная программа на моей второй форме запускала количество раз, которое указывает пользователь.

Моя программа работает, если я запускаю ее один раз, не используя эту переменную.

Я попытался использовать цикл for внутри метода, который запускает программу, но это не сработало. Он просто сделал все ящики для изображений белыми.

Затем я попытался использовать цикл for вокруг метода InitializeComponent(), но, опять же, это просто сделало все поля изображения белыми.

Мой цикла использует переменный текстовое поле, как, например:

for (int cycles = 0; cycles < numberOfTimesThrough; cycles++) 

Я создаю переменную numberOfTimesThrough путем разбора переменного текстового поля.

Возможно, я делаю это неправильно?

На первой форме:

в верхней части класса:

public static string trialNumberString; 

внутри метода, который вызывается, когда кнопка подтверждения нажимается:

trialNumberString = tbTrialNumber.Text.ToString(); 

На втором форма:

наверху этого класса:

//Integer value for the string of trials 
public static int numberOfTimesThrough; 
bool canConvert = Int32.TryParse(Settings.trialNumberString, out numberOfTimesThrough); 

Это правильный способ получить строковое значение текстового поля в первой форме? Я уверен, что добавление цикла for должно сделать программу повторяющейся, поэтому должно быть что-то неправильно с тем, как я разбираю строку текстового поля в int. Люди, использующие эту программу, не хотят ее разбивать, поэтому данные, введенные в текстовое поле в первой форме, всегда будут находиться между 1 и, скажем, 25. Должен ли я все еще использовать попытку catch вокруг преобразования строк?

Любая помощь с этим будет принята с благодарностью.

ответ

1
  • Вам не нужно повторно запустить всю программу просто, чтобы показать форму несколько раз: вместо того, чтобы просто создать несколько экземпляров второй формы и показать их в определенной последовательности.

  • Чтобы безопасно разобрать текст как число, вы можете использовать int.TryParse()

+0

Мне нравится ваша идея показать несколько экземпляров. Я просто пишу InitializeComponent() несколько раз во второй форме или я вызываю вторую форму несколько раз из первой формы? – smokeAndMirrors

+1

@smokeAndMirrors Я бы создал несколько экземпляров второй формы из первой формы – ChaseMedallion

0

Когда приложение закрывается, статические переменные также удаляются из памяти. Чтобы сохранить настройки, вам необходимо сохранить их в отдельный файл, а затем прочитать это.Простым способом настройки чтения/записи является использование встроенных опций ApplicationSettings: http://msdn.microsoft.com/en-us/library/vstudio/a65txexh(v=vs.100).aspx

1

Вы можете получить значение textBox, обратившись к свойству Text, и оттуда разобрать строку, которая возвращается в int.

string s = textBox.Text; 
int i = int.Parse(s); 

Необходимо использовать любую логику проверки.

+0

Я попробовать этот метод, но я получил сообщение об ошибке, что сказал «Не удается неявно преобразовать строку в межд» :-( – smokeAndMirrors

+0

На самом деле, я не пытался использовать textBox.text Я использовал только textBox.Text.toString() Я попробую его без тега toString(). – smokeAndMirrors