2

私は現在、コンソールプロジェクトをWinFormsに「移植」し始めましたが、それを行うのにひどく失敗しているようです。

私は単にコンソール構造に慣れています:

コンソールからの入力に応じて、クラスを相互作用させました。簡単なフロー:

Input -> ProcessInput -> Execute -> Output -> wait for input

これで、この大きなForm1.cs(など)と「Application.Run(Form1);」を入手できました。しかし、クラスがフォームとどのように相互作用し、上記のようなフローを作成することができるのか、実際にはわかりませんでした。

つまり、フォーム内の「アイテム」ごとに、これらの「...._ Click(objectsender ....)」があります。フロー/ループをどこに配置/開始するか、クラスがフォームとどのように相互作用できるかがわかりません。

4

2 に答える 2

5

実際にはかなり簡単です(私はあなたの混乱に同情することができますが)...

1.入力
にはaTextBoxとaがありButtonます。ユーザーがボタンをクリックしたとき、あなたの中にあるものはすべてTextBoxあなたの入力として扱います。

2.入力
の処理コンソールアプリでは、入力の処理中はユーザーは何もできません。Windowsフォームアプリのこれに類似しているのは、ユーザーが入力を提供できるメカニズムを無効にすることです。だから、あなたTextBox.Enabled = falseとを設定しますButton.Enabled = false

3.実行
実行したいメソッドを実行します。

4.出力
フォームに何らかのメッセージを表示します。これは単に別のものTextBox、またはRichTextBox...あなたが望むものなら何でもかまいません。

5.入力を待つ
ステップ3のメソッドが実行されたら、パート4の出力を表示しました。先に進んで、入力を受け入れるためのメカニズムを再度アクティブにすることができTextBox.Enabled = trueますButton.Enabled = true

したがって、基本的にコードは次のようになります。

void myButton_Click(object sender, EventArgs e) {
    try {
        myInputTextBox.Enabled = false;
        myButton.Enabled = false;

        var input = ParseInput(myInputTextBox.Text);

        var output = ExecuteMethodWithInput(input);

        myOutputTextBox.Text = FormatOutput(output);

    } finally {
        myInputTextBox.Enabled = true;
        myButton.Enabled = true;
    }
}
于 2010-05-05T16:06:34.723 に答える
3

基本的に、フォームにデータを入力するための一連のコントロール(つまり、1つ以上のTextBoxコントロール)を提供させることができます。ユーザーがクリックするボタンがあり、処理したい場合は、ボタンをダブルクリックするだけです。これにより、次のようなイベントハンドラーが提供されます。

private void button1_Click(object sender, EventArgs e)
{
     // Process Input from TextBox controls, etc.
     // Execute method
     // Set output (To other controls, most likely)
}

それだけです-標準のWindowsメッセージポンプが代わりになるので、「ループ」はなくなります。

于 2010-05-05T16:00:14.803 に答える