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文件
您的应用程序存在多个问题和潜在的设计缺陷。
首先,您需要将电话/传真号码视为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);