WPF应用程序|文本框不接受"0"传真号码开始处

本文关键字:quot 号码 开始 应用程序 不接受 WPF 文本 | 更新日期: 2023-09-27 18:06:32

我有这个应用程序开发的前开发人员在这个公司。

现在我正在尝试做一些小的修复。

这是一个不接受"0"开头的文本框。

我的意思是传真号码可以是0912258685,但问题是文本框在最开始得到"912258685"而不是"0"。

下面是该文本框的代码。

            <TextBox x:Name="tbFax" Height="25" TextWrapping="Wrap" Margin="0,0,87,0"
                     Text="{Binding UpdateSourceTrigger=PropertyChanged, Path=FaxNo,
                            ValidatesOnDataErrors=True, NotifyOnValidationError=True}" TextChanged="tbFax_TextChanged"/>

一些CS代码如下。这个文本框是可选的。所以使用下面的代码。

          if(!(string.IsNullOrEmpty(tbFax.Text)))
            {
                try
                {
                    //fax = int.Parse(tbFax.Text.Trim());
                    fax = Int64.Parse(tbFax.Text);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
              }

其余部分代码如下:

try
                    {
                        if (!(CheckAlreadyExist(tbName.Text.Trim().ToString())))
                        {
                            AgentAccount dtAgent = new AgentAccount();
                            dtAgent.Name = tbName.Text;
                            dtAgent.ContactNo = Int64.Parse(tbContactNo.Text);
                            dtAgent.Address = tbAddress.Text;
                            dtAgent.City = cmbCity.Text;
                            dtAgent.Country = cmbCountry.Text;
                            dtAgent.Balance = balance;
                            dtAgent.AccStatus = "Active";
                            dtAgent.CreationDate = DateTime.Now;
                            dtAgent.Fax  = fax;
                            dtAgent.email = tbEmail.Text;
                            dtAgent.GbBranchId = GlobalClass.GbBranchID;
                            dc.AgentAccounts.InsertOnSubmit(dtAgent);
                            dc.SubmitChanges();
                            newAgentId = dtAgent.AgentID;
                            dc.SubmitChanges();
                            string messageBoxText = "Account Created Successfully'n Your Account No = '" + newAgentId +
                                                            "''nDo You Want to take Receipt! ";
                            string caption = "Agent";
                            MessageBoxButton button = MessageBoxButton.YesNo;
                            MessageBoxImage icon = MessageBoxImage.Warning;
                            string result = MessageBox.Show(messageBoxText, caption, button, icon).ToString();
                            if (result == "Yes")
                            {
                                GetPrint(newAgentId);
                            }
                            else
                            {
                            }
                            tbName.Text = "";
                            tbContactNo.Text = "";
                            tbAddress.Text = "";
                            tbFax.Text = "";
                            tbEmail.Text = "";
                            cmbCity.SelectedIndex = -1;
                            cmbCountry.SelectedIndex = -1;
                        }
                        else
                        {
                            string msgtext = "Agent with same name already exist. You can't create same agent twice. Try with Different name!";
                            string caption = "Error";
                            MessageBoxButton button = MessageBoxButton.OK;
                            MessageBoxImage image = MessageBoxImage.Error;
                            MessageBox.Show(msgtext, caption, button, image).ToString();
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }

我是否需要改变上面的代码,或者我是否需要在其他东西中看到它?? ?

信息:

我不能在表单中输入0。我的意思是,即使我试着一直按0,它也不会出现在乞求中,就像我的0按钮被禁用了一样。所以我认为这不是保存按钮的问题,而是表单的问题。我不确定,因为我不是一个真正的。net经验丰富的开发人员。

=-=-=-=-=-=-=-

我认为这个事件处理程序是负责任的,但也不确定作为ContactNo工作良好..

private void tbFax_TextChanged(object sender, TextChangedEventArgs e)
{
    ValidateInputIntegerTextBox(sender);
}
private void tbContactNo_TextChanged(object sender, TextChangedEventArgs e)
{
    ValidateInputIntegerTextBox(sender);
}
{
    TextBox textBox = sender as TextBox;
    Int32 selectionStart = textBox.SelectionStart;
    Int32 selectionLength = textBox.SelectionLength;
    String newText = String.Empty;
    int count = 0;
    foreach (Char c in textBox.Text.ToCharArray())
    {
        if (Char.IsDigit(c) || Char.IsControl(c) || (c == '0' && count == 0))
        {
            newText += c;
            if (c == '0')
                count += 1;
        }
    }
    textBox.Text = newText;
    textBox.SelectionStart = selectionStart <= textBox.Text.Length ? selectionStart : textBox.Text.Length;
}

完整的代码可在PasteBin..

http://pastebin.com/Zr1ZckJr

完整的CS文件

WPF应用程序|文本框不接受"0"传真号码开始处

您的应用程序存在多个问题和潜在的设计缺陷。

首先,您需要将电话/传真号码视为string数据而不是数字。想想看——电话号码可以有括号(例如(03)95551234),可以有空格(例如555 1234),可以有破折号(例如555-1234)等等。

第二个,现在您已经将电话/传真号码视为字符串,您不需要尝试将它们转换为数字。

这样做:Int64.Parse(tbContactNo.Text);将抛出异常,例如,如果您在tbContactNo中有空格,括号或破折号。

第三个,您需要更新您的数据库表,以便您存储这些数字的字段是文本字段,而不是数字字段。例如,使用NVARCHAR(20)而不是INT

这种数据类型更改的副作用是,像dtAgent.Fax这样的字段需要从long更改为string。这将修复你的" Cannot implicitly convert type string to long "错误。

最后,根据应用程序的需求,可以删除电话/传真号码TextBox控件上的事件处理程序,或者更新以更好的方式处理输入。

如果您想为电话/传真号码强制执行特定的格式,您最好使用掩码输入,例如Extended WPF Toolkit

提供的输入。

您应该将传真/电话号码存储为文本。但是如果你坚持把它作为一个数字,并且在解析指令中跳过的前零有问题;您可以保留传真号码字符串的长度,当需要时,在整数的其余部分之前加零:

var faxNumber = Int64.Parse(tbFax.Text);
var faxNumberLenght = tbFax.Text.Length;

当然还有0位的个数,计算为:

var zeroCounts = faxNumberLenght - (faxNumber.ToString().Length);