У меня сейчас нет средств, чтобы проверить, верно ли это сейчас, но попробуйте:
Я думаю, это (работа до двух нажатий H) может быть связано с этой строкой в вашем коде:
int count = txt_Chemical.Text.TakeWhile(c => c == 'H').Count();
Вот как работает TakeWhile - он просматривает список с самого начала и останавливается при первом появлении, которое не удовлетворяет предикату..
Итак, когда вы делаете:
txt_Chemical.Text = "H" + count;
Ваша третья буква становится значением, которое содержит счет.Поэтому в следующий раз, когда TakeWhile разрывается на втором элементе как «HH2» .TakeWhile (c => c == 'H') возвращает коллекцию из двух элементов.(количество нажатий на H).
Дополнительно:
- используйте
var
вместо int
до count
- если вы измените тип позже, это поможет - , если вы заботитесь оточность - и для химикатов я полагаю, что вы делаете, не используйте двойной (1,006).Используйте десятичные дроби, которые гарантируют точность (1,006 м).