计算器中的小数点c#

时间:2010-02-22 21:06:49

标签: c# decimal calculator

AHHHHH好吧这让我疯了。

为什么我的小数点何时出现在错误的位置,例如

如果我在文本框中有字符串567并单击我希望(或我想要)文本框更改为567的小数点按钮,而是我得到.567

当我添加另一个号码时它只会进入正确的位置,例如如果我有数字4然后在做完上述之后我会得到567.4

编辑:

继承我的全部代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Calculator
{
    public partial class frmCurrencyCalc : Form
    {
        public frmCurrencyCalc()
        {
            InitializeComponent();
        }

        private void cmdZero_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "0";
            }
            else
            {
                txtScreen.AppendText("0");
            }
        }
        private void cmd1_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "1";
            }
            else
            {
                txtScreen.AppendText("1");
            }
        }

        private void cmdTwo_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "2";
            }
            else
            {
                txtScreen.AppendText("2");
            }
        }

        private void cmdThree_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "3";
            }
            else
            {
                txtScreen.AppendText("3");
            }
        }

        private void cmdFour_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "4";
            }
            else
            {
                txtScreen.AppendText("4");
            }
        }

        private void cmdFive_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "5";
            }
            else
            {
                txtScreen.AppendText("5");
            }
        }

        private void cmdSix_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "6";
            }
            else
            {
                txtScreen.AppendText("6");
            }
        }

        private void cmdSeven_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "7";
            }
            else
            {
                txtScreen.AppendText("7");
            }
        }

        private void cmdEight_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "8";
            }
            else
            {
                txtScreen.AppendText("8");
            }
        }

        private void cmdNine_Click(object sender, EventArgs e)
        {
            if (txtScreen.Text == "0")
            {
                txtScreen.Text = "9";
            }
            else
            {
                txtScreen.AppendText("9");
            }
        }

       private void cmdDecimal_Click(object sender, EventArgs e)
      {
          txtScreen.AppendText(".");
          cmdDecimal.Enabled = false;
      }


        private void cmdCancel_Click(object sender, EventArgs e)
        {
            txtScreen.Text = "0";
            cmdDecimal.Enabled = true;
        }
    }
}

6 个答案:

答案 0 :(得分:1)

我的建议是将TextAlign设置为右,但将RightToLeft设置为否。

编辑:话虽如此,这个问题可能与这些设置无关。

我记得有一个朋友在2009年初在Windows Vista上的Visual Studio 2008中发现了类似于此的错误。奇怪的是,在Windows XP上的相同版本的Visual Studio上没有出现同样的问题。

如果您尚未将Visual Studio / .NET 3.5更新为Service Pack 1,我建议您这样做并查看它是否能解决问题。

答案 1 :(得分:1)

RightToLeft看起来是你的问题。 如MSDN中所述,

  

RightToLeft属性用于   国际申请所在地   语言是从右到右写的   左,如希伯来语或阿拉伯语。什么时候   此属性设置为   RightToLeft .. ::。是的,控制元素   显示包含文本的文本   从右到左。

正如之前的答案之一所示,这应该设置为false,但TextAlign设置为Right以模仿真实计算器的外观。

答案 2 :(得分:1)

我的建议是 - 定义业务层。在你的情况下 - 一个双变量。点击按钮后,首先更新变量。然后格式化值。

答案 3 :(得分:0)

也许尝试不同的方法:

private void AddDecimal()
{
    txtScreen.SelectionLength = txtScreen.TextLength;
    txtScreen.SelectedText += ".";
}

(也是您的文本框,文字对齐,右对齐 ...如果不是,可能会导致您的问题。)

答案 4 :(得分:0)

我想你在这里有一些事情。

从它的外观来看,你已经设定了:

  

txtScreen。right to left = true;

如果只追加小数点,则会得到您描述的结果。尝试使用类似的东西:

  

txtScreen.AppendText(” 00" );

这将为您提供您所描述的结果。

你可能会打开一堆蠕虫。当您开始格式化文本框时,您正在将其从保持值更改为演示文稿。例如:

decimal value = 567;
txtScreen.Text = value.ToString("0.00");

然后你必须开始编写疯狂的验证规则以避免像567.00.1等的值。

答案 5 :(得分:0)

只是为了让大家知道谁有兴趣。

我设法以某种方式修复它。我所做的只是在设计代码中删除从右到左的东西,然后将它重新对齐(使用GUI)到右边并且它的工作......奇怪,因为我上次没有做任何不同......

哦,好吧

谢谢大家的帮助

备受好评

X