SSTabでのフォーカス


ワンダー  2005-11-14 23:10:56  No: 127666

初歩的な質問ですが宜しくお願いします。

Form1にタブダイアログコントロール(SSTab1)を1つ追加します。
Tab0、Tab1、Tab2 という3つのタブを作成します。 
SSTab1上の各タブにコマンドボタンを4つずつ追加します。 

以上の様にして、VBにてメニュー画面を作成しているのですが、
矢印キーやタブキーでコマンドボタンを選択していると、
SSTab1で隠れているタブ上のコントロールにフォーカスが移動
してしまい、うまくカーソルを制御出来ません、よい方法はな
いでしょうか。

あとSSTab1のTab1を選択したさい、先頭のコマンドボタンに
フォーカスを移動したいのですがうまく出来ません。
お願いします。


生茶  2005-11-15 00:52:45  No: 127667

プロパティのTabIndexでスキップさせる。
もしくは、SetForcusメソッドにて移動させたいコマンドボタンへ
フォーカスを与える。
でうまく行きませんか。
試してません・・・


ワンダー  2005-11-15 01:45:59  No: 127668

試してみましたが、まだ気になる個所があります。
tab1、tab2、tab3にカーソルがフォーカスされません
←→キーでタブ移動をしたいのですが。

作成したvbソースです、宜しくお願いします。

Private Sub Form_Load()
    SSTab1.Tab = 1
    Call SSTab1_Click(0)
End Sub

Private Sub SSTab1_GotFocus()
    Select Case SSTab1.Tab
        Case 0
            Command1(0).SetFocus
        Case 1
            Command2(0).SetFocus
        Case 2
            Command3(0).SetFocus
    End Select
End Sub

Private Sub SSTab1_Click(PreviousTab As Integer)
    Dim sw As Boolean
    Dim i As Integer
'
    If SSTab1.Tab = 0 Then
        sw = True
    Else
        sw = False
    End If
    For i = 0 To 3
        Command1(i).Enabled = sw
    Next i
'
    If SSTab1.Tab = 1 Then
        sw = True
    Else
        sw = False
    End If
    For i = 0 To 3
        Command2(i).Enabled = sw
    Next i
'
    If SSTab1.Tab = 2 Then
        sw = True
    Else
        sw = False
    End If
    For i = 0 To 3
        Command3(i).Enabled = sw
    Next i
End Sub


生茶  2005-11-15 02:32:40  No: 127669

SSTab1.SetFocus
でもダメですか?


我龍院忠太  2005-11-15 16:58:33  No: 127670

余計なお世話ですがSSTabは使いにくいのよね。
TabStripの方に浄土あり。


ひろ  2005-11-15 19:04:51  No: 127671

昔からバグが多い傾向がありますね。

元々サードパーティ製の「気合いの入っていないおまけ」だったという経緯がありますから
(VB4の頃はOCXファイルのプロパティを見るとちゃんと提供元のベンダ情報が入っていましたので、VB付属のActiveXコントロールの多くがお試し版というのは公然の事実でした)。

目立つところはこの辺ですが・・・ なんとなく 193021が図星のような気がします。

http://support.microsoft.com/default.aspx?scid=kb;ja;193021
http://support.microsoft.com/default.aspx?scid=kb;ja;257661
http://support.microsoft.com/default.aspx?scid=kb;ja;279739
http://support.microsoft.com/default.aspx?scid=kb;en-us;154885

他にもVB4の頃まで遡るとこの通り。

http://support.microsoft.com/search/default.aspx?spid=global&query=SSTab&catalog=LCID%3D1041&pwt=false&title=false&kt=ALL&mdt=0&comm=1&mt=1&ast=1&ast=2&ast=3&ast=&mode=a&x=7&y=8

http://support.microsoft.com/search/default.aspx?spid=global&query=SSTab&catalog=LCID%3D1033&pwt=false&title=false&kt=ALL&mdt=0&comm=1&mt=&ast=2&ast=3&mode=a&x=10&y=13

また、何故か今はKBから消えてしまいまったので実は不適切な方法なのかもしれませんが、文書番号 J044337(英語版の Q178469の日本語訳)には、FormのLoadとタブのClickでタブに含まれているコントロールのLeftプロパティを参照してEnabledを強制的に変更するという対策コード例が出ています。

      Dim c As Control
      For Each c In Controls
         If (c.Container Is SSTab1) Then
            c.Enabled = (c.Left >= 0)
         End If
      Next


ワンダー  2005-11-16 01:16:13  No: 127672

いろいろと回答を頂きありがとうございます。
早速、試してみたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加