1

これは私のコードです:

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と、VisualStudioは次の例外を表示します。

ここに画像の説明を入力してください

このエラーを解決するにはどうすればよいですか?

4

6 に答える 6

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);
于 2012-10-02T18:46:45.993 に答える
0

あなたのfirstHeight1isであり、空の文字列に相当するものはtypeString.Emptyにありません 。Intしたがって、エラー。

Form2インスタンスでは、値はまだString.Emptyです。まず、それをある値に設定します。

于 2012-10-02T18:45:06.917 に答える
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();
于 2012-10-02T18:43:37.020 に答える
0

あなたが言うForm2とき:

Form1 mainWindow = new Form1();
this.Height = mainWindow.firstHeight;

以前に使用していたものにアクセスしForm1ていません。テキストボックスの値が空の新しいものを作成しています。

あなたがしなければならないことは、それが作成されたときに高さの値を2番目のフォームに渡すことです:

public Form2(int height) 
{
   // use height here
}

ボタンをクリックして:

Form2 secondForm = new Form2(firstHeight);
secondForm.Show();
于 2012-10-02T18:46:37.637 に答える
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;
    }
}
于 2012-10-02T18:46:40.973 に答える
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 
    }

}}

于 2012-10-02T18:50:00.847 に答える