1

このコードを実行した後:

Dim arr = From ctl In ContainerCtl.Controls.Cast(Of Control)()
            Select ctl
            Where (ctl.Enabled = True) AndAlso _
            (Not TypeOf ctl Is Label) AndAlso _
            (Not TypeOf ctl Is Panel) AndAlso _
            (Not TypeOf ctl Is GroupBox) AndAlso _
            (Not TypeOf ctl Is C1.Win.C1FlexGrid.C1FlexGrid AndAlso bSkipGrid)
            Order By ctl.TabIndex

最初の要素にアクセスするにはどうすればよいですか? Control オブジェクトとしてアクセスする必要があります。

ありがとう!

更新: First() または FirstOrDefault() を使用しても機能しません:

エラー画面...

4

5 に答える 5

3

ファイルの先頭に以下を含める必要があります。

using System.Linq;

次に、次を使用するだけです。

arr.First()

または、列挙型にゼロの結果がある場合 (上記で例外がスローされます)。

arr.FirstOrDefault()

後者の場合は、 を確認してください。後者にはnull、最初のオブジェクトがnullである時期が不明であるという問題もありますが、それはまた別の機会にします。

于 2013-03-04T20:25:00.727 に答える
0

ステートメントの順序が間違っていますか?すべきではありません:

Dim arr = From ctl In ContainerCtl.Controls.Cast(Of Control)()
        Where (ctl.Enabled = True) AndAlso _
        (Not TypeOf ctl Is Label) AndAlso _
        (Not TypeOf ctl Is Panel) AndAlso _
        (Not TypeOf ctl Is GroupBox) AndAlso _
        (Not TypeOf ctl Is C1.Win.C1FlexGrid.C1FlexGrid AndAlso bSkipGrid)
        Order By ctl.TabIndex
        Select ctl

次に、電話するだけです

arr.First()

于 2013-03-04T22:15:24.010 に答える
0

最終的に、単純に For Each ループを使用して、最初の有効な要素を取得することにしました。First() が機能しなかった理由がわかりませんでした。私は言及されたすべてのテクニックを使用しましたが、運はありませんでした。

すべての提案をありがとう!

于 2013-03-05T16:56:30.217 に答える
0

vbについてはわかりませんが、c#には、コレクションの最初の要素を返す arr.First() メソッドがあります。または、 arr.ToArray()[0] または arr.ToList()[0] を常に実行できます。

于 2013-03-04T20:26:45.873 に答える
0

それはあなたが持っているからですOption Infer Off。プロジェクトのプロパティを開き、コード ファイルの先頭に設定Option Infer Onまたは追加します。Option Infer On

于 2013-03-05T18:54:40.340 に答える