2016-11-17 2 views
-1

Добрый день коллеги хелперы, я следующая проблема: (работает MS Visual Community Edition 2015)Сохранение значения от попытки для использования в второй попытки C#

private void button4_Click(object sender, EventArgs e)   // Senden 
{ 
    serialPort2.WriteLine("SR,00,002\r\n"); 
    textBox1.Text = "gesendet"; 
    textBox3.Text = ""; 
    try 
    { 
     System.IO.StreamReader file = new System.IO.StreamReader("C:\\blub.txt"); 
     String line = file.ReadToEnd(); 
     string Hallo = line; \\in the beginning there is "0" in the file 
      file.Close(); 
     decimal counter = Convert.ToDecimal(Hallo); \\just for testing 
     counter++; 
     string b = serialPort2.ReadLine(); 
     string[] b1 = Regex.Split(b, "SR,00,002,"); \\cuts off unwanted input from device 
     decimal b2 = decimal.Parse(b1[1]); \\number like -3000 
     System.IO.StreamWriter test = new System.IO.StreamWriter("C:\\blub.txt"); 
     test.WriteLine(counter); 
     test.Close(); 
     textBox7.Text = "Das ist counter:" + counter; 
    } 
    catch (TimeoutException) 
    { 
     textBox3.Text = "Timeout"; 
     throw; 
    } 

} 

Теперь SerialPort это устройство, которое возвращает lengthmeasurment , Так как это немного странно, или просто его построение начинается с номера negitve (от -5000 до -3370). Теперь, когда я хочу получить реальное измерение на экране, я хочу установить значение 0 и вычислить разницу.

Средство: я запускаю программу - нажмите send - получите значение (скажем, -3000) - нажмите еще раз (после нажатия на сеонатор) и получите значение, которое было нажато в> 0, добавив разницу в 0 .

Я только научился хранить ценности внешне, когда у меня был курс C год назад, как в моей программе. Есть ли способ сохранить значение из первого измерения в программе, чтобы я мог использовать его при следующей отправке/попытке?

Счетчик был только для тестирования, и я променял бы его на «десятичного b2»

Я надеюсь, что это легко исправить для того, на самом деле не про с C#, но пока я не терпится узнать. Я благодарю желающих помощников заранее, MfG, Chris

+0

Какой тип C# программы это? – Liam

+0

ах, извините, плохо добавьте это. Я использую MSVisual Community editon 2105 –

+1

Существует много того, что можно было бы сказать о вышеуказанном коде (имена параметров, использование, проверка, проверка ошибок, ..), но простой ответ на вашу проблему чтобы определить свойство (или даже поле) на уровне класса и установить его из блока try. – gd73

ответ

0

ОК, я упрощу это, чтобы показать концепцию, чтобы у нее не было всего кода, который вы фактически используете.
Итак, вы хотите нажать кнопку, получить некоторые значения и сохранить их для следующего щелчка.
Значение хранится в переменной. Если у вас есть переменная в функции, которая является обработчиком события click, как только функция завершит выполнение, значение будет уничтожено.
Итак, вам нужно создать переменную во внешней области (уровне класса). Ваша функция уже в классе формы, так давайте перейдем к коду:

class Form1 
{ 
    string BetweenClickStorage; 
    private void button4_Click(object sender, EventArgs e) 
    { 
     //Load data here 
     BetweenClickStorage = LoadedData; 
    } 
} 

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

+0

совершенным, работал как шарм. Вместе с Math.Abs ​​я наконец получил некоторое чтение от датчика =) спасибо –

0

Если я понять ваш вопрос правильно, ответ просто объявить переменную вне TRY/улова:

//declare variable // 
var measurement; 

// TRY #1 // 
try 
{ 
    //assign value to the variable here 
} 
catch 
{ 
} 

// TRY #2 // 
try 
{ 
// reference variable here 
} 
catch 
{ 
} 
Смежные вопросы