1

主にコンソールで動作するプログラムを書いていますが、たまにフォームを使用する必要があります。

Windows フォームを作成し、出力をコンソールに切り替えました。その後、もう 1 つのフォーム (Form2) をプロジェクトに追加し、次のようなコードを作成しました。

#include "stdafx.h"
#include <iostream> // For std::cout and such
#include "Form1.h"
#include "Form2.h"

using namespace testing_forms;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 


    /* Instructions Block 1 */

    Application::Run(gcnew Form1());

    /* Instructions Block 2 */

    Application::Run(gcnew Form2());

    /* Instructions Block 3 */

    return 0;
}

したがって、基本的に、プログラムは最初の命令ブロックを実行し、次にフォームを呼び出し、次に 2 番目の命令ブロックを実行します。

ただし、これではフォームとコンソールの間でデータを共有できません。これは 1 つのプログラムにすぎないため、ユーザー名や整数など、本当に必要なデータです。

私が考えることができる唯一の方法は、テキストファイルを保持し、コンソールとフォームから読み書きして情報を共有することです(私はこれをテストしていません)が、正直なところ、私はあまり好きではありませんこのソリューション。

では、(できれば) 変数のみを使用して、Windows フォームとコンソールの間でデータを共有するにはどうすればよいでしょうか?

4

1 に答える 1

1

ソケット、パイプ、メッセージ キューを使用する、データベースに情報を格納する、コンソール アプリケーションで WCF サービスをホストするなど、さまざまな方法があります。

しかし、ここではそれらのどれが最も優れているかについては議論しません。実際、この問題が発生している場合は、ソリューション全体を Windows フォーム/WPF アプリケーションにする必要があります。同じアプリケーションのフォーム間で情報を渡すのは、特にフォーム間で相互に参照できる場合は非常に簡単です。お互いのメソッドを呼び出すか、お互いのプロパティにアクセスするか、同じ静的クラスを使用するだけです。すべてが同じ環境にあり、アプリケーションの境界を越えることはありません。

コンソールをそこに残しておきたい場合は、メイン フォームを非表示にして、別のコンソール アプリを開くことができます。次に、このコンソールに関連するテキストを入力できます。

思考の糧。

于 2013-08-19T19:00:45.777 に答える