这是我的代码:
namespace Class_Properties {
public partial class Form1 : Form {
private string firstHeight1 = "";
public int firstHeight {
get {
return Convert.ToInt32( firstHeight1 );
}
}
public Form1() {
InitializeComponent();
}
private void button1_Click( object sender, EventArgs e ) {
firstHeight1 = textBox2.Text;
Form2 secondForm = new Form2();
secondForm.Show();
}
}
}
然后是另一个班级:
namespace Class_Properties {
public partial class Form2 : Form {
public Form2() {
InitializeComponent();
Form1 mainWindow = new Form1();
this.Height = mainWindow.firstHeight;
}
}
}
当我运行时,我输入200
作为textbox2
的值并点击button1
,然后Visual Studio说出以下异常:
我该怎么做才能解决这个错误?
答案 0 :(得分:1)
这是失败:
InitializeComponent();
Form1 mainWindow = new Form1();
this.Height = mainWindow.firstHeight; //<--
无论你在另一个Form1
上做了什么,它都不会出现在这个中,因为它是一个新的实例,所以firstHeight == string.Empty
并且将无法解析。
您必须将现有Form1发送到Form2:
public Form2(Form1 parent)
{
this.Height = parent.firstHeight;
}
// called like so from Form1:
var form2 = new Form2(this);
虽然不可否认,最好只发送你需要的东西:
public Form2(int desiredHeight)
{
this.Height = desiredHeight;
}
// called like so from Form1:
var form2 = new Form2(this.firstHeight);
答案 1 :(得分:0)
firstHeight1抛出异常时的值是多少?
您可能希望查看int.TryParse():
int output = 0;
int.TryParse(firstHeight1, out output);
return output;
如果无法解析该值,则不会设置output
,而不是引发异常。
有关int.TryParse的更多信息:http://msdn.microsoft.com/en-us/library/f02979c7.aspx
编辑:问题是你正在重新实例化Form1,并且从未在Form2的新实例Form1中设置该值。您应该将Form2中的属性设置为该值。
class Form2
{
public int FirstHeight { get; set; }
}
...
Form2 form2 = new Form2();
form2.FirstHeight = this.FirstHeight;
form2.Show();
答案 2 :(得分:0)
由于firstHeight1
为String.Empty
,因此Int
类型中找不到空字符串的等效项。因此错误..
在Form2实例中,值仍为String.Empty
。首先将其设置为某个值。
答案 3 :(得分:0)
在Form2
时说:
Form1 mainWindow = new Form1();
this.Height = mainWindow.firstHeight;
您没有访问之前使用过的Form1
,而是创建了一个全新的文本框值。
您应该做的是在创建高度值时将其传递给第二个表单:
public Form2(int height)
{
// use height here
}
并点击按钮:
Form2 secondForm = new Form2(firstHeight);
secondForm.Show();
答案 4 :(得分:0)
你可以这样做。
public int? FirstHeight
{
get
{
int? returnValue = null;
int temp;
if (int.TryParse(textBox2.Text, out temp))
{
returnValue = temp;
}
return returnValue;
}
}
然后,当您需要值时,只需调用FirstHeight
属性:
if (FirstHeight.HasValue)
{
// Access the int value like so:
int height = FirstHeight.Value;
}
如果您不想使用Nullable类型,则可以改为:
public int FirstHeight
{
get
{
int returnValue; // Or some other default value you can check against.
if (!int.TryParse(textBox2.Text, out returnValue))
{
// If the call goes in here, the text from the input is not convertable to an int.
// returnValue should be set to 0 when int.TryParse fails.
}
return returnValue;
}
}
答案 5 :(得分:0)
您的代码看起来像
public int FirstHeight
{
get
{
double Num;
bool isNum = double.TryParse(firstheight1, out Num);
if (isNum)
{
return firstheight1;
}
else
{
return 0; or
your message goes here
}
} }