2017-01-24 9 views
0

私はフォームボタンのコンテキストメニューを作成していますが、私はこれを実装する方法に遭遇しました。ある場合は、2つの違いの説明を得ることができますか?これらのオブジェクトは機能的に同等ですか?

私はそれが働いたと思った道:

private void InitializeContextMenu() 
{ 
    System.Windows.Forms.ContextMenuStrip set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip(); 
} 

private System.Windows.Forms.ContextMenuStrip set_is_in_inventory; 

私は、MSDNで見つけ方法:最初のバージョンで

private void InitializeContextMenu() 
{ 
    set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip(); 
    this.ContextMenuStrip = set_is_in_inventory; 
} 

private System.Windows.Forms.ContextMenuStrip set_is_in_inventory; 
+2

MSDNは実際に表示されるようにそれをフォームに割り当てています。オブジェクトを作成するだけです。あなたはあなたの道がうまくいくと思っていたのですが、より根本的な誤解に答えることができます。 – BradleyDotNET

+5

そして、さて、今度は、.NET命名規則に慣れて、それに従ってください。 –

+0

最初のバージョンは奇数です。同じ名前のローカルフィールドとプライベートフィールドがあります。プライベートフィールドは決して使用しないでください(AFAICT)。名前は偶然です。あなたは同じ参照ではない2つの異なる参照を宣言しています。また、JSが命名規則について語っていること。 '_setIsInInventory'が規約です。 –

答えて

1

、あなたが持っているset_is_in_inventoryと呼ばれるInitializeContextMenu()で新しい変数をインスタンス化してきましたコメント者が指摘したように、ContextMenuStripと入力すると、.NETの命名規則に従うためにおそらく_setIsInInventoryという名前にする必要があります。いずれかの方法。実際にこの変数をどこにも使用していません。メソッドの外側にスコープはなく、何もしません。私が望むと思うのは、クラスのプロパティを設定することです。あなただけのインスタンス化1であることをクラスset_is_in_inventoryプロパティを作成するには、MSDNの例の最初の行である

private void InitializeContextMenu(){ 
{ 
    this.set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip(); 
} 

または必要に応じて、

set_is_in_inventory = new System.Windows.Forms.ContextMenuStrip(); 

を行う必要があります。 MSDNの例でも同様に、のにも設定されているContextMenuStripという別のプロパティがクラスにあるように見えます。これもset_is_in_inventoryに設定されています。時々、クラスのプロパティは、クラスの名前、のようなので、(完全に合法構文)として自分の名前を持っている:

public ClassA { 
    public Class Class {get;set;} 
} 

を設定するにはClassA's財産Class、あなただけ行う

this.Class = new Class(); 

または

Class = new Class(); 

これは混乱を招くことがありますので、クラス名は次のようになります。

public ClassA{ 
    public Class MyClass {get;set;} 
} 

HTH

+0

thx明確化のために! – Greasyjoe

+0

私の喜び。あなたの質問に答えたらこれを受け入れてください。 – coolboyjules

関連する問題