C# 从TextBox类派生类
我试图从TextBox类派生一个名为NumBox的自定义类,并为此类创建一个setter和getter,但当我运行程序时,我得到一个运行时异常“FormatException未被用户代码处理”。在我看来,这与此有关。Text不是整数,但我程序的输入是int。错误发生在以下行:C# 从TextBox类派生类,c#,asp.net,C#,Asp.net,我试图从TextBox类派生一个名为NumBox的自定义类,并为此类创建一个setter和getter,但当我运行程序时,我得到一个运行时异常“FormatException未被用户代码处理”。在我看来,这与此有关。Text不是整数,但我程序的输入是int。错误发生在以下行:return Convert.ToInt16(this.Text) 谢谢你的帮助 请在下面找到我的代码: default.aspx <%@ Page Language="C#" AutoEventWireup="tru
return Convert.ToInt16(this.Text)代码>
谢谢你的帮助
请在下面找到我的代码:
default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<glm:numbox ID="NumBox1" runat="server" Style="position: relative" />
<asp:Button ID="Button_SquareIt" runat="server" Style="position: relative"
Text="Square It" onclick="Button_SquareIt_Click" />
</div>
</form>
</body>
</html>
请尝试以下操作:
public int Num {
set {
this.Text = value.ToString();
}
get {
return Int16.Parse(this.Text);
}
}
我建议使用TryParse
方法来确保您只尝试解析实际数字。请注意,如果您的文本
属性为空
,则Parse和TryParse将引发异常。您应该测试空值,如果为空,则返回0
或使属性返回可为空
此外,还应该解析为返回的类型。在解析Int16
时,属性返回int
,请尝试以下操作:
public int Num {
set {
this.Text = value.ToString();
}
get {
return Int16.Parse(this.Text);
}
}
我建议使用TryParse
方法来确保您只尝试解析实际数字。请注意,如果您的文本
属性为空
,则Parse和TryParse将引发异常。您应该测试空值,如果为空,则返回0
或使属性返回可为空
此外,还应该解析为返回的类型。解析Int16
时,属性返回int
。好的,我已经详细研究了这个问题,找到了问题的原因
创建一个新的NumBox实例,然后对其执行操作。您没有引用在页面上创建的实例
如果您没有关联的designer.cs文件,那么这应该可以:
public partial class _Default : System.Web.UI.Page
{
GLM.NumBox NumBox1;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_SquareIt_Click(object sender, EventArgs e)
{
NumBox1.Num = NumBox1.Num * NumBox1.Num;
}
}
如果您确实有一个关联的designer.cs文件,那么请删除NumBox1的声明。好的,我已经详细研究了这个问题,并找到了问题的原因
创建一个新的NumBox实例,然后对其执行操作。您没有引用在页面上创建的实例
如果您没有关联的designer.cs文件,那么这应该可以:
public partial class _Default : System.Web.UI.Page
{
GLM.NumBox NumBox1;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_SquareIt_Click(object sender, EventArgs e)
{
NumBox1.Num = NumBox1.Num * NumBox1.Num;
}
}
如果您确实有一个关联的designer.cs文件,那么请删除NumBox1的声明。为了补充这一点,您可以使用Int64.TryParse(…)来测试它是否是有效的Int16。这与我当前在程序no@Azzi中的代码完全相同。。。您有返回Convert.ToInt16(this.Text)代码>为了补充这一点,您可以使用Int64.TryParse(…)来测试它是否是有效的Int16。这与我目前在程序no@Azzi中使用的代码完全相同。。。您有返回Convert.ToInt16(this.Text)代码>这就是引发异常的原因,输入是integerApologies,我在您的默认类定义中遗漏了一行。我已经对我的回复进行了相应的编辑。谢谢您的关注,您能更详细地解释一下问题是什么吗。如果我添加您的代码,我会得到以下错误:“\u Default.NumBox1”和“\u Default.NumBox1”之间的错误2含糊不清这是因为您有一个设计器文件,只需删除GLM.NumBox NumBox1行,就可以了。要更详细地解释这个问题。。。在aspx页面中创建一个名为NumBox1的NumBox实例,这实际上就是您在页面中看到的框。然后,在您的代码隐藏(默认值的类定义)中定义并实例化一个新的NumBox,并将其称为n。这不是您在页面中看到的numbox。然后设置n的Num属性,该属性的Text属性将设置为空字符串,这将导致错误。这就是引发异常的原因,输入是integerApologies,我在您的默认类定义中遗漏了一行。我已经对我的回复进行了相应的编辑。谢谢您的关注,您能更详细地解释一下问题是什么吗。如果我添加您的代码,我会得到以下错误:“\u Default.NumBox1”和“\u Default.NumBox1”之间的错误2含糊不清这是因为您有一个设计器文件,只需删除GLM.NumBox NumBox1行,就可以了。要更详细地解释这个问题。。。在aspx页面中创建一个名为NumBox1的NumBox实例,这实际上就是您在页面中看到的框。然后,在您的代码隐藏(默认值的类定义)中定义并实例化一个新的NumBox,并将其称为n。这不是您在页面中看到的numbox。然后设置n的Num属性,该属性的Text属性将设置为空字符串,这将导致错误。
public partial class _Default : System.Web.UI.Page
{
GLM.NumBox NumBox1;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_SquareIt_Click(object sender, EventArgs e)
{
NumBox1.Num = NumBox1.Num * NumBox1.Num;
}
}