2011-01-27 26 views
10

Designerでコンポーネントを表示するときにproblemがあります。"Design Mode"プリプロセッサディレクティブ

私はデザイナーが好まない「悪い」コードを特定しました。

問題は、設計時にプリプロセッサディレクティブのみを使用して「コメント」することができないことです。

は今、私は(VB.NETのために)、以下の

#If Not Debug Then 
Private Sub myWpfComponent_ItsEvent(sender, args) Handles myWpfComponent.ItsEvent 
... 
#End If 

これを試してみました...働いていた、そして今では、デザイナーで問題なく表示されます。

デバッグが正しくこのコンポーネントであることを恐れています。

だから、私はラ

#If Not DESIGN_TIME Then 
#End If 

à回避策を探しています同様のものがありますか?

+1

できること

if (!DesignerProperties.GetIsInDesignMode(this)) { //Code to not execute in design mode } 

注意を問題のコードは何ですか? –

+0

@Daniel A. White:「問題」の単語のリンクを参照してください。Winformsデザイナーは、Wpfでホストされているコントロールのイベントを処理するのが好きではありません。 – serhio

+0

なぜプリプロセッサディレクティブでこれを行う必要があるのか​​分かりません。 ['DesignerProperties.GetIsInDesignMode'メソッド(http://msdn.microsoft.com/en-us/library/system.componentmodel.designerproperties.getisindesignmode.aspx)で何が問題になっていますか? –

答えて

9

これはプリプロセッサでは実現できません。これは、VSの外部でデバッグ実行ファイルを実行できるからです(デバッグモードでVSによって生成されたEXEをダブルクリックしてみてください)。

とにかく、役立つかもしれないランタイム(ベースプリプロセッサではない)プロパティがあります:

if (System.ComponentModel.LicenseManager.UsageMode == 
    System.ComponentModel.LicenseUsageMode.Designtime) 

これらのウェブページは、実行時にデザインモードをチェックする他の方法を支援し、必要があります:

http://msdn.microsoft.com/en-us/library/c58hb4bw(vs.71).aspx

http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx

+0

OPの "myWpfComponent_ItsEvent"の記述に基づいて、これはWPFの質問のようです。あなたが言及したプロパティは、WPFではなくWinFormsのためのものです。 –

+0

参照されるページには、他の方法でデザインをチェックする方法があります。第2のリンクを確認してください。 –

+0

"if"はメソッド内でのみ使用できます。それ以外にはありません:) – serhio

4

IDEはデザイナーを表示するためにコードを再構築しません。すでにビルドしたバイナリを使用します。だから、プリプロセッサ命令は役に立たない。

myWpfComponent_ItsEventと書いてあるので、これはWPFの質問です。 WPFでは、GetIsInDesignModeを使用してデザインモードを検出します。

+0

はい。しかし、私のコードをもう一度見てみましょう。私はメソッド全体を "無視"するか、VBでのハンドル、またはC#でのイベント添付ファイルを必要とします。私は古典的な "if" **外部**メソッド(すべてのメソッドを無視する)を使用することはできません – serhio

+1

なぜメソッド外で行う必要がありますか?あなたのメソッドの最初のものとして 'if(DesignerProperties.IsInDesignMode(this))return;'を追加するだけです。 Voilà:あなたのメソッドは設計モードで何もしません。 –

2

問題は、WinFormsデザイナーでVB.NETで書かれたWPFコントロールを使用していることです。イベントハンドラが問題を引き起こしている場合は、WithEventsおよびHandlesの代わりにAddHandlerを使用して、ハンドラコードを条件付きにすることができます。 AddHandlerを使用したら、Ifのハンドラを@ gmaganaの答えに記述されている方法でラップすることができます。

ハンドルとのAddHandlerの違いのために、この答えを参照してください:

+0

WPFコントロールはC#で書かれていますが、ホストコントロールはVBで書かれています:)。とにかく、私はこのソリューションが仕事の唯一のようだと思った。ありがとう。 – serhio

3

使用: "この" 識別子は、任意のDependencyObjectの