グローバル変数を持つ Windows フォーム アプリケーションがありますtestPath
。
この文字列は、パスを保存するために使用されます。デフォルトではC:\temp\
. ユーザーがボタンをクリックすると、このディレクトリが作成されます (まだ存在しない場合)。
ユーザーがパスの値を変更したい場合に備えて、テキスト ボックス コントロールもあります。
ボタンのイベント ハンドラでアクセスしようとするtestPath
と、null 参照が返されます。
testPath
テキストボックスコントロールとの間で値を渡す場合を除いて、どこの値も変更していません。
私は何を間違っていますか?グローバル変数が 1 秒で内部に何かを持ち、その後すぐに null 参照を指すのはなぜですか?
完全なコードは次のとおりです。
public string testPath = @"C:\temp\";
public MainForm()
{
//Windows Designer call
InitializeComponent();
//Show the testPath in the textBox (using Invokes)
this.textBox1.Invoke(new MethodInvoker(delegate { this.textBox1.Text = testPath; } ));
//here, testPath contains 'C:\temp\'
}
//Button "Click" handler
private void Button1Click(object sender, EventArgs e)
{
//here, testPath contains a null reference!
//If the user changed testPath in the textBox, we need to save it again
this.textBox1.Invoke(new MethodInvoker(delegate { testPath = this.textBox1.Text; } ));
//Create the path
if(!Directory.Exists(testPath)) //If it does not exist already
{
Directory.CreateDirectory(testPath);
}
//...Do something else
}