2017-05-16 13 views
0

私はまだ比較的新しいVBです。私のプログラムを書く際に、自分のフォームにある多くの計算のためにテキストボックスの変更を追跡しています。vbデバッグテキストボックスの変更

私は変更を追跡するDIRTYコードを持っています。何か変更があった場合、保存または無視するように求められます。

私の質問は、「ダーティー」が発生した場合、何が変更され、msgboxで更新されたがっているかを表示する方法です。コードによって変化が検出されるときもありますが、私はそのような明らかな変化を見ることができます。いずれか、またはどのようにしてDEBUG経由で変更されたものが検出されますか?テキストボックスが色を変えて変化したとしても、少なくとも私は何が変わっているのかを特定することができます。次のように

私DIRTY CODEは次のとおりです。

Private Sub Dirty() 
    If Not LoadForm Then 
     ' Validate() 
     FuelTableBindingSource.EndEdit() 
     If Fuel.HasChanges Then 
      MeMsgBoxSaveChanges.ShowDialog() 
      If MeMsgBoxSaveChanges.Result = "Yes" Then 
       NavSaveBtnFuel.PerformClick() 
      Else 
       Fuel.RejectChanges() 
      End If 
     End If 
    End If 
End Sub 

良い情報...さらにビットを明確にするために..あなたに感謝 - 私は私の一つの形で多くの多くのテキストボックスを持っています。これらのテキストボックスの約1/3が計算の結果として設定されます。ユーザーはそれらのテキストボックスで何もできません。レコードが単にロードされ、表示され、BindingNavigatorを介して別のレコードに移動された場合、何らかの未知の理由でDirtyがトリガーされ、ユーザーは既定または反応によって、以前に保存されたものを上書き保存します。いかなる価値の明らかな変化も認められない。これはすべてのレコードで起こるわけではありませんが、レコードを表示するたびに迷惑になるほど頻繁に起こっています。だから私はMsgBoxディスプレイにDirtyと呼ばれるものを表示させたり、デバッガを使ってこれを行います。これは、1:フォーム書式設定のエラーが存在するかどうかを判断するために使用します(例えば、小数点以下3桁から小数点以下2桁まで)。私は小数点以下3桁を使用していますが、すべての計算フィールドではありません)2:計算エラー(計算エラーをキャッチするコードがありますので、これはまれです)3:あなたの答えに基づいて、私は多くのすべてのテキストボックスを入力する必要があります、その計算などダーティコマンドには?

+1

「ダーティー」は正しい単語ではなく、迷惑なコードです。ユーザーは常に「はい」をクリックし、繰り返し実行する必要があることに悩まされます。それが本当に意味することは、「私のコードが次にひどくひどくひどくなるかどうかはわかりません。実行してもよろしいですか?」 Noを選択するには十分ですが、それは起こりません。あなたのコードをテストするためのバイパスはありません。テストするつもりはありません。 –

+0

誰も私のコードをテストすることは一度もありません。私はちょっとした助けを借りてそれを自分自身で把握しようと考えています。あなたの役に立たない答えに感謝します。 –

答えて

0

私は正しく理解していると仮定します。ユーザがこれらのテキストボックスのいずれかで何かを変更すると、Dirty()と呼んで、保存するかどうかの確認を求めるメッセージが表示されます。

変更された内容を知り、それをメッセージボックスに表示することが重要な場合は、変更されたテキストボックスの値、以前の値、および新しい値がわかっている必要があります。変更を保存するかどうかをユーザーに促す場合は、これらの値をどこかに保存していることを意味します。したがって、既に各テキストボックスに以前の値があります。したがって、テキストボックスと新しい値をDirty()に渡すだけで十分です。

これらの値を受け入れるようにパラメータを関数に追加してください。Dirty(ByRef thisBox As TextBox, ByVal newVal As String)のようなものです。

どこでもあなたがその電話をかけるには、それらの引数をあなたの電話に加えてください。呼び出しがテキストボックスで変更されたイベント内にある場合、最初の引数は変更イベントが発生したテキストボックスで、値は単に.textです。

Dirtyのコードでは、以前の値を保存したものから取得し、その値と表示する新しい値を参照することができます。

"MeMsgBoxSaveChanges"を使用していますが、自分のフォームでなければなりません。だからあなたはあなたのフォームにその情報を取得する必要があります。おそらく最も良い方法は、これらの値のフォームのプロパティを持って、次に値をDirty()に設定することです。

例:変更されたテキストボックスの名前は "Textbox1"です。以前の値は "First"で、新しい値は "Second"です。 Textbox1.TextChangedイベントで

:ダーティで

Dirty(TextBox1, TextBox1.Text) 

Dim prev = [get the saved value that corresponds with TextBox1] 
Dim newMsgBox = New MeMsgBoxSaveChanges 
newMsgBox.box = thisBox 
newMsgBox.prev = prev 
newMsgBox.cur = newVal 
newMsgBox.ShowDialog() 

そして、あなたはあなたがそれを望むように、その情報を表示するためにMeMsgBoxSaveChangesを変更する必要があります。清澄更新毎


だから、私は完全には理解できなかったと思います。 Dirty()が独自のメソッドである場合は、どこかから呼び出される必要があります。なぜあなたが確信が持てないのか分からないなら、私はあなたのプロジェクトで "Dirty()"のインスタンスを検索して逆方向に作業し、そこからコードを検査してそれがなぜ呼び出されているのかを発見する。 2)ナビゲーションボタンがクリックされたとき(ユーザーが別のレコードに移動したと言うので)、コードの最初の行に停止点を置き、「Dirty()」が呼び出される場所に来るまでコードをステップ実行しますあなたは理由を知ることができます。 #2はおそらくあなたに手がかりを与え、#1を使用してすべての呼び出しで大文字と小文字が区別されることを確認することから始めるのが最良です(複数の場所があると仮定して)。デバッガを使用してストップポイントとコードステップを設定するのに慣れていない場合は、getting startedのMSDN記事(左側のナビゲーション)を参照してください。

+0

良い情報...ありがとうございます。もう少し明確にしてください - –

+0

@ JohnEtling - 説明をありがとうございます。新しい情報に基づいて追加のヘルプを提供するために、私の回答を更新しました。 – Andarta

関連する問題