1

テキストファイルを解析して正しい値を取得する単純なWinFormsアプリを作成しています。誤った値が見つかると、新しいフォームが開き、ユーザーが正しい値を入力できるようになり、誤った値または欠落した値が表示されます。たとえば、テキストファイルに意図的に2つの誤った値を入れてチェックし、フォームウィンドウが最初のエラーで開いた直後に閉じ、2番目のエラーが修正されるまで開いたままになるという問題があります。

foreach (string line in lines)
             {
                 string[] items = line.Split('\t').ToArray();

                 for (int i = 0; i <custIndex.Count; i++)
                 {
                     int index = custIndex[i];

                     Globals.Code = items[index - 1].ToUpper();

                     if (!CountryList.ContainsKey(Globals.Code) && !StateList.ContainsKey(Globals.Code))
                     {
                         form2.textBox1.Text = Globals.Code;
                         form2.Show();//Shows form2 for user to enter correct input


                     }


                 }//inner for
             }//inner for each

フォーム2のコードは次のとおりです(フォーム2は、ループの前にメソッドの先頭でインスタンス化されます)。

public  partial class Form2 : Form
{
    public Form2()
    {

        InitializeComponent();


    }

    public void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {

    }
    //
    private void button1_Click(object sender, EventArgs e)
    {
        Globals.Code = textBox2.Text;
        this.Close();           
    }

    private void Form2_Load(object sender, EventArgs e)
    {



    }




}

ユーザーは、Globals.Codeに新しい値を入力した後、ボタンを押すことになっています(グローバル変数を使用しましたが、それが最もコーシャな方法であるかどうかはわかりません)。その後、フォームが閉じてフォーム1に戻ります。フォーム2は、テキストファイルの最初のエラー値で正しく表示されていると思いますが、すぐに開いたり閉じたりします。ウィンドウを開いたままにする方法はありますか?これが複雑な場合は申し訳ありませんが、私は多くのWinformを実行しており、このようなことの専門家ではありません。

ありがとう、アマンダ

4

1 に答える 1

3

最善の策はモーダルダイアログを使用することかもしれないので、に変更form2.Showform2.ShowDialogます。

ただし、そのようなループでグローバル変数を使用する場合、グローバル変数は、ループが完了した後にのみ最後の値をフォームに入力します。ShowDialogアプローチを使用する場合、ユーザーがダイアログを閉じるまで、呼び出しはその行でブロックされます。その後、テキストボックスから値を読み取り、それを使用して何かを行うことができます。

于 2012-11-30T20:03:54.033 に答える