別のタブに移動したときに、中のコントロールの配置を変えたい
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/9/23 20:01:52
> ボタンを押すと違うタブページに移動するというプログラムを作成しています。
この場合は、
TabControl1.SelectedTab = TabPage1
よりも
TabControl.SelectedIndex = count
の方が扱いやすいと思います。
> ボタンの場所が動かないことです。
デザイン時に各ボタンの位置を変更すると、Location プロパティが変化しますよね?
同様に、各ボタンの親ページを変更した後で、自前で Location を明示しましょう。
> (例えば、タブページ1にはbutton1,2,3,5が並んでおり、button5を押すとタブページ2に移動。タブページ2には、button2,3,4,5が並ぶ。タブページ3も同様の処理を行い、button3,4,1,5が並ぶ。タブページは4まで)
デザイン時に、各ページごとにボタンを配置しておいた方が楽なのでは…?
処理を共通化させたいのであれば、1 つの Handles 句に複数のボタンを割り当てることもできます。
あるいは、共通となる Button については、TabPage に置くのではなく
Form そのものに配置してはどうでしょうか?
たとえば、ボタンを Form1 上に配置したまま、
デザイン時に Location を調整しておけば、
TabControl の上に重なるような位置にボタンを並べることもできるわけで。
この場合は、
TabControl1.SelectedTab = TabPage1
よりも
TabControl.SelectedIndex = count
の方が扱いやすいと思います。
> ボタンの場所が動かないことです。
デザイン時に各ボタンの位置を変更すると、Location プロパティが変化しますよね?
同様に、各ボタンの親ページを変更した後で、自前で Location を明示しましょう。
> (例えば、タブページ1にはbutton1,2,3,5が並んでおり、button5を押すとタブページ2に移動。タブページ2には、button2,3,4,5が並ぶ。タブページ3も同様の処理を行い、button3,4,1,5が並ぶ。タブページは4まで)
デザイン時に、各ページごとにボタンを配置しておいた方が楽なのでは…?
処理を共通化させたいのであれば、1 つの Handles 句に複数のボタンを割り当てることもできます。
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5Page1.Click, Button5Page2.Click, Button5Page3.Click, Button5Page4.Click
あるいは、共通となる Button については、TabPage に置くのではなく
Form そのものに配置してはどうでしょうか?
たとえば、ボタンを Form1 上に配置したまま、
デザイン時に Location を調整しておけば、
TabControl の上に重なるような位置にボタンを並べることもできるわけで。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2021/9/23 20:04:43
> TabControl1.SelectedTab = TabPage1
> TabControl.SelectedIndex = count
TabControl1.SelectedIndex = count
の間違いです。
伝わるとは思いますが念のため訂正。
> TabControl.SelectedIndex = count
TabControl1.SelectedIndex = count
の間違いです。
伝わるとは思いますが念のため訂正。
投稿者 わたなべ  (学生)
投稿日時
2021/9/23 20:38:11
魔界の仮面弁士様
ご返答ありがとうございます。
> TabControl.SelectedIndex = count
ありがとうございます。こういったことが出来るのは知らなかったです。勉強になります。
>デザイン時に、各ページごとにボタンを配置しておいた方が楽なのでは…?
やはりそうですよね…。自分でもそれが一番楽だと思っていましたが、ボタンの数が膨れ上がってしまうので躊躇していました。
上記の内容でやってみることにします!改めてご返答ありがとうございました!!
ご返答ありがとうございます。
> TabControl.SelectedIndex = count
ありがとうございます。こういったことが出来るのは知らなかったです。勉強になります。
>デザイン時に、各ページごとにボタンを配置しておいた方が楽なのでは…?
やはりそうですよね…。自分でもそれが一番楽だと思っていましたが、ボタンの数が膨れ上がってしまうので躊躇していました。
上記の内容でやってみることにします!改めてご返答ありがとうございました!!
今現在、ボタンを押すと違うタブページに移動するというプログラムを作成しています。
また、タブページ1つ1つには、ボタンが4つ(うち1つはタブページを移動させるボタン)並んでおり、ページを1つ移動するごとに、中のボタンが切り替わるという処理をさせたいです
(例えば、タブページ1にはbutton1,2,3,5が並んでおり、button5を押すとタブページ2に移動。タブページ2には、button2,3,4,5が並ぶ。タブページ3も同様の処理を行い、button3,4,1,5が並ぶ。タブページは4まで)
今のところ書いたプログラムは以下となります。
Public Class Form1
Dim count As Integer
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
count += 1
If count <= 3 Then
Select Case count
Case 1
TabPage2.Controls.Add(Button2)
TabPage2.Controls.Add(Button3)
TabPage2.Controls.Add(Button4)
TabPage2.Controls.Add(Button5)
TabControl1.SelectedTab = TabPage2
Case 2
TabPage3.Controls.Add(Button3)
TabPage3.Controls.Add(Button4)
TabPage3.Controls.Add(Button1)
TabPage3.Controls.Add(Button5)
TabControl1.SelectedTab = TabPage3
Case 3
TabPage4.Controls.Add(Button4)
TabPage4.Controls.Add(Button1)
TabPage4.Controls.Add(Button2)
TabPage4.Controls.Add(Button5)
TabControl1.SelectedTab = TabPage4
End Select
Else
count = 0
TabPage1.Controls.Add(Button1)
TabPage1.Controls.Add(Button2)
TabPage1.Controls.Add(Button3)
TabPage1.Controls.Add(Button5)
TabControl1.SelectedTab = TabPage1
End If
End Sub
End Class
上記プログラムは、一応目的の処理を行うことが出来ます。ただ、2つ困った点があります。
1つは、ボタンの場所が動かないことです。
Formのデザインで、タブページ1にbutton1,2,3,5を並べ、上記プログラムを行うと、タブページ2では、button1,2,3の場所にbutton2,3,4と配置されて欲しいのですが、button〇,2,3(〇は何も表示されていない)、といった形で表示されます。そうではなく、タブページ2では、button1,2,3の場所に2,3,4と表示され、タブページ3では、2,3,4の場所に3,4,1と表示してほしいです。
2つ目は、コードが冗長な気がします。
もう少し短く書けないかぁと眺めていて思います。
(2は自分自身が勝手に思っているだけなので、回答して頂かなくても大丈夫です)
1についての、何か良いアイデアがあればいただけないでしょうか。