Как прекратить вычислять значения по событию клика, если в полях winform нет изменений - PullRequest
0 голосов
/ 06 октября 2019

Я новичок в программировании. Я учусь сам, и это конец моей первой недели. Я создаю форму C # для расчета страховой суммы в соответствии с требованиями пользователя. При нажатии кнопки «Рассчитать страховую цену» она рассчитывает общую сумму и показывает ее в TotalLabelФорма вычисляет и показывает итоговую сумму точно, но только в первый раз. Например, если его 325,5 $ в первый раз, если я снова нажму кнопку «Рассчитать страховую цену» без изменения учетных данных в форме, такой как возраст, страна, больной и т. Д., Она пересчитает и отобразит 600 $ и при каждом клике пересчитает.

Iхотите рассчитать только общую сумму в случае, если какое-либо поле было изменено. Если нет никаких изменений в учетных данных, это не должно пересчитать, и если это пересчитывает значение TotalLabel, не должно измениться, который не в моем случае.

Вот мой код. Пожалуйста, подскажите в чем ошибка.

public partial class Mainform : Form
{

   decimal baseinsuranceprice = 50.5m;
    public Mainform()
    {
        InitializeComponent();
    }
    private void Insuranceprice_Click(object sender, EventArgs e)
    {
        int ag = int.Parse(Agetextbox.Text);
        age(ag, baseinsuranceprice);
        string coun = Countrycombobox.SelectedItem.ToString();
        country(coun, baseinsuranceprice);
        premiuminsurance(baseinsuranceprice);
        Noclaim(baseinsuranceprice);
        Sick(baseinsuranceprice);
        decimal minimuminsuranceprice = 80.5m;
        if (baseinsuranceprice < minimuminsuranceprice)
        baseinsuranceprice = minimuminsuranceprice;
        TotalLabel.Text = "$" + baseinsuranceprice.ToString();
    }
    public decimal age(int a, decimal b)
    {
        if (a > 30)
        {
            baseinsuranceprice = baseinsuranceprice + 50;
        }
        else
        {
            baseinsuranceprice = baseinsuranceprice + 100;
        }
        return baseinsuranceprice;
    }
    public decimal country(string a, decimal c)
    {
        if (a == "USA")
        {
            baseinsuranceprice = baseinsuranceprice + 40;
        }
        else
        {
            baseinsuranceprice = baseinsuranceprice + 50;
        }
        return baseinsuranceprice;
    }
    public decimal premiuminsurance(decimal f)
    {
        if (PremiumInsuranceRadioButtonYes.Checked)
            baseinsuranceprice = baseinsuranceprice + 100;

        return baseinsuranceprice;
    }
    public decimal Noclaim(decimal g)
    {
        if (NoClaimDiscountRadioButtonYes.Checked)
            baseinsuranceprice -= 25;
        else if (NoClaimDiscountRadioButtonNo.Checked)
            baseinsuranceprice += 50;
        return baseinsuranceprice;
    }
    public decimal Sick(decimal h)
    {
        if (SickCoverRadioButtonYes.Checked)
            baseinsuranceprice += 50;

        return baseinsuranceprice;
    }  
}

}

введите описание изображения здесь

1 Ответ

1 голос
/ 07 октября 2019

Я считаю, что ваша самая значительная ошибка в том, что вы держите

decimal baseinsuranceprice = 50.5m;

как поле вашего Mainform класса. Вот почему вы получаете новый результат каждый раз, когда нажимаете кнопку с теми же параметрами (после первого расчета baseinsuranceprice больше не 50,5 м).

Самое простое решение - это «сброс»это значение к исходному 50,5 м по одному перед каждым расчетом.

Мое предложение состоит в том, чтобы реализовать ваш алгоритм расчета цены в виде чистой функции (может быть, вы даже хотите иметь егокак отдельный класс, и, возможно, вы захотите написать для него несколько тестов), поэтому вы даете только начальные параметры своей функции / классу, и он вычисляет вам результат.

Таким образом, у вас не будетлюбая зависимость от состояния вашей формы. Более того, если вам нужно сохранить базовую страховую цену в вашей системе, лучше, чтобы она была постоянной или даже считываемой из конфигурации.

На мой взгляд, нет ничего плохого в пересчете. значение, если этот расчет не занимает слишком много времени. В вашем случае это нормально для запуска расчета при каждом клике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...