2017-10-31 13 views
0

私はvb.netウェブアプリケーションを複数行のコントロールで使用しています。各行にはテキストボックスと2つのボタンがあり、入力されたテキストを保存するボタンと既存のテキストを編集するボタンがあります(テキストが内部にある場合、テキストボックスは無効になります)。条件付きでコントロールを有効にする

編集をクリックすると、すべてのコントロールが無効になり、編集するテキストの関連する保存ボタンとテキストボックスが有効になります。私は無効になったこれらのコントロールを再度有効にしようとしていると私は、保存に成功した後、このようないくつかのコードを使用しています:編集中の

  If String.IsNullOrEmpty(txtbox2.Text) = True Then 
       txtbox2.Enabled = True 
       btnSave2.Enabled = True 
      Else 
       btnEdit2.Enabled = True 
      End If 
      'enabling textbox and save button if textbox is empty 
      'or enabling edit button if text exists 

      If String.IsNullOrEmpty(txtbox3.Text) = True Then 
       txtbox3.Enabled = True 
       btnSave3.Enabled = True 
      Else 
       btnEdit3.Enabled = True 
      End If 

これらの少しのブロックが1以外の行ごとに繰り返されている場合(1サブあたり合計5回)。私は同じことを達成するために各ループを使用しようとしましたが、ループする方法があるかどうか、テキストボックスにテキストがあるかどうかを判断し、そうであれば、その行の編集ボタンを有効にしますテキストボックスと同じ行の保存ボタンを再度有効にします。

私は簡単のようなもので、必要に応じて有効または無効にするには、すべてのテキストボックスを取得することができます。

  Dim ReactivateText() = {txtbox2, txtbox3, txtbox4, txtbox5, txtbox6} 

      For Each thing In ReactivateText 
       If TypeOf thing Is TextBox Then 
        Dim othertext As TextBox = thing 
        If String.IsNullOrEmpty(othertext.Text) = True Then 
         othertext.Enabled = True 
        End If 
       End If 
      Next 

しかし、たとえボタンコントロールを持つ以上の変数にボタンを追加することにより、別の配列変数で、私はよボタンを適切に有効または無効にするのに問題が残っています。

私はまだ比較的新しいvb.netです。誰かがこれを達成するためのよりエレガントでプログラム的な方法についてアドバイスを持っているのであれば、私は興味がありますか?上のシンプルな元のコードは実際には意図した通りに動作しますが、私が知る限り、単なる十分に残しておくべきでしょう。しかし、この1ビットのコードは、私のアプリケーションの残りの部分に比べて過度に単純化されていると私に訴えており、これを実現するためのより良い方法があると想像しなければなりません。

答えて

1

あなたはブール値を代入しているので、あなただけに等しい(または等しくない)に設定し、条件文を必要としないこのような状態、:する必要がないという点で

txtBox2.Enabled = String.IsNullOrEmpty(txtbox2.Text) 
btnSave2.Enabled = txtBox2.Enabled 
btnEdit2.Enabled = Not txtBox2.Enabled 

これを各コントロールで行い、コントロールを格納するコレクションを設定してから、次のように繰り返します。

Dim textBoxes() As TextBox = {txtBox2, txtBox3, txtBox4, txtBox5, txtBox6} 
Dim saveBtns() As Button = {btnSave2, btnSave3, btnSave4, btnSave5, btnSave6} 
Dim editBtns() As Button = {btnEdit2, btnEdit3, btnEdit4, btnEdit5, btnEdit6} 

For index As Integer = 0 To textBoxes.Length - 1 
    textBoxes(index).Enabled = String.IsNullOrEmpty(textBoxes(index).Text) 
    saveBtns(index).Enabled = textBoxes(index).Enabled 
    editBtns(index).Enabled = Not textBoxes(index).Enabled 
Next 
+0

ダングが良いです。完璧に働いた、ありがとう。私はそのような配列インデックスを参照する方法がなければならないことを知っていましたが、関連する資料を検索するとき – GreggJ

関連する問題