2016-10-05 1 views
0

私と私の限られた経験がわからないという問題があります。Forループを使用して重複をチェックする - エラーエラーは次のとおりです。オブジェクト参照がオブジェクトのインスタンスに設定されていません

私は、(5)ディスプレイシステムを使用するゲームショーシステム用のマルチディスプレイ(フォーム)プログラムを持っています。私はこのプロジェクトをラップしているので、いくつかのハウスを保守し、いくつかの潜在的なユーザーエラーをフロントで処理しています。

この例の場合:GameSetupというフォームがあり、ドロップダウンメニューには「チーム」というデータベースを選択して入力します。 Teamが選択されると、(10)のラベルには登録されたチームメンバーが配置されます。ユーザはチームメンバー(すなわちプレイヤ)を(6)のラベルのグループにドラッグアンドドロップすることにより、ゲームのためのアクティブなチームを構成する。

問題:重複していないことを確認するために、アクティブチームのチーム名に名前が追加されたときにチェックしたかったのです。これを行う最もクリーンな方法は、アクティブプレイヤーレーベルのアクションにあり、Forループを使用して他のアクティブなチームプレーヤーの名前を確認することだと私は考えました。私は、フォームの前に、(デバグ)GameSetup負荷、私は、ヌル例外を取得していますが、プログラムを実行すると、それは文句を言わない(この例では)それ自体に対して

を比較するよう

Private Sub lblT1_P1_TextChanged(sender As Object, e As EventArgs) Handles lblT1_P1.TextChanged 

    cmdReady.BackColor = Color.Yellow 

    For i = 1 To 6 

     If i = 1 Then 

      ' Do nothing 

     ElseIf Me.Controls("lblT1_P" & i.ToString).Text = lblT1_P1.Text Then 'This is the line triggering the NullException 

      MsgBox("This Player is already selected. Please choose another Player", MsgBoxStyle.OkOnly) 
      Me.Controls("lblT1_P" & i.ToString).Text = "DRAG PLAYER HERE" 'This is the other line triggering the NullException 

     End If 

    Next i 

End Sub 

i = 1 Do Nothing

でありますまだ初期化されていないフォームやオブジェクトを見ているので意味があります。明らかに、 Me.Controlsが問題ですが、Forループで整数(i)を使用する方法を扱う方法がわかりません。

ラベル名がlblT1_P1れる - 各グループのlblT1_P6(3インスタンス(T1/T2/T3)私は現時点でT1_P1を扱ってい

任意の提案は非常に高く評価されるであろう

答えて

0

使用String.Formatの()それがより読みやすいですので、あなたのコントロール名を生成する。

代わりMe.controls( "lblName")の。テキスト 使用DirectCast(Me.FindControl( "lblName") 、L abel)。テキスト

+0

ありがとう!以前はFindControlを使用していませんでした。それはDirectCastのメンバーですか、クラスで宣言する必要がありますか? –

+0

@ChrisLink [DirectCast](https://msdn.microsoft.com/en-us/library/7k6y2h6x.aspx)と[FindControl](https://msdn.microsoft.com/en-us/library/31hxzsdw)を参照してください。 (v = 1.10).aspx) – Reshma

関連する問題