2012-01-01 10 views
0

Ok。私は前に関数でPHPでこれを行っています。私はちょうどVBでそれを行う方法を知らない。VB.Net名前に基づいて1つの関数で異なるテキストボックスの値を変更する

私は作っているゲームのためのキャラクターシートの作成者を持っています。私がしたいことは、ボタンをクリックすると、テキストボックス名(それが編集するテキストボックスを知るように)と、テキストボックス内の値新しいキャラクタの上限が考慮されていることを確認してください)。私の心の中で

、ボタンの後ろの擬似コードは、基本的に

Private Sub Button_Click 
    AddtoValue(Textbox1,stats) 
End Sub 

Public Sub AddtoValue (NoIdea,NoIdea2) 
    dim ObjectName as Object, ObjectText as string, Textasnum as integer 

    Objectname = frmmain.noidea 
    ObjectText = objectname.text 

    textasnum = convert.toint32(objecttext) 
    objecttext = textasnum 

    [If Statements to check value of objectname for rules validation, and then noidea2 to figure out which point pool to take from and change if passes rules validation] 
End Sub 

ようになり、私はnoideaのために置くために何を知っている必要があり、かつBYVALまたはByRefのか、何noidea2、のような、?

+0

あなたのボタンは、フォームまたは単にテキストボックスの名前のテキストボックスオブジェクトを知っていますか? –

+0

ボタンの内側にあるのはそのためです最初の引数はテキストボックスの名前(TextBox1はテキストボックスの名前)、2番目の値はStatsという名前の2番目のテキストボックス – sohsiteadmin

+0

Okはテキストボックスと同じフォームのボタンですか?もしそうなら、それは非常に簡単になります。 –

答えて

1

VB.Netでは、参照を使用してオブジェクトを関数呼び出しに送信することは非常に可能です。

したがって、あなたのサブシグニチャは、次のようになります。

Public Sub AddtoValue (Byref textboxObj as TextBox, Byval stat as String) 

    textboxObj.text = stat 

End Sub 
+0

オブジェクトを参照して送信する唯一の時間は、オブジェクト内のプロパティではなく、オブジェクト自体を実際に変更する必要がある場合です。あなたの例では、メソッドがtextboxobjを変更できるようにします。つまり、 'textboxobj = New TextBox()'が必要です。 1つの明白な例外は文字列です。文字列を割り当てると新しい値が文字列の新しいインスタンスを作成するので、文字列パラメータを変更した場合はbyrefとして渡す必要があります。 –

2

は、プロシージャを作成し、このような何か:

Private Sub ProcedureName(ByVal NameOFTextBox as String, _ 
          ByVal ValueToAssign as String) 
    Dim xTextBox as TextBox = DirectCast(Me.Controls(NameOfTextBox), TextBox) 
    xTextBox.Text = ValueToAssign 
End Sub 

使用法:

ProcedureName("txtBoxName", "NewValue") 

UPDATE:

Private Sub ProcedureName(ByVal CtrlName As String, ByVal NewVal As String) 
    Dim xCtrl() As Control = Controls.Find(CtrlName, True) 
    For Each iControl As Control In xCtrl 
     If iControl.Name = CtrlName Then 
      Dim xTxt As TextBox = DirectCast(iControl, TextBox) 
      xTxt.Text = NewVal 
     End If 
    Next 
End Sub 
+1

これは間違いです。 Me.Controlsは、フォームのトップレベルコントロールのみを検索します。コントロールがパネル、タブ、または他のコンテナに埋め込まれている場合、このコードはテキストボックスを検出しません。代わりに、 'SearchAllChildren'パラメータをtrueに設定して、Me.Controls.Find関数を使用する必要があります。 –

+0

が更新されました。情報をありがとうございます。 –

0

明確なコメントに基づいて、テキストボックスを直接渡してアクセスできる必要があります。ここで

があなたのAddToValue方法がどのように見えるかです:

Public Sub AddtoValue (theTextBox As TextBox, theStatsBox As TextBox) 
    dim Textasnum as integer 

    If IsNumeric(theTextBox.Text) Then 
     textasnum = convert.toint32(theTextBox.Text) 
    Else 
     textasnum = 0 
    End If 

    [If Statements to check value of objectname for rules validation, 
     and then noidea2 to figure out which point pool to take from and 
     change if passes rules validation] 
End Sub 
関連する問題