c# - 如何在文本框中只允许数字数据
问题描述
我是一名新的 C# 学生,我一直在从事我的项目,但是,我似乎无法让我的一些文本框正常运行。我需要确保我的一些文本框只接收数字数据。目前,当我用与他们应该做的相反的数值填写文本框时,我的药物、手术、实验室和康复文本框会返回他们的 messageBox 消息。
private void calculateButton_Click(object sender, EventArgs e)
{
int days;
double medication;
double surgery = 0;
double labs = 0;
double rehab = 0;
if (int.TryParse(numDaysInHosp.Text, out days))
if (days < 0)
{
MessageBox.Show("Days In Hospital must be greater than zero.");
}
if (double.TryParse(medsCharges.Text, out medication))
if (medsCharges.Text != "")
{
MessageBox.Show("Charges for Medication cannot be blank.");
medsCharges.Focus();
}
if (double.TryParse(surgCharges.Text, out surgery))
if (surgCharges.Text != "")
{
MessageBox.Show("Surgical Charges cannot be blank.");
surgCharges.Focus();
}
if (double.TryParse(labFees.Text, out labs))
if (labFees.Text != "")
{
MessageBox.Show("Lab Fees cannot be blank.");
labFees.Focus();
}
if (double.TryParse(rehabCharges.Text, out rehab))
if (rehabCharges.Text != "")
{
MessageBox.Show("Rehabilitation Charges cannot be blank.");
rehabCharges.Focus();
}
{
double dayChrgs = CalcDayChrgs(days);
double miscChrgs = CalcMiscChrgs(medication, surgery, labs, rehab);
double totlCost = CalcTotlChrgs(dayChrgs, miscChrgs);
stayChrgsLabel.Text = dayChrgs.ToString("c");
miscChrgsLabel.Text = miscChrgs.ToString("c");
totlCostLabel.Text = totlCost.ToString("c");
memberLevelLabel.Text = memberLevelLabel.ToString();
}
}
我们不允许使用 keypress 方法来执行此操作。此外,我也尝试使用以下几行,但结果为负。
(string.IsNullOrEmpty(TextBox.Text))
if(TextBox.Text == "")
if(TextBox.Text.Length == 0)
String.IsNullOrWhitespace()
我在代码中没有看到什么?
解决方案
你的方法有很多问题。
如果内容可以解析为预期的类型,您编写的每张支票都只能显示一条消息。如果它无法解析,那么您将永远不会进入
if
块,因此不会显示任何消息。这与您想要的相反,您希望在消息无法解析为预期类型时显示消息。对空白的检查也没有意义。
if (medsCharges.Text != "")
{
MessageBox.Show("Charges for Medication cannot be blank.");
}
如果正在显示消息,则文本框不是空白的(因为它是!= ""
)。if
结合第一点,对于您编写的大多数陈述,您对真/假的期望似乎是相反的
因为您是嵌套语句,所以如果两个检查都成功
if
,您只会显示错误消息。但通常,如果任一验证检查失败,您会希望显示错误。将错误检查与或 ( ) 结合起来,以确保任何验证失败都会导致采取适当的措施。||
即使您向用户显示消息,您仍然没有停止执行该方法的其余部分。消息对于 UX 目的来说很好,但你不应该盲目地依赖用户在得知它们时遵循规则。当验证失败时,停止计算(例如使用
return
语句);这没有任何意义:
memberLevelLabel.Text = memberLevelLabel.ToString();
您将标签本身转换为字符串,然后将相同标签的Text
值设置为该字符串。达到什么目的?
- 你正在做作业:
我是一名新的 C# 学生,我一直在做我的项目
我们不允许使用 keypress 方法来执行此操作。
如果您在完成分配的任务时遇到困难,请与您的老师交谈。您的代码中对逻辑评估存在很深的误解,并且没有任何 StackOverflow 答案能够深入研究这一切。
推荐阅读
- c# - 在 C# 中合并间隔与合并距离
- mysql - 未标记空时的 SQL 案例
- flutter - video_player 插件无法播放视频 - Flutter
- c++ - 制作一组向量对
- azure - 如何使用 Open Id Connect 在 .net core 2.2 api 中使用令牌验证请求
- reactjs - 类型错误:images.map 不是函数
- java - 未定义类型 SecurityConfiguration 的方法 withDefaults()
- android-studio - Flutter show download failed with java.lang.IllegalArgumentException after download 100%
- mysql - LIMIT 从带有 JOIN 的 SELECT 语句返回不正确的结果(在 mySQL 中)
- javascript - 将多维数组插入多维数组 - Javascript