Как бы я использовал и внедрил MaskedTextBox в свое приложение Калькулятор? C # - PullRequest
1 голос
/ 06 апреля 2011

Итак, я работаю над приложением калькулятора в C-Sharp и хочу запретить людям вводить более 1 точки / точки одновременно. Поэтому они не могут печатать «.....» или «1..1» или «1.1.1» На самом деле просто такие вещи ... Я также хотел бы запретить им добавлять алфавитные символы, печатая их с помощью клавиатуры, такие символы, как "a, b, c".

Мне сказали использовать MaskedTextBox, и я хочу знать, правильно ли это. Кроме того, если это правильно, как бы я внедрил это в свой код? Я начинающий, когда дело доходит до C #, поэтому я хотел бы получить некоторую помощь (приглушенный для новичка).

Пока что код, который я написал:

    double total1 = 0;
    double total2 = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void btnOne_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnOne.Text;
    }

    private void btnTwo_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnTwo.Text;
    }

    private void btnThree_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnThree.Text;
    }

    private void btnFour_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnFour.Text;
    }

    private void btnFive_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnFive.Text;
    }

    private void btnSix_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnSix.Text;
    }

    private void btnSeven_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnSeven.Text;
    }

    private void btnEight_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnEight.Text;
    }

    private void btnNine_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnNine.Text;
    }

    private void btnZero_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnZero.Text;
    }

    private void btnClear_Click(object sender, EventArgs e)
    {
        txtDisplay.Clear();
    }

    private void btnPlus_Click(object sender, EventArgs e)
    {
        total1 = total1 + double.Parse(txtDisplay.Text);
        txtDisplay.Clear();
    }

    private void btnEquals_Click(object sender, EventArgs e)
    {
        total2 = total1 + double.Parse(txtDisplay.Text);
        txtDisplay.Text = total2.ToString();
        total1 = 0;

    }

    private void btnPoint_Click(object sender, EventArgs e)
    {
        txtDisplay.Text = txtDisplay.Text + btnPoint.Text;
    }

    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void txtDisplay_TextChanged(object sender, EventArgs e)
    {

    }
}

Поэтому я спрашиваю ... как / где мне добавить этот MaskedTextBox - если это правильно? Как мне это реализовать? Что заставляет это работать?

Спасибо!

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

В дополнение к фрагменту MusiGenesis, вы можете использовать событие KeyPress текстового поля для предотвращения нецифровых и многократных периодов.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if(char.IsDigit(e.KeyChar) || ((e.KeyChar == '.' && textBox1.Text.IndexOf(".") < 0) ) )
    {
        textBox1.Text += e.KeyChar;
    }
    e.Handled = true;
}

или установить свойство ReadOnly текстового поля на true.

1 голос
/ 24 мая 2013

Вы также можете сохранить большой объем кода, если вы напишите код события click только один раз и назначите для него обработчики события click для всех цифровых кнопок:

    private void btnNumber_Click(object sender, EventArgs e)
    {
        if (sender is Button)
            txtDisplay.Text = txtDisplay.Text + ((Button)sender).Text;
    }

Таким образом, вы можете сохранить всеиз следующих методов

private void btnZero_Click(object sender, EventArgs e) (...)
private void btnOne_Click(object sender, EventArgs e) (...)
.
.
.
private void btnNine_Click(object sender, EventArgs e) (...)
1 голос
/ 06 апреля 2011

Вам не нужно MaskedTextBox, поскольку вы моделируете клавиатуру с помощью кнопок. Просто поместите что-то вроде этого в btnPoint_Click:

private void btnPoint_Click(object sender, EventArgs e)     
{         
    if (!txtDisplay.Text.Contains("."))
    {
        txtDisplay.Text = txtDisplay.Text + btnPoint.Text;    
    } 
} 
...