2008-09-02 8 views
8

多分私はまだ.NETをまだよく分かっていませんが、この単純なVB6コードを.NETで簡単に実装するにはまだ満足のいく方法を見ていません(このコードはN CommandButtonsの配列のCommand1そして、アレイ内のNのTextBoxテキスト1()):VB6コントロール配列の最も単純な.NET同等物は何ですか?

Private Sub Command1_Click(Index As Integer) 

    Text1(Index).Text = Timer 

End Sub 

私はそれは非常に便利なコードではありません知っているが、それは配列をVB6で使用することができる制御の容易さを示しています。 C#またはVB.NETで最も簡単なのは何ですか?

+0

http://stackoverflow.com/questions/5497403/control-array-in-vb-netおよびhttp://stackoverflow.com/questions/5738092/vb6-control-arrays-in-net – MarkJ

+0

あなたは将来私のアイデアをチェックすることができます:http://stackoverflow.com/questions/5738092/vb6-control-arrays-in-net/42627033#42627033、私はそれがこのトリッキーな質問の解決策を提供すると思います。 –

答えて

5

は、テキストボックスの一般的なリストを作成します.Netの複数のボタンからボタンを押します。次に、Tagプロパティにあるテキストボックスを追加することができますか?

Private Sub AllButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click 
    Dim c As Control = CType(sender, Control) 
    Dim t As TextBox = FindControl(CType(c.Tag, String)) 
    If t Is Not Nothing Then 
    t.Text = "Clicked" 
    End If 
End Sub 
0

コントロールの配列を作成します。

Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
     Handles TextBox1.TextChanged, _ 

     TextBox2.TextChanged, _ 

     TextBox3.TextChanged 

End Sub 
4

もう一つの利点は、複数のコントロールを処理する単一のイベントハンドラを持っています。これは、現在のVB6コントロール配列を置き換えるためにアップグレードウィザードが使用するものです。

しかし、VB6のコントロール配列は、VB6で表面上に構文マジックを実行するオブジェクトのコレクションに過ぎません。 .NETの世界では、これを削除することにより、より良い方法を強制しています。終値で

は、ジェネリック医薬品の登場により、二つの側面があります

List<YourControl> MyControlArray. 
1

のVisualBasic .NETの互換性ライブラリは、強力な型指定された制御配列が含まれています:VB .NETはない

TextBox[] textboxes = new TextBox[] { 
    textBox1, 
    textBox2, 
    textBox3 
}; 
2

を使用してからあなたを止めるものは何もありません。

.NETは容易にコントロールの配列をサポートしますが、VB6では回避策を使用するだけでした。 .NETでは、イベントを動的に配線するのは簡単です。

ただし、.NETフォームデザイナーは単純な理由でコントロール配列をサポートしていません。コントロールの配列は実行時に作成/拡張されます。コンパイル時に必要なコントロールの数が分かっている場合(推論が行われる)、異なる名前を付けて配列に入れないでください。

私はそれが正確にポイントの非常に便利なコード

ではありません知っています。役に立たなかったら機能を持っているのはなぜですか?必要に応じて

することは、あなたもこのようなもので、その結果、名前による制御にアクセスすることができます。同じクリックイベントを処理することができます

​​
+0

私は「とても有用なコードではありません」と言いました。 VB6でコントロール配列が非常に便利であることがわかったので、私はその疑問を提起しました。私はあなたの提案された解決策がかなり巧妙であることを発見しましたが、それはちょっとしたくぼみのように思えます。 – raven

0

Private Sub Command_Click(sender As Object, e As EventArgs) Handles Command1.Click, Command2.Click … 
    Dim name As String = DirectCast(sender, Control).Name 
    Dim index As Integer = Integer.Parse(name.Substring("Command".Length)) 
    Controls(String.Format("Text {0}", index)).Text = Timer.Value.ToString() 
End Sub 
3

.NETで1つのアナログに1本当何はありません。確かに、特定のタイプのコントロールの配列やリストを作ることはできますが、自動的にそれを行うことはありません。

しかし、リファクタリングできなかったコントロール配列は見たことがありません。何かにネットより良い。例があなたの例です。投稿したシナリオでは、コントロール配列を使用してボタンをテキストボックスとペア設定しています。 .Netでは、おそらくカスタムコントロールでこれを行うでしょう。カスタムコントロールは、ボタン、テキストボックス、多分共有/静的タイマーで構成されます。フォームは、このカスタムコントロールのいくつかのインスタンスを使用します。コントロールに必要なロジックを一度実装すると、それ自身のソースファイルと分離されます。ソースファイルでは、大きなフォームクラスとのマージを必要とせずにソース管理で追跡および編集できます。複数のフォームや複数のプロジェクトでも簡単に再利用できます。 。コマンドボタンのインデックスがテキストボックスインデックスと一致することを確認することについても心配する必要はありません。

コントロール配列の代わりにカスタムコントロールを使用することは、クラスの代わりにデータを配列の代わりに使用することに似ています。インデックスではなく名前を取得する点です。 VB6でコントロール配列の

0

二つの主なメリットは以下のとおりであった:彼らはあなたが(2)彼らはあなたがコントロール

間でイベントを共有することが許可され コントロールのコレクションを反復処理するための方法を提供する(1) (1コントロールの配列を使用して.Netで実現できます。myArray(index)の代わりにsender引数を使用するため、1つのイベントで複数のコントロールを処理することで、構文が少し異なります。

.Netについての素晴らしい点は、これらの機能が分離されていることです。たとえば、配列の一部ではなく、異なる名前や異なる型のイベントを共有するコントロールを持つことができます。まったく異なるイベントがあっても、コントロールのコレクションを反復することができます。

関連する問題