Как синхронизировать три поля ввода, так чтоб в одном был ввод, а в других отображался результат
1. Создаем три поля ввода типа InputDigitControl
Поля надо назвать соответственно idcC
, idcK
и idcF
для значений в цельсиях, кельвинах и фаренгейтах.
2. Создаем три переменных в коде формы, они будут флагами, показывющими в каком поле происходит ввод:
bool enC = false; bool enK = false; bool enF = false;
3. Для всех полей прописываем общее событие типа Enter
idc_Enter
4. В обработчике события захватываем текущий контрол в отдельную переменную:
InputDigitControl idc = (InputDigitControl)sender;
5. Вытаскиваем последний символ в имени контрола:
string fldID = idc.Name.Substring(3, 1);
6. Организуем switch
, устанавливающий флаги
switch (fldID) { case "C": { enC = true; enK = false; enF = false; }; break; case "K": { enC = false; enK = true; enF = false; }; break; case "F": { enC = false; enK = false; enF = true; }; break; }
Копия функции целиком на PasteBin
7. Событие типа Changed
тоже назначаем одно для всех контролов.
8 Внутри обработчика события анализируем флаги, производим расчеты и выводим результаты.
Копия функции целиком на PasteBin
С помощью моего компонента InputDigitControl
C2K:
K = C + 273.15
C2F:
F = C * 9.0 / 5.0 + 32.0
K2C:
C = K - 273.15
K2F:
F = (K - 273.15) * 9.0 / 5.0 + 32.0
F2C:
C = (F - 32.0) * 5.0 / 9.0
F2K:
K = (F - 32.0) * 5.0 / 9.0 + 273.15