タブストリップを使用し、テキストの内容を切り替えるようにしています。
タブを切り替える直前に変数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が変わってしまうのが原因かと思うのですが、どうしたらいいでしょうか?
>タブを追加し、切り替えるときは問題ないのですが、タブを削除したときにうまくいきません。
環境とどう上手くいかないのかも記載してください。
ある程度の推測はつきますが、実際にナノさんの処で起きている現象とその推測が一致しているかどうかは分かりませんので。
>indexが変わってしまうのが原因かと思うのですが、どうしたらいいでしょうか?
以下、VB6.0 でタブは削除されるけど、TextBox には削除されたタブに入力したテキストが表示される、という現象が起きている、と想定した上で書いています。
で、ぱっと思いつく対策はこれくらい。
* Tab オブジェクトの Index と TxtIn 配列の添え字を直接対応させない。
* タブを削除した時に TxtIn 配列からも対応する文字列を削除して、Index と TxtIn 配列の添え字との整合性を保つ。
もちろんこれ以外にも対策する方法はあると思います。
タブを削除、追加するコードも記載してくれると
対処法を的確に考えられると思います。
今記載されてるコードだけでは推測しかできませんので。
もちろん環境も。
なんとなくスキーマが悪いような気がするが。
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
返信が送れて申し訳ないです。
タブを削除する前にTxtIn()の内容を1つづらして入れなおしていくことで解決しました。
みなさんありがとうございました。
ツイート | ![]() |