2016-11-19 2 views
0

Я пытаюсь умножить свой ввод меток на ввод числа в текстовое поле, но все время сталкиваюсь с проблемами ... Я также пытаюсь сохранить значения меток неизменными, если нет ввода в текстовое поле 3,4,5. Например, если я поместил 3.20 в текстовое поле 3, он обновит метку 1 & 4 с новым значением, но не сохранит оставшиеся метки с исходными значениями.C# Умножение текста метки с помощью ввода текстового поля.

Очень потеряно ... любая помощь очень ценится.

То, что я пытаюсь выполнить:

На данном этапе Textbox для вступающих галлонов становится активным, так и кнопкой Fill. Пользователь вводит количество галлонов в текстовое поле и нажимает «Заполнить». Стоимость заказа газа отображается в другом текстовом поле, которое используется только для отображения. Пакет расчета цены заказа в функцию.

Кнопка цены: отображает новый набор элементов управления, видимый в нижней половине формы, показывающий цены на галлон для каждого сорта топлива (это новые элементы управления, отличные от ярлыков в верхней половине, и чтобы показать менеджеру, какие текущие цены], а также текстовые поля для ввода новых цен для каждой и две кнопки «Обновить» и «Отмена» в третьей строке. Обновление обновит цены, считанные из текстовых полей, в качестве новых значений цены за галлон. [Обратите внимание, что эти новые значения должны быть отражены на ярлыках, указанных ниже, в верхних половинах формы. Эти ярлыки должны всегда показывать текущую цену, поэтому любое изменение, которое должен выполнять менеджер по ценам, должно также изменить эти ярлыки.] Отмена ничего не изменит. После того, как выбор сделан, элементы управления в нижней половине снова исчезнут.

private int gasPrice = 0; 
    private int gasPrice1 = 0; 
    private int gasPrice2 = 0; 
    private int numGallons = 0; 
    private double total = 0; 
    private bool regularButton; 
    private bool premiumButton; 
    private bool xtraButton; 

    public Form1 () 
    { 
     InitializeComponent(); 
    } 

    private void regButton_Click (object sender, EventArgs e) 
    { 
     regButton.BackColor = Color.Green; 
     regButton.ForeColor = Color.Red; 

     textBox1.Enabled = true; 

     regularButton = true; 
     xtraButton = false; 
     premiumButton = false; 
    } 

    private void extraButton_Click (object sender, EventArgs e) 
    { 
     extraButton.BackColor = Color.Green; 
     extraButton.ForeColor = Color.Red; 

     textBox1.Enabled = true; 

     regularButton = false; 
     xtraButton = true; 
     premiumButton = false; 
    } 

    private void premButton_Click (object sender, EventArgs e) 
    { 
     premButton.BackColor = Color.Green; 
     premButton.ForeColor = Color.Red; 

     textBox1.Enabled = true; 

     regularButton = false; 
     xtraButton = false; 
     premiumButton = true; 
    } 

    private void fillButton_Click (object sender, EventArgs e) 
    { 
     //double price; 
     int gallons; 
     int price, price1, price2; 

     gasPrice = Convert.ToInt32(label1.Text); 
     gasPrice1 = int.Parse(label2.Text); 
     gasPrice2 = int.Parse(label3.Text); 
     numGallons = int.Parse(textBox1.Text); 
     //gallons = int.Parse(textBox1.Text); 
     //price = int.Parse(label1.Text); 
     //price1 = int.Parse(label2.Text); 
     //price2 = int.Parse(label3.Text); 


     if (regularButton == true) 
     { total = gasPrice * numGallons; } 
     else if (xtraButton == true) 
     { total = gasPrice1 * numGallons; } 
     else 
     { total = gasPrice2 * numGallons; } 

     textBox2.Text = total.ToString("c"); 
     textBox2.Visible = true; 

     if (textBox1.Text == "0") 
     { MessageBox.Show("Operation Cancelled"); } 
     ResetData(); 



    } 

    private void finishButton_Click (object sender, EventArgs e) 
    { 

     ResetData(); 





    } 

    private void ResetData () 
    { 

     //Resets buttons back to default settings 
     regButton.BackColor = default(Color); 
     regButton.ForeColor = default(Color); 
     extraButton.BackColor = default(Color); 
     extraButton.ForeColor = default(Color); 
     premButton.BackColor = default(Color); 
     premButton.ForeColor = default(Color); 

     //Clears out both text boxes 
     textBox1.Clear(); 
     textBox2.Clear(); 

     //textboxes are returned to original state 
     textBox1.Enabled = false; 
     textBox2.Visible = false; 




    } 

    private void salesButton_Click (object sender, EventArgs e) 
    { 

    } 

    private void button1_Click (object sender, EventArgs e) 
    { 
     // updates gas price if/when supervisor changes 
     label1.Text = "$" + textBox3.Text; 
     label2.Text = "$" + textBox4.Text; 
     label3.Text = "$" + textBox5.Text; 
     label4.Text = "$" + textBox3.Text; 
     label5.Text = "$" + textBox4.Text; 
     label6.Text = "$" + textBox5.Text; 

    } 

    private void pricesButton_Click (object sender, EventArgs e) 
    { 
     label4.Visible = true; 
     label5.Visible = true; 
     label6.Visible = true; 

     textBox3.Visible = true; 
     textBox4.Visible = true; 
     textBox5.Visible = true; 

     updateButton.Visible = true; 
     cancelButton.Visible = true; 
+0

Какие проблемы вы столкнулись? Пожалуйста, укажите, какая именно помощь вам нужна. – CodingYoshi

+0

Две проблемы, с которыми я сталкиваюсь ... 1 пытается умножить gasPrice * numGallons, у меня есть цена на газ, указанная как текст на этикетке как 3.70, и она говорит, что не может преобразовать строку в int. Вторая проблема - при вводе нового значения в текстовое поле 3, оно будет обновлять метки 1 и 4, но в ответ оставить метки 2,3,5,6 всего лишь $, а не значение, указанное в тексте для этикеток. – rpdeleon

+0

Ваша первая проблема заключается в том, что вы пытаетесь преобразовать текст с метки в int и не выполняете, потому что у вас могут быть символы, которые не являются цифрами. Вторая проблема заключается в том, что ваш код в button1_Click обновляет метки 1 и 4 с помощью textbox3, и, конечно, у других лейблов будет только знак доллара, если в текстовых полях, для которых эти ярлыки отображаются, ничего нет. – CodingYoshi

ответ

0

Выберите текстовое поле, для которого вы только хотите разрешить ввод числовых значений, в окне свойств найдите значок события (lightnig), а затем дважды щелкните событие KeyPress. Это создаст обработчик. Поместите этот код в обработчик:

if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && 
    (e.KeyChar != '.')) 
{ 
     e.Handled = true; 
} 

// only allow one decimal point 
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1)) 
{ 
    e.Handled = true; 
} 

Этот код только позволит пользователю вводить числа и десятичную точку в текстовое поле.

Смежные вопросы