Loading...
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
Programming Basics 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.