2

基本的に、このプログラムには共通のバックエンドが必要ですが、プログラムを制御するために別の GUI でコンパイルできるようにします。複数のフォームを作成できることはわかっていますが、ソリューションをコンパイルするように指示し、Form1 が GUI であると言い、後でコンパイルしてそれがForm2GUI であることを伝える方法はありますか (コンパイル済みのフォームに含めないForm1でください)。プログラム)。

Form1はより多くの機能を持つ管理者向けであり、 は よりForm2も機能がはるかに少ない通常のユーザー向けForm1です。これは可能ですか、それとも新しいソリューションを作成する必要がありますか?

4

3 に答える 3

4

はい、条件付きコンパイルを使用して、コンパイルからコードを完全に除外できます。したがって、次のようなことができます。

#if USER_GUI

public class BasicForm : Form
{
  // ...
}

#endif

#if ADMIN_GUI

public class AdvancedForm : Form
{
  // ...
}

#endif

次に#ifdef、GUIを起動して適切なコンストラクターを呼び出すときに同様のことを行います

public static void Main(string[] args)
{
    // ...

    #if USER_GUI
    var form = new UserForm()
    #endif

    #if ADMIN_GUI
    var form = new AdvancedForm()
    #endif

    Application.Run(form);
}

コンパイル時に、[プロジェクト] -> [プロパティ] -> [ビルド] -> [条件付きコンパイル シンボル] で適切な変数を使用してプロジェクト プロパティを設定し、USER_GUI または ADMIN_GUI のいずれかを追加できます。

于 2012-06-04T18:41:46.000 に答える
3

プリプロセッサの条件が思い浮かびます。

http://msdn.microsoft.com/en-us/library/4y6tbswk(VS.71).aspx

Form form;
#if USE_FORM_1
form = new Form1();
#else
form = new Form2();
#endif

USE_FORM_1定義済みで 1 回、定義なしで1 回コンパイルします。

注:これをアプリにコンパイルする必要があるかどうかは少し疑問です。一度コンパイルして、app.config設定を使用してデフォルトのフォームを指定することもできます。

于 2012-06-04T18:34:04.267 に答える
2

これを実現するにはいくつかの方法があります。ここにカップルがあります

最初にユーザーをログインさせている場合は、役割を確認して、次のいずれかを実行できます。

  1. ロール固有のフォームを表示する
  2. ロール固有のコントロールを非表示にしたフォームを 1 つ用意する

これは、さまざまな役割について言及したため、という前提に基づいています。あなたがそれについてどのように行っているかわかりません。

ユーザーが最初にログインする場合、ログイン元は実際にはアプリの起動時に実行されるデフォルトのフォームです。そこから、フォームの新しいインスタンスを作成するAdminFormStandardUserForm、1 つのフォームをロードして、フォーム上のパネルを切り替えます。1 つは管理機能を備え、もう 1 つは備えていません。

于 2012-06-04T18:33:55.203 に答える