回答つけるのやめよう。
先日某掲示板であがったスレについての感想を。
とのこと。見た時点で土曜日だったし、レスも付いてなかったのでなんとかご協力を、と思い、こんな感じでサンプル作りました。
タブ追加をクリックしたらに作った新しく作ったタブをアクティブしたいのですが調べてもわからなかったため質問させて頂きます。
でもってこの辺りは解決なさったようでしたが、追加で質問があがっていました。(他の方のレスによるフォロー感謝♪)
[Visual Basic]' Form1にButton1とTabControl1をデザイナから追加しました。
Imports System
Imports System.Windows.Forms
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tp As New TabPage("TabPage")
Me.TabControl1.TabPages.Add(tp)
' tpを選択する。
Me.TabControl1.SelectedTab = tpEnd Sub
End Class
・・・テキストボックスってなんだ?と思ってスレ主のコードを見てみる。(引用なので見難くてすみません。m(_ _)m)
タブ追加したらそのタブをアクティブにすることはできましたが
ファイルの名前付けて保存する際には、新しくタブ追加した部分しかできませんでした…新しく追加した部分以外でも選択中のタブのテキストボックスの中身だけファイルの保存ができるにはどうすればいいのでしょうか。
あぁ、TabPageに追加したやつなのね。要するに一つの変数に生成したテキストボックスのインスタンスを毎回格納してしまっていて最新のインスタンス以外参照が取れないのよ、と。なるほど。
クラス変数の方に
Dim tBox As TextBox
Friend WithEvents Tb As System.Windows.Forms.TextBox
Private Sub Tab_Open() 'タブ追加用
'クリックしたらタブ追加と同時に新しく作ったタブをアクティブにする。'タブの追加
Tb = New TextBox
Dim Tab As New TabPageTabControl1.TabPages.Add(Tab) 'タブコントロールにタブを貼り付ける
With Tab
.Text = "無題" & .TabIndex 'タブの名前(確認用)
.Controls.Add(Tb) 'タブにテキストボックスを貼り付ける。
.TabIndex = TabIndex + 1
End WithWith Tb
.Dock = DockStyle.Fill
.Location() = New Point(0, 0)
.ScrollBars = ScrollBars.Both.AcceptsReturn = True
.MaxLength = 0
.WordWrap = False
.Multiline = True
.AllowDrop = True
End With
End Sub
で、自信なくサンプルコードを置いてみる。
もっと簡単にできるんじゃないですかねぇ・・・。他の回答者さんの回答とは方向性が違うようでしたし。
[Visual Basic]
Public Class MyTabPage
Inherits TabPagePrivate WithEvents _textBox As TextBox
Public Property TextBoxText() As String
Get
Return Me._textBox.Text
End Get
Set(ByVal value As String)
Me._textBox.Text = value
End Set
End PropertyPublic Sub New()
Me.New(String.Empty)
End Sub
Public Sub New(ByVal name As String)
MyBase.New(name)Me._textBox = New TextBox
With Me._textBox
.Dock = DockStyle.Fill
.Location() = New Point(0, 0)
.ScrollBars = ScrollBars.Both.AcceptsReturn = True
.MaxLength = 0
.WordWrap = False
.Multiline = True
.AllowDrop = TrueEnd With
Me.Controls.Add(Me._textBox)
End Sub
' Form1にはTabControl1、Button1、Button2、NumericUpDown1をデザイナから追加しました。
' NumericUpDown1で選択した値をIndexに持つTabPageのTextBox.Textプロパティをメッセージボックスに表示します。Public Class Form1
Public Sub New()
MyBase.new()InitializeComponent()
Me.NumericUpDown1.Enabled = False
Me.NumericUpDown1.Minimum = 0Me.Button2.Enabled = False
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tp As New MyTabPage("MyTabPage")
Me.TabControl1.TabPages.Add(tp)
' tpを選択する。
Me.TabControl1.SelectedTab = tpMe.NumericUpDown1.Maximum = Me.TabControl1.TabPages.Count - 1
Me.NumericUpDown1.Enabled = TrueMe.Button2.Enabled = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim tabPageIndex As Decimal = Me.NumericUpDown1.Value
Dim selectedTabPage As MyTabPage = DirectCast(Me.TabControl1.TabPages(CInt(tabPageIndex)), MyTabPage)
' selectedTabPage.TextBoxTextが指定したTabPageのTextBox.Textプロパティです。
MessageBox.Show(selectedTabPage.TextBoxText)End Sub
End Class
で、エントリとして書きたかったのはこれに対するスレ主のレス。
ちょ、先生・・・わからないですか?こんなことしなくても出来るよって言ってくださいよ・・・。
こんにちは。
凄い!まさにこれです!!!実は、先生にも聞いてみたのですがわからないとの一言でしたので
とても助かりました。#すみません、先生というのは私の学校に通ってる先生のことです
ということで、回答つけるのやめよう、提示したコードが自分以外のところで書かれることが怖くなっちゃいました、というお話。