2011-08-04 9 views
4

私は、タッチスクリーンと非タッチスクリーンの2つのオプションのインターフェイスが必要なアプリケーションがあります。フォーム用の複数のインターフェイスの作成

私は明らかに2つの別々のフォームを作ることができますが、変更があるときはいつでも複製する必要がある基になるコードがたくさんあります。すべてのコントロールは同じで、サイズと位置が異なります。 2つのInitializeComponentメソッドを実装することを考えていましたが、Visual Studioとの両方のインターフェイスを設計する方法がありませんでした。

他の誰かが欲しいと思っています。

+2

Windowsアプリケーションですか、Webアプリケーションですか? – R0MANARMY

+0

Windowsアプリケーション –

答えて

5

私はそれが2つの実装の1つのインターフェースであり、フォームに必要なものを注入すると思います。

簡単な例:

public interface IScreen 
{ 
    void DoStuff(); 
} 

public class TouchScreen : IScreen 
{ 
    public void DoStuff() 
    { } 
} 

public class NonTouchScreen : IScreen 
{ 
    public void DoStuff() 
    { } 
} 

public partial class ScreenForm : Form 
{ 
    IScreen _ScreenType; 

    public ScreenForm(IScreen screenType) 
    { 
    InitializeComponent(); 
    _ScreenType = screenType; 
    } 
} 

そして、あなたはこのようにそれをロードします:

TouchScreen touchThis = new TouchScreen(); 
    ScreenForm form1 = new ScreenForm(touchThis); 
    form1.Show(); 

    //or 

    NonTouchScreen notTouchThis = new NonTouchScreen(); 
    ScreenForm form2 = new ScreenForm(notTouchThis); 
    form2.Show(); 
1

これはWinフォームであれば、あなたは、Loadイベントのイベントハンドラを追加することができます。

this.Load += new System.EventHandler(this.YourForm_Load); 

...そこには、これがタッチスクリーンかどうかを確認してから、位置、形、サイズを2つのケースのための別々のヘルパーメソッド。

private void YourForm_Load(object sender, System.EventArgs e) 
{ 
    if (IsTouchScreen) 
    { 
    ArrangeControlsForTouchScreen(); 
    } 
    else 
    { 
    ArrangeControlsForPlainScreen(); 
    } 
} 

これがWebページにある場合は、オーバーライドされたPage.Loadメソッドでもほとんど同じことができます。

+0

私はこのオプションについて考えましたが、両方のインターフェイスをビジュアルスタジオで設計する方法はありますか? –

+0

私はこれをプログラムで行うと精度が上がることがわかりました。それにもかかわらず、個人的な好みです... VSでマウスでこれを行う場合は、すべてを行う基本クラス/フォームを用意し、ボタンやその他のUI要素を配置するためにそれから派生します。その後、もう一度派生し、もう一方のバージョンの2番目のフォームを作成します。次に、実行時に、状況に合ったフォームクラスをインスタンス化します。 (私はあなたが望むことをするための多くの方法があると思います) – woohoo

2

MVVM for winformsより具体的にはWPF Application Framework (WAF)に関連する質問をご覧ください。サンプルの1つに、同じアプリケーションロジックを共有するWinFormsとWPF UIがあります。あなたのケースでは、同じアプリケーションロジックを共有する2つの異なるWinForms UIだけになります。

また、両方のフォームを生成するには、テンプレートエンジン(T4など)を使用することを検討しましたか?

関連する問題