如何在 C# 中的 class 中使用 return 语句
How to use return statement inside a class in c#
我是 c# 新手。我有不同文本框的代码块。我决定为此代码创建 class 以用于不同的 windows 形式。
这是我的 windows 表单代码
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace POS.screens
{
public partial class sell : MetroFramework.Forms.MetroForm
{
ConnectionClass cons = new ConnectionClass();
FillComboBox fcb = new FillComboBox();
{
InitializeComponent();
}
public void PriceTextBox_TextChanged(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(QuantityTextBox.Text) || String.IsNullOrEmpty(PriceTextBox.Text))
{
TotalTextBox.Text = 0.ToString();
}
else
{
fcb.CheckNumbersOnly(PriceTextBox);
int Quantity = Convert.ToInt32(QuantityTextBox.Text);
decimal Price = Convert.ToDecimal(PriceTextBox.Text);
decimal Total = Price * Quantity;
TotalTextBox.Text = Total.ToString();
}
}
}
}
这是Class代码
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace POS
{
class FillComboBox
{
ConnectionClass cons = new ConnectionClass();
public void CheckNumbersOnly(dynamic TextBoxName)
{
if (!Regex.IsMatch(TextBoxName.Text, @"[0-9]+(\.[0-9][0-9]?)?") && (TextBoxName.Text != ""))
{
MessageBox.Show(TextBoxName.Text);
return;
}
if (!decimal.TryParse(TextBoxName.Text, out decimal PriceValue))
{
MessageBox.Show("Please Enter Correct Number");
TextBoxName.Clear();
return;
}
}
}
}
一切正常,但是 return 语句不工作。如果用户插入字母或不正确的数字。程序应显示消息并停止进一步工作,但它不会停止。它显示消息和 运行 下一条语句并给出错误。
当我直接使用这段代码而不创建 class 时它工作正常。
我认为,我在 class 中使用 return 语句的方式是错误的。
我是新学习者。
提前致谢。
有多种方法可以做到这一点,一个简单的方法是将 CheckNumbersOnly
方法转换为 return 布尔值。最好也重命名它(为了便于阅读),然后在 PriceTextBox_TextChanged
方法中,您将检查 return 是否为真,只有在为真时才继续。
综合起来:
验证码:
public bool NumbersAreValid(string value)
{
if (!Regex.IsMatch(value, @"[0-9]+(\.[0-9][0-9]?)?") && (value != ""))
{
//Note: this isn't a very good error message, and the above Match
// check seems to redo the work of `TryParse` bellow
MessageBox.Show(value);
//Let caller know this failed validation
return false;
}
if (!decimal.TryParse(value, out decimal PriceValue))
{
MessageBox.Show("Please Enter Correct Number");
return false;
}
return true;
}
表单代码:
public void PriceTextBox_TextChanged(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(QuantityTextBox.Text) || String.IsNullOrEmpty(PriceTextBox.Text))
{
TotalTextBox.Text = 0.ToString();
}
else
{
//When NumbersAreValid returns false, this if statement ends processing
if (!fcb.NumbersAreValid(PriceTextBox.Text)) return;
int Quantity = Convert.ToInt32(QuantityTextBox.Text);
decimal Price = Convert.ToDecimal(PriceTextBox.Text);
decimal Total = Price * Quantity;
TotalTextBox.Text = Total.ToString();
}
}
还有其他一些注意事项,您的 PriceTextBox_TextChanged
方法重复了验证方法的工作(通过重新解析数字)..因此验证方法可以代替 return 一个小数点或抛出异常 - 异常的内容将是要在 MessageBox
中显示的消息。然后,您需要将验证尝试包装在 try {} catch{}
块中。您似乎也使用了 QuantityTextBox
没有任何验证 - 但也许这只是为了这个例子。
我是 c# 新手。我有不同文本框的代码块。我决定为此代码创建 class 以用于不同的 windows 形式。
这是我的 windows 表单代码
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace POS.screens
{
public partial class sell : MetroFramework.Forms.MetroForm
{
ConnectionClass cons = new ConnectionClass();
FillComboBox fcb = new FillComboBox();
{
InitializeComponent();
}
public void PriceTextBox_TextChanged(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(QuantityTextBox.Text) || String.IsNullOrEmpty(PriceTextBox.Text))
{
TotalTextBox.Text = 0.ToString();
}
else
{
fcb.CheckNumbersOnly(PriceTextBox);
int Quantity = Convert.ToInt32(QuantityTextBox.Text);
decimal Price = Convert.ToDecimal(PriceTextBox.Text);
decimal Total = Price * Quantity;
TotalTextBox.Text = Total.ToString();
}
}
}
}
这是Class代码
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace POS
{
class FillComboBox
{
ConnectionClass cons = new ConnectionClass();
public void CheckNumbersOnly(dynamic TextBoxName)
{
if (!Regex.IsMatch(TextBoxName.Text, @"[0-9]+(\.[0-9][0-9]?)?") && (TextBoxName.Text != ""))
{
MessageBox.Show(TextBoxName.Text);
return;
}
if (!decimal.TryParse(TextBoxName.Text, out decimal PriceValue))
{
MessageBox.Show("Please Enter Correct Number");
TextBoxName.Clear();
return;
}
}
}
}
一切正常,但是 return 语句不工作。如果用户插入字母或不正确的数字。程序应显示消息并停止进一步工作,但它不会停止。它显示消息和 运行 下一条语句并给出错误。
当我直接使用这段代码而不创建 class 时它工作正常。 我认为,我在 class 中使用 return 语句的方式是错误的。 我是新学习者。 提前致谢。
有多种方法可以做到这一点,一个简单的方法是将 CheckNumbersOnly
方法转换为 return 布尔值。最好也重命名它(为了便于阅读),然后在 PriceTextBox_TextChanged
方法中,您将检查 return 是否为真,只有在为真时才继续。
综合起来:
验证码:
public bool NumbersAreValid(string value)
{
if (!Regex.IsMatch(value, @"[0-9]+(\.[0-9][0-9]?)?") && (value != ""))
{
//Note: this isn't a very good error message, and the above Match
// check seems to redo the work of `TryParse` bellow
MessageBox.Show(value);
//Let caller know this failed validation
return false;
}
if (!decimal.TryParse(value, out decimal PriceValue))
{
MessageBox.Show("Please Enter Correct Number");
return false;
}
return true;
}
表单代码:
public void PriceTextBox_TextChanged(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(QuantityTextBox.Text) || String.IsNullOrEmpty(PriceTextBox.Text))
{
TotalTextBox.Text = 0.ToString();
}
else
{
//When NumbersAreValid returns false, this if statement ends processing
if (!fcb.NumbersAreValid(PriceTextBox.Text)) return;
int Quantity = Convert.ToInt32(QuantityTextBox.Text);
decimal Price = Convert.ToDecimal(PriceTextBox.Text);
decimal Total = Price * Quantity;
TotalTextBox.Text = Total.ToString();
}
}
还有其他一些注意事项,您的 PriceTextBox_TextChanged
方法重复了验证方法的工作(通过重新解析数字)..因此验证方法可以代替 return 一个小数点或抛出异常 - 异常的内容将是要在 MessageBox
中显示的消息。然后,您需要将验证尝试包装在 try {} catch{}
块中。您似乎也使用了 QuantityTextBox
没有任何验证 - 但也许这只是为了这个例子。