2011-10-26 12 views
2

PicturePanelというユーザーコントロールがあります。マウスイベント(MouseDownイベント、のMouseMove、MouseUpイベント)で、私は次のようしている:デフォルトでユーザーコントロールのデフォルト値を設定する方法は?

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (marquee == true && e.Button == MouseButtons.Left && BackgroundImage != null) 
    { 
      //Code to create rectangular marquee 
    } 
    else 
    { 

    } 
} 

クラスレベル変数private bool marquee = false。そして、公的なもの。

private bool marquee = false; 
public bool Marquee 
{ 
    get { return marquee; } 
    set { marquee = value; } 
} 

私も初期化時にfalseを割り当ててみました:

public PicturePanel() 
{ 
    InitializeComponent(); 
    marquee = false; 
} 

しかし、マーキー、デフォルトでは常にtrueです。マーキーを無効にする場合は、公式変数picturePanel1.Marquee = falseをフォームに設定する必要があります。どのようにして、ユーザーコントロール内でデフォルトでマーキーをfalseにすることができますか?

+0

のベストプラクティスは、Tはあなたの混乱でLHSをバッチ処理任意のタイプかもしれないデフォルト(T)を使用することです。 bool someValue =デフォルト(bool)。 – Zenwalker

答えて

1

これはあなたが話しているかどうかはわかりませんが、デザイナーに表示されているデフォルト値を参照している場合は、プロパティに次の属性を追加するだけです:

[DefaultValue{false)] 
public bool Marquee 
... 
+0

あなたがデザイナーを育てて以来、私は戻ってチェックしました。フォームにドラッグした既存のコントロールがユーザーコントロールクラスの変更で更新されないとは考えていませんでした。フォームにドラッグする新しいコントロールには、マーキーがfalseと表示されます。 – Ryder

0

まあ、ブール値はデフォルトでは常にfalseです。マーキー(marquee)などと呼ばれるローカル変数はありませんか?

ちょうどブレークポイントをprivate bool marquee = false;に設定し、コードをステップ実行すれば、かなり簡単に見つけることができます。

+0

いいえ、上に宣言したマーキー変数は1つだけです。さらに、それが真実ならば、私のパブリック変数 'マーキー 'は私に期待される行動を与えません。 'picturePanel1.Marquee = true'または' picturePanel.Marquee = false'でマーキーモードをオン/オフできます。しかし、私はマーキーをオフにすることをデフォルトにしたい。私は明示的にそれをPicturePanelクラスのfalseに設定しようとしました。 – Ryder

+0

@Ryderブール値は、デフォルトでは間違いなく間違いです。ドキュメントを見てください。 http://msdn.microsoft.com/en-us/library/c8f5xwh7.aspx – alexn

0

あなたの問題は、フォーム上のコントロールを「描く」ためにデザイナーを使用する場合、それがtrueにマーキーを設定し、MouseDownイベントを登録されるかもしれないということかもしれません。これを防ぐには、イベントハンドラのthis.DesignModeをチェックします。

例:

if (this.DesignMode) return; 
関連する問題