3

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;
        }
    }
}
4

7 回答 7

1

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

RightToLeft 属性用于语言从右到左书写的国际应用程序,例如希伯来语或阿拉伯语。当此属性设置为 RightToLeft..::.Yes 时,包含文本的控件元素将从右到左显示。

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

于 2010-02-22T21:42:20.993 回答
1

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

于 2010-02-22T21:43:06.283 回答
1

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

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

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

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

于 2010-02-22T21:35:18.330 回答
0

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

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

那好吧

谢谢大家的帮助

非常赞赏

X

于 2010-02-23T00:11:06.503 回答
0

也许尝试不同的方法:

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

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

于 2010-02-22T21:17:05.943 回答
0

我想你在这里有几件事。

从外观上看,您已经设置:

txt屏幕。从右到左= 真;

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

txtScreen.AppendText(".00");

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

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

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

然后你将不得不开始编写疯狂的验证规则来避免像 567.00.1 这样的值。

于 2010-02-22T21:27:38.217 回答
0

你可以试试这个,它对我有用:

private void btndot_Click(object sender, EventArgs e)
{
    if (txtbox.Text == "0" && txtbox.Text != null)
    {
        txtbox.Text = ".";
    }
    else
    {
        txtbox.Text = txtbox.Text + ".";
    }
}
于 2022-02-16T09:22:13.163 回答