2009-05-08 2 views
0

フォームにはintPtrが必要です。 Control.FromHandle(コントロール)は私にハンドルからコントロールを与えますが、私は反対が必要です - コントロールからハンドルを取得します。これはどうすればいいですか?コントロールのハンドルが作成された後にのみ動作します:フォームのIntPtrが必要(VB.Net)

答えて

4

Dim handle As IntPtr = someControl.Handle 

注意してみてください。コントロールのハンドルが作成された後にのみ動作します:あなたがコントロールを作成し、それがある程度にレンダリングされるとき、この IntPtr.Zero

+0

Duh、ありがとう。よく働く!感謝します。 – Jeff

1

注意を返すことがどこときの時間の窓が間にあります。 Handleプロパティのgetアクセサー:あなたがコントロールを作成するとき、それは、これがIntPtr.Zero

を返すことがあり、私はこの上JaredParに同意する必要がある程度にレンダリングされたときの時間の窓が間にありますハンドルがまだ作成されていない場合はCreateHandleを呼び出します(Reflectorで確認できます)。場合によっては予期しない結果を招く可能性があるので注意することが重要です

+0

リフレクターのメソッドを確認してください。単にハンドルを作成しない場合があります。それは起こることは保証されていませんが、特定の設定の下で起こる可能性があります – JaredPar

+0

私はCreateHandleメソッドのコードを解析していなかったと告白する必要があります...今は、私は少し混乱していると私はそれが常にハンドルを作成するかわからない。だから最終的には正しいと思うかもしれません;) –

+0

@Thomas、根本的な状態がハンドルの作成を妨げる遠大なコーナーケースがあります。私はHandleが処分される前に有効であると仮定していたので、以前にヒットしたので存在することがわかります。私は詳細(痛み:)を覚えていないので、〜2年されている)。 – JaredPar

関連する問題