2016-08-29 5 views
0

私はAutodesk Inventor用のAddIn(3D図面ソフトウェア)を作成していますが、現在のところ位置制約を使って遊んでいます。ボタンを押したときにテキストボックスを検証する

特定の値(この場合は仰角と向きの値)をすばやく編集するためのカスタムユーザーメニューを作成しました。

最初に私は制約値を変更するのにtextbox.textchangedイベントを使用しました。しかし、これは100%ではありませんでした。エレベーション1000を押した場合の例は、エレベーションを4回(1桁につき)変更します。

今私はvalidated eventを使用しました。これはうまく動作しますが、Enterボタンが押されたときに検証を開始するためのテキストボックスが必要です。これについては、私はこれをホイップしましたが、正しいとは言えません。私はそれを確信しています。これを正しく書くにはどうすればよいですか?

以下のコードは機能しますが、結果を得るための適切な方法があります。

Private Sub tbElevationValue_TextChanged(sender As Object, e As EventArgs) _ 
    Handles tbElevation.Validated 

    ' If the elevation parameter and textbox value are the same 
    ' The sub must be aborted 
    If CDbl(tbElevation.Text) = oElevationParameter.Value * 10 Then Exit Sub 

    ' Check the entered value 
    Dim oValue As Double 
    If tbElevation.Text = "" Then 
     oValue = 0 
     tbElevation.Text = 0 
    Else 
     oValue = tbElevation.Text 
    End If 

    ' Set the parameter value 
    oElevationParameter.Value = oValue/10 

    ' Update the document 
    EM_AddIn.StandardAddInServer.m_inventorApplication.ActiveDocument.Update() 

End Sub 

Private Sub tbOrientation_TextChanged(sender As Object, e As EventArgs) _ 
    Handles tbOrientation.Validated 

    ' If the orientation parameter and textbox value are the same 
    ' The sub must be aborted 
    If CDbl(tbOrientation.Text) = cRandiansToDegrees(oOrientationParameter.Value) Then Exit Sub 

    ' Check the entered value 
    Dim oValue As Double 
    If tbOrientation.Text = "" Then 
     oValue = 0 
     tbOrientation.Text = 0 
    Else 
     oValue = tbOrientation.Text 
    End If 

    ' Set the parameter value 
    oOrientationParameter.Value = cDegreesToRandians(oValue) 

    ' Update the document 
    EM_AddIn.StandardAddInServer.m_inventorApplication.ActiveDocument.Update() 

End Sub 

Private Sub OrientationElevationEnterKey_Pressed(sender As Object, e As Windows.Forms.KeyEventArgs) Handles tbElevation.KeyUp, tbOrientation.KeyUp 

    If e.KeyCode = Windows.Forms.Keys.Enter Then 

     CType(sender, Windows.Forms.TextBox).Parent.Focus() 
     CType(sender, Windows.Forms.TextBox).Focus() 

    End If 


End Sub 

答えて

0

あなたは正しい方法だと思います。 TextBoxオブジェクトごとにkey_downイベントを登録するのは苦労かもしれませんが、あなたの考えは良いです。

代わりにkey_downイベントリスナーをフォームに設定できます。

このような何か試してみてください:

Private Sub Main_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown 
    If e.KeyCode = Keys.KeyCode.Enter Then 

     MyBase.Focus() ' this will cause the currently focused control to validate 

    End If  
End Sub 
+2

が、このたびは、キーストロークがなされた結果ではないだろう、それは私がイベントを監視したい 'テキストboxes'にない場合でも、イベントがトリガされますか?これは必要以上のリソースを消費しませんか? –

+0

これは本当ですが、KeyDownイベントの中にテストを簡単に追加すると、現在フォーカスされているコントロールがテキストボックスである場合にのみフォームにフォーカスを当てることができます – theBugger

関連する問題