私はVB.NETプロジェクトでCOM Interopを使用してVB6フォームを操作しています。私のVB6フォームのコントロールのいくつかはインデックスが付けられていて、そうでないものもあるので、インデックスのないものではctl.Indexを呼び出すことができません。コントロールがインデックスに登録されている場合は、うまくいく方法はありますか?VB6コントロールが.NETでインデックスされているかどうかを調べる方法(コントロール配列)
答えて
あなたは型名の機能を使用することができます - のように - コントロール配列は、タイプ「オブジェクト」ではなく、実際の制御タイプを返します。そう:
If TypeName(ctrl) = "Object" Then
isControlArray = true
End If
このソリューションは、CommandButtonオブジェクトでは機能しません。 TypeNameは配列内であっても "CommandButton"と表示します。 – Martin
私は、これを機能させるための解決策をナイフとフォークで管理しています。しかし、毎回フォーム上のすべてのコントロールを反復するほど効率的ではありません。私は私の心の後ろに、コントロールが配列かどうかをテストするためのVB6関数がありますが、私はそれを思い出すことができないことを覚えているようです。興味のある人のための私の機能は以下の通りですが、私は可能ならばこれにもっとクリーンな解決策を見つけることに興味がありますか?
Private Function FindIndex(ByRef objCtl As Object) As Integer
For Each ctl As Object In objCtl.Parent.Controls
If objCtl.Name = ctl.Name AndAlso Not objCtl.Equals(ctl) Then
'if the object is the same name but is not the same object we can assume it is a control array
Return objCtl.Index
End If
Next
'if we get here then no controls on the form have the same name so can't be a control array
Return 0
End Function
誰もが興味を持っている場合は、次のVB6の等価です:VB6で
Private Function FindIndex(ByRef F As Form, ByRef Ctl As Control) As Integer
Dim ctlTest As Control
For Each ctlTest In F.Controls
If (ctlTest.Name = Ctl.Name) And (Not (ctlTest Is Ctl)) Then
'if the object is the same name but is not the same object we can assume it is a control array
FindIndex = Ctl.Index
Exit Function
End If
Next
'if we get here then no controls on the form have the same name so can't be a control array
FindIndex = 0
End Function
であることを考えていません。コントロール配列の一部です。 – MarkJ
Iは@Matt Wilkoと同様の解決策を見つけたが、それは、フォーム上のすべてのコントロールをループする必要がなくなり:
Public Function IsControlArray(objCtrl As Object) As Boolean
IsControlArray = Not objCtrl.Parent.Controls(objCtrl.Name) Is objCtrl
End Function
出典:http://www.vbforums.com/showthread.php?536960-RESOLVED-how-can-i-see-if-the-object-is-array-or-not
- 1. どのコントロールがシリアル化されているかを調べる
- 2. wxコントロールが無効かどうかを調べる方法
- 3. vb6〜vb.net:コントロールの配列
- 4. .NET ListViewコントロールが編集されているかどうかを確認する
- 5. コントロールにどのスタイルが適用されているかを調べる方法は?
- 6. コントロールがタブコントロール上にあるかどうかを調べるにはどうすればよいですか?
- 7. $(this)がクリックイベントで配列されているかどうかを調べる方法
- 8. .Netコントロールをvb6アプリケーションに動的に追加する方法
- 9. VB6コントロール配列の最も単純な.NET同等物は何ですか?
- 10. 別の.netアセンブリがロードされているかどうかを調べる
- 11. dataGridに列が含まれているかどうかを調べる方法
- 12. 配列インデックスが存在するかどうかを調べるには?
- 13. 配列要素が空であるかどうかを調べる方法は?
- 14. .NETアセンブリがTRACEまたはDEBUGフラグでコンパイルされているかどうかを調べる方法
- 15. VB6でTypeOf VB6コントロールを見つける方法
- 16. 文字列に配列内のオブジェクトが含まれているかどうかを調べる方法は?
- 17. VB6 SP6で作業している古いサードパーティのコントロールがあるかどうかを調べる必要があります
- 18. UITableViewCellがドラッグされているかどうかを調べる方法は?
- 19. 正しい配列の長さがCでmallocedされているかどうかを調べる
- 20. 配列が美しいかどうかを調べる
- 21. 配列がスタックにあるかどうかを調べる方法は?
- 22. TransactionScopeがコミットされているかどうかを調べる
- 23. Javaでバイト配列がすべて0であるかどうかを調べる方法
- 24. .Netと同等のvb6 Tabコントロールのパラダイム
- 25. Objective Cで配列インデックスを調べる方法は?
- 26. Ruby:入れ子になった配列に配列が含まれているかどうかを調べる
- 27. 最後のフォーカスでコントロールを調べる
- 28. VB6でライセンスされていないコントロールを特定します。
- 29. SQL Server - クラスタ化インデックスが存在するかどうかを調べる方法
- 30. 「インデックス」が配列内に何回あるかを調べる
私はでIsArrayが働くかもしれないと思ったが、VB6のように、それはコントロール配列は、実際に私がコントロールするかどうかをテストするためにVB6の機能があるとは思わない配列 –