0

私はいくつかの VSTO の作業を続けており、クラス内のすべてのデータグリッドビューを一度に参照する方法があるかどうか疑問に思っていました。コンテナがどうあるべきかわからないようで、それらを配列/他のコンテナに追加できないようです?

私がやろうとしていることの疑似コードは次のようになります。

For Each datagridview in Globals.MyUserControl
   'change some datagridview property ie:
   datagridview1.ReadOnly = True
Next

私は C# や VB.net で喜んでいます。あるいは、これができるかできないかについての説明があれば幸いです。現時点では、すべての異なるデータグリッドビューに対して手動で設定しています。その数が増えるにつれて、それらを一度にすべてヒットする方法が必要です。

以下の解決策に取り組もうとしていますが、これを試した別の方法ではうまくいきません:

    For Each ctl In Me.Controls
        If TypeOf ctl Is DataGridView Then
            ctl.ReadOnly = True
            ctl.AllowUserToDeleteRows = False
        End If
    Next

しかし、なぜそれがうまくいかないのかわかりません。

4

3 に答える 3

1

このようなものが動作するはずです:

    For Each ctl In Me.Controls.OfType(Of DataGridView)()
        ctl.ReadOnly = True
        ctl.AllowUserToDeleteRows = False
    Next

または C#

        foreach (DataGridView ctrl in this.Controls.OfType<DataGridView>())
        {
            ctrl.ReadOnly = true;
            ctrl.AllowUserToDeleteRows = false;
        }

これは、フォーム内の DataGridViews のみをループします。

さらに、必要に応じてそれらを List(Of DataGridView) に追加できます

もう 1 つのオプションは、DataGridView を継承するクラスを宣言し、必要なプロパティを設定し、このタイプの新しいデータグリッドビューを宣言してフォームに追加することです。

于 2013-07-01T17:10:29.383 に答える