2

私は比較的 c# .net に慣れていません。私の質問に答えるためにさらに情報が必要な場合はお知らせください。

1) 私は何をしようとしていますか?

私が使用しているフォームには、3 つの異なるタブに 30 近くのデータ グリッド ビュー コントロールがあります。また、datagridview の名前は以下のとおりです。 dgView1dgView2dgView3

上記のデータグリッド コントロールに加えて、いくつかのテキスト ボックス コントロールも取得したため、タブ 1 でより具体的に説明すると、下のコントロール項目を取得しました。 txtTabName1txtStrKey1dgView1

今、私は 1 つの入力パラメーターを受け取る関数を作成しようとしています。int v_CtrlNum このパラメーターを使用して、1 つのタブから各項目をスキャンし、それを ArrayList/Collection に追加する必要があります。

たとえば、以下に示すように、関数はデータグリッド ビューから各行を読み取る必要があります。

データグリッド用

foreach (DataGridViewRow in dgView+v_CtrlNum )

テキストボックス用

txtTabName+v_CtrlNum

これを行う正しい方向に進んでいるかどうかを知りたいです。

4

3 に答える 3

2

Controls.Find メソッドを調べると、一致するコントロールの配列が返されることに注意してください。

Control[] tbp = tabControl1.Controls.Find("txtTabName" + 2,true );
if (tbp.Length > 0)
{
    Control[] dv = tbp[0].Controls.Find("dgView" + 2, true);
}
于 2012-11-16T01:53:02.713 に答える
0

あなたがやりたいと思うかもしれないことは、次のようなものです:

DataGridView[] formDataGrids = this.Controls.OfType<DataGridView>().ToArray();

これにより、フォーム内のすべての DataGridViews の配列が取得されます。おそらく、そのタブのコントロール リストを使用して、個々のタブに対して行うことができます。テキストボックスについても同じことができます。配列型と OfType() 呼び出しの型を TextBox に置き換えるだけです。

「in」の右側は特定のリストまたは配列(IEnumerableを実装するもの)への参照でなければならないため、例のようにforeachを使用することはできません。しかし、上記のようなリストを作成した場合は、次のようにすることができます。

foreach(DataGridView thisGrid in formDataGrids)
    DoSomething(thisGrid);

または、次のようにチェーン化することもできます。

foreach(DataGridView thisGrid in this.Controls.OfType<DataGridView>())
    DoSomething(thisGrid);

複数のタブを処理するには、各ページのデザイナーで既に TabPage メンバーが作成されている必要があります。次に、次のようなことができます。

var formDataGrids = new List<DataGridView>();
if (usingTab1)
    formDataGrids.AddRange(tabPage1.Controls.OfType<DataGridView>());
if (usingTab2)
    formDataGrids.AddRange(tabPage2.Controls.OfType<DataGridView>());
if (usingTab3)
    formDataGrids.AddRange(tabPage3.Controls.OfType<DataGridView>());

foreach(var thisGrid in formDataGrids)
    DoSomething(thisGrid);
于 2012-11-16T00:52:13.547 に答える
0

あなたが何を達成しようとしているのか完全にはわかりませんが、ID番号でコントロールしたいだけだと思いますよね?次のようなことができます。

List<Controls> myTabControls = new List<Controls>();
foreach (Control thisControl in this.Controls)
    if (thisControl.Name.Contains(v_CtrlNum.ToString()))
        foreach (Control thisChildControl in thisControl.Controls)
            myTabControl.Add(thisChildControl)thisChildControl

に対応するタブ内のコントロールを取得するには、それがコントロール名の一部である識別子であるとv_CtrlNum想定します。v_CtrlNum次に、タブからコントロールを調べて、次のように各 DataGridView を処理します。

foreach (Control thisControl in myTabContols)
    if (thisControl.GetType() == typeof(DataGridView))
       // Parse your DataGridView's rows here

this.Controlsフォームのコントロール コレクションはどこにありますか (thisこの場合は親フォームを指します)。

これは役に立ちますか?しかし、あなたが質問で何を求めているのかを正しく理解したかどうかはわかりません...

于 2012-11-16T00:12:31.867 に答える