タブを削除したときの処理なんですが

解決


ナノ  2006-01-30 21:10:08  No: 93872

タブストリップを使用し、テキストの内容を切り替えるようにしています。
タブを切り替える直前に変数TxtIn(index)に現在のタブのindex番号と同じ添え字にテキストの内容を入れて、タブが切り替わったらそのタブのindex番号の添え字をもつTxtIn(index)を呼び出しています。
コードはこんな感じです。

Dim a As Integer   '以前選択されていたタブのindex
Dim b As Integer   '現在選択されているタブのindex
Dim TxtIn(10) As String   'テキストの内容を入れる

Private Sub TabStrip1_BeforeClick(Cancel As Integer)
    a = TabStrip1.SelectedItem.Index
    TxtIn(a) = text1.Text
End Sub

Private Sub TabStrip1_Click()
    b = TabStrip1.SelectedItem.Index
    text1.Text = TxtIn(b)
End Sub

タブを追加し、切り替えるときは問題ないのですが、タブを削除したときにうまくいきません。
indexが変わってしまうのが原因かと思うのですが、どうしたらいいでしょうか?


Geo=TK3  2006-01-30 21:50:18  No: 93873

>タブを追加し、切り替えるときは問題ないのですが、タブを削除したときにうまくいきません。

環境とどう上手くいかないのかも記載してください。
ある程度の推測はつきますが、実際にナノさんの処で起きている現象とその推測が一致しているかどうかは分かりませんので。

>indexが変わってしまうのが原因かと思うのですが、どうしたらいいでしょうか?

以下、VB6.0 でタブは削除されるけど、TextBox には削除されたタブに入力したテキストが表示される、という現象が起きている、と想定した上で書いています。

で、ぱっと思いつく対策はこれくらい。

* Tab オブジェクトの Index と TxtIn 配列の添え字を直接対応させない。
* タブを削除した時に TxtIn 配列からも対応する文字列を削除して、Index と TxtIn 配列の添え字との整合性を保つ。

もちろんこれ以外にも対策する方法はあると思います。


自称中級  2006-01-30 22:10:33  No: 93874

タブを削除、追加するコードも記載してくれると
対処法を的確に考えられると思います。
今記載されてるコードだけでは推測しかできませんので。
もちろん環境も。


我龍院忠太  2006-01-30 23:26:09  No: 93875

なんとなくスキーマが悪いような気がするが。
TextBoxのTextをタブを切り替える度に代入し直すと、
キャレット等の位置がリセットされてしまうし、
HideSelectionをFalseにしても選択範囲を維持できないし..
TextBoxごと操作した方が良いのでは。
たとえば、

Private Sub TabStrip1_Click()
    'タブ選択
    With Text1(TabStrip1.SelectedItem.index)
        .ZOrder 0
        .SetFocus
    End With
End Sub

Private Sub DeleteTab(index)
    'タブ削除
    For i = index To TabStrip1.Tabs.Count - 1
        Text1(i).Text = Text1(i + 1).Text
    Next
    TabStrip1.Tabs.Remove index
    Text1(1).ZOrder 0
    Unload Text1(Text1.Count)
End Sub

Private Sub AddTab()
    'タブ挿入
    Load Text1(Text1.Count + 1)
    TabStrip1.Tabs.Add
    With Text1(Text1.Count)
        .Visible = True
        .ZOrder 0
        .Text = ""
    End With
End Sub


ナノ  2006-02-01 19:27:19  No: 93876

返信が送れて申し訳ないです。
タブを削除する前にTxtIn()の内容を1つづらして入れなおしていくことで解決しました。
みなさんありがとうございました。


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

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






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