我如何在我的Calculator应用程序中使用和实现MaskedTextBox? C#

时间:2011-04-06 00:30:50

标签: c# calculator maskedtextbox

所以我正在研究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 个答案:

答案 0 :(得分:1)

您不需要MaskedTextBox,因为您正在使用按钮模拟键盘。在btnPoint_Click

中添加类似的内容
private void btnPoint_Click(object sender, EventArgs e)     
{         
    if (!txtDisplay.Text.Contains("."))
    {
        txtDisplay.Text = txtDisplay.Text + btnPoint.Text;    
    } 
} 

答案 1 :(得分:1)

除了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

答案 2 :(得分:1)

如果您只编写一次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) (...)