掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
コントロールのTABINDEXを自動付与するには? (ID:124929)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっております。 VB.netにて画面に配置されているコントロールのタブを左上から右下へ 移動できる様にソースにて自動でタブインデックスを設定しているのですが なかなかうまく参りません。下記のようにテキストを配置しTEXT1〜6へ順に タブ移動を行える様にしたいのです。(:の後は手動設定したタブインデックスです) [TEXT1:2][TEXT2:1][TEXT3:6] [TEXT4:3][TEXT5:4][TEXT6:5] 画面内のコントロールを取得し,Location.XとLocation.Yを判断し, 自作クラスにてソートを試みているのですが,どうしても TEXT1→TEXT3→TEXT2→TEXT4→TEXT6→TEXT5となります。 TEXT2とTEXT5についてはLocation.Yを他とずらしています。 独自クラスの判断がおかしいのでしょうか・・・? 'フォーカス順を設定する Sub MAK_CONS()←フォームロードで呼んでます。 Dim Con As Control Dim i As Long Dim lngOld As Long 'フォームに配置されているコントロールの一覧 For Each Con In Controls ReDim Preserve MjobjCON(MjlngFocusMAX) MjobjCON(MjlngFocusMAX) = Con MjlngFocusMAX = MjlngFocusMAX + 1 Next Dim strlenCompX As IComparer = New ControlSorter Array.Sort(MjobjCON, strlenCompX) Dim i As Integer = 0 For Each FrmCon As Control In MjobjCON FrmCon.TabIndex = i i += 1 Debug.WriteLine(FrmCon.TabIndex & " " & FrmCon.Name & vbTab & "X:" & FrmCon.Location.X & vbTab & "Y:" & FrmCon.Location.Y) Next End Sub End Class Public Class ControlSorter Implements IComparer Public Function Sorter(ByVal c1 As Object, ByVal c2 As Object) As Integer Implements IComparer.Compare Dim lx1 As Integer = CType(c1.location.x, Integer) Dim ly1 As Integer = CType(c1.location.y, Integer) Dim lx2 As Integer = CType(c2.location.x, Integer) Dim ly2 As Integer = CType(c2.location.y, Integer) Dim rtn As Integer = 0 If lx1 < lx2 _ And ly1 <= ly2 Then rtn = -1 ElseIf lx1 < lx2 _ And ly1 > ly2 Then rtn = 1 Else rtn = 0 End If Return rtn End Function End Class
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.