2017-10-07 20 views
0

これはスプーンの餌になるかもしれませんが、私はすでにこれを行うために他の多くの方法を試しましたが、無駄です。私はすでに、 "variable/property changed event in vb.net"という正しい方法かもしれないと思っていますが、これを含めてたくさん研究しましたが、私が望むように働くことはできません。私はコーディングに新しい、私は私の変数に変更イベントを追加しようとしているので、ここで私のサンプルです。プロパティを変更しましたイベント

Public Class FormMode 
    Public Property ViewMode As Boolean 
    Public Property EditMode As Boolean 
    Public Property NewMode As Boolean 
End Class 

基本的に私はフォームを持ち、それぞれに独自のFormModeがあります。フォームモードは、一度に1つしか真ではありません。 e。

ViewMode = True 
EditMode = False 
NewMode = False 

それとも

ViewMode = False 
EditMode = True 
NewMode = False 

それとも

ViewMode = False 
EditMode = False 
NewMode = True 

ユーザーは、フォームのモードを変更しますすることができます。 ViewMode = Trueの場合、EditModeとNewModeを自動的にfalseに設定する必要があります。他の2人と同じケース。それらは別のフォームから価値に変更されることに注意してください。また、フォームがどのような形式(ViewMode/EditMode/NewMode)であるかを調べることができます。私はこれを正しい方法でやっていますか、あるいは私は別のアプローチを試みるべきですか?私はすでに私の最善を尽くす努力をしていましたが、残念ながら失敗しました。どうもありがとうございます!私が提案したようenumを使用し、私のニーズ.Thanks

Public Class Form1 
    Public Property TFormMode As FormMode 
    Public Enum FormMode 
     ViewMode 
     EditMode 
     NewMode 
    End Enum 

    Public Function IsView() As Boolean 
     TFormMode = FormMode.ViewMode 
    End Function 

    Public Function IsNew() As Boolean 
     TFormMode = FormMode.NewMode 
    End Function 

    Public Function IsEdit() As Boolean 
     TFormMode = FormMode.EditMode 
    End Function 

    Public Sub UpdateFormMode(Mode As FormMode) 
     TFormMode = Mode 
    End Sub 
End Class 

で、それに合わせて管理

+1

A値)よりもむしろ3 booleanは* one *状態を示すために、 'Enum'(ListViewのViewプロパティを調べます)B)' INotifyPropertyChanged'は過剰です。これは、クラスが他のものに変更を通知するためのものです。あなたは自分自身に通知する必要はありません。あなたはまだ1つの状態の3つのプロパティが良いアイデアだと思うなら、オートプロパティを使用せず、セッターで他のプロパティをリセットしてください。 C)[お問い合わせ]を読んで[ツアー]を受けてください – Plutonix

+0

ありがとうございます。あなたが提案したように私はenumを使いました。私は今まで私がよく知っていることを知らなかった。どうもありがとう! –

+0

[お問い合わせ]を読んで[ツアー]を受けてください – Plutonix

答えて

0

回答として投稿したコードは、期待どおりに機能しません。あなたはIsViewがtrueの場合、あなたのコードが実際にFormMode.ViewModeTFormModeを設定し、文句を言わない、実際に真または偽のブール値を返しますを確認し、各時間 - 同じはあなたが何をすべきIsNewIsEdit

の場合では、使用しています以下のコード。私はウォークスルーで説明します。プライベート変数は、クラスの内部で動作するように変数を与え、それがそのまま

あなたの列挙型は結構です、外の世界への直接見えないよう_TFormModeを宣言

publicプロパティとしてTFormModeを宣言すると、クラス外のコードはプライベートフィールド_TFormModeとやりとりする安全な方法になります。このようにしてSetGetコードブロックを使用すると、任意の検証コードを追加したり、好きな情報を返すことができます。これにより、UpdateTFormMode sub redunantになります。

関数IsViewは、式_TFormMode = FormMode.ViewModeの結果を返します。

Return _TFormMode = FormMode.ViewMode 

のより長いバージョンが

If _TFormMode = FormMode.ViewMode Then 
    Return True 
Else 
    Return False 
End If 

残り機能

が同じことを行うであろうが、他の列挙型に対する試験は

Public Class Form1 
     Private _TFormMode As FormMode 

     Public Enum FormMode 
      ViewMode 
      EditMode 
      NewMode 
     End Enum 

     Public Property TFormMode As FormMode 
      Set(value As FormMode) 
       _TFormMode = value 
      End Set 
      Get 
       Return _TFormMode 
      End Get 
     End Property 


     Public Function IsView() As Boolean 
      Return _TFormMode = FormMode.ViewMode 
     End Function 

     Public Function IsNew() As Boolean 
      Return _TFormMode = FormMode.NewMode 
     End Function 

     Public Function IsEdit() As Boolean 
      Return _TFormMode = FormMode.EditMode 
     End Function 

    End Class 
+0

あなたは正しいです。私は一度だけ私のコードをテストしたので、私はそれを回避することはできませんでした。ありがとう。 –

0

私はまだその特定のモードのかどうその簡単にチェックするためにちょうどそう3ブールを作りました。

関連する問題