Опресняване на форма при смяна на стойност

Опресняване на форма при смяна на стойност

GeorgiGG avatar GeorgiGG 6 Точки

Опресняване на форма при смяна на стойност

Здравейте,

правейки графичното приложение за изчисляване на лева към евро (работи си като пушка) се натъкнах на проблем. Пускам формата, но при смяна на стойността на левовете (NummericUpDown контрола) резултата не се обновява автоматично, а трябва да натискам всеки път enter. Има ли някаква скрита опция или настройка за автоматичен "рефреш" на формата?

Ето как въвеждам стойност, която не се обновява автоматично (https://goo.gl/photos/JXnt62UTkHpC1Cw16): вместо да смята за 515 смята за 51 евро.

(OFFTOPIC: Ако някой знае и как да взема URL от снимка в Google Photo нека сподели, тия ми пускат само някакъв линк за споделяне на албума angry)

Кода зад формата:

using System;
using System.Windows.Forms;

namespace CurrencyConverter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ConvertCurrency();
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            ConvertCurrency();
        }

        private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
        {
            ConvertCurrency();
        }
        private void ConvertCurrency()
        {
            var leva = double.Parse(this.numericUpDown1.Text);
            var euro = leva / 1.95583;
            this.Result.Text = string.Format("{0} BGN are {1} EUR", leva.ToString("0.00"), Math.Round(euro, 2).ToString("0.00"));
        }        
    }
}

 

Тагове:
0
Основи на програмирането 09/02/2016 17:53:17
GeorgiGG avatar GeorgiGG 6 Точки

EDIT: Добавянето на MouseUp събитие към моя вариант на кода реши проблема и сега работи като пушка smiley

Интересно, че при този код (от видеото на Светлин Наков) при натискане на контролите на nummericalUpDown резултата се обновява веднага, но пък потребителя не може да въведе 300.45 наведнъж, защото при KeyUp веднага изчислява резултата.

        void Convert()
        {
            var leva = this.numericUpDownAmount.Value;
            var euro = leva / 1.95583m;
            this.labelResult.Text =
                leva.ToString("0.00") + " BGN = " +
                Math.Round(euro, 2) + " EUR";
        }

докато в този вариант на кода, който първоначално написах, при ръчно въвеждане веднага се изчислява, но при ползване на стрелките Up Down пак има забавяне в опресняването на изчислението. Това незнам защо е така, но с един Enter се изчислява в крайна сметка. (вероятно има значение, че аз смятам всичко с double, а не с decimal...незнам)

        void Convert()
        {
            var leva = double.Parse(this.numericUpDownAmount.Text);
            var euro = leva / 1.95583;
            this.labelResult.Text =
                string.Format("{0} BGN are {1} EUR",
                leva.ToString("0.00"),
                Math.Round(euro, 2).ToString("0.00"));
        }

 

0
10/02/2016 17:07:39