作成日: 2019/03/08 最終更新日: 2019/03/08
文書種別
不具合
状況
回避方法あり
詳細
タブのスクロール矢印が表示されているとき、SelectedTabChangedイベント内で、TabPages.Insertメソッドを用いて、選択されたタブの右隣に新規タブページを挿入しようとすると、指定した位置とは異なる位置に新規タブページが挿入されます。
※この動作は、CanMoveTansプロパティがtrueの場合に発生します。
※この動作は、CanMoveTansプロパティがtrueの場合に発生します。
回避方法
タブ選択時に発生するSelectedIndexChangingイベント内でタイマーを起動し、SelectedTabChanged/SelectedIndexChangedイベントが終わったタイミングでTabPages.Insertメソッドを実行します。
※下記コードで、TimerのIntervalを、タブ追加後の内部的なタブ選択処理が完了するのに必要な秒数(例:本サンプルでは300ミリ秒)以上に設定する必要があります。
◎サンプルコード(VB)
◎サンプルコード(C#)
※下記コードで、TimerのIntervalを、タブ追加後の内部的なタブ選択処理が完了するのに必要な秒数(例:本サンプルでは300ミリ秒)以上に設定する必要があります。
◎サンプルコード(VB)
Dim index As Integer = 0
Dim i As Integer = 0
Dim isUpdating As Boolean
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
isUpdating = True
C1DockingTab1.CanMoveTabs = True
C1DockingTab1.SelectedIndex = 0
Timer1.Interval = 300
isUpdating = False
End Sub
Private Sub C1DockingTab1_SelectedIndexChanging(sender As Object, e As C1.Win.C1Command.SelectedIndexChangingEventArgs) Handles C1DockingTab1.SelectedIndexChanging
If isUpdating = False Then
Console.WriteLine(e.NewIndex)
index = e.NewIndex
Timer1.Start()
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Timer1.Stop()
isUpdating = True
Dim tabPage As C1DockingTabPage = New C1DockingTabPage()
tabPage.Text = "test" + i.ToString
i = i + 1
C1DockingTab1.TabPages.Insert((index + 1), tabPage)
C1DockingTab1.SelectedIndex = index
C1DockingTab1.ScrollToSelectedTab()
isUpdating = False
End Sub
Dim i As Integer = 0
Dim isUpdating As Boolean
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
isUpdating = True
C1DockingTab1.CanMoveTabs = True
C1DockingTab1.SelectedIndex = 0
Timer1.Interval = 300
isUpdating = False
End Sub
Private Sub C1DockingTab1_SelectedIndexChanging(sender As Object, e As C1.Win.C1Command.SelectedIndexChangingEventArgs) Handles C1DockingTab1.SelectedIndexChanging
If isUpdating = False Then
Console.WriteLine(e.NewIndex)
index = e.NewIndex
Timer1.Start()
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Timer1.Stop()
isUpdating = True
Dim tabPage As C1DockingTabPage = New C1DockingTabPage()
tabPage.Text = "test" + i.ToString
i = i + 1
C1DockingTab1.TabPages.Insert((index + 1), tabPage)
C1DockingTab1.SelectedIndex = index
C1DockingTab1.ScrollToSelectedTab()
isUpdating = False
End Sub
◎サンプルコード(C#)
int index = 0;
int i = 0;
bool isUpdating = false;
public Form1()
{
InitializeComponent();
c1DockingTab1.CanMoveTabs = true;
c1DockingTab1.SelectedIndex = 0;
timer.Interval = 300;
}
private void C1DockingTab1_SelectedIndexChanging(object sender, C1.Win.C1Command.SelectedIndexChangingEventArgs e)
{
if (!isUpdating)
{
Console.WriteLine(e.NewIndex);
index = e.NewIndex;
timer.Start();
}
}
private void Timer_Tick(object sender, EventArgs e)
{
timer.Stop();
isUpdating = true;
C1DockingTabPage tabPage = new C1DockingTabPage();
tabPage.Text = $"test{(i++)}";
c1DockingTab1.TabPages.Insert(index + 1, tabPage);
c1DockingTab1.SelectedIndex = index;
c1DockingTab1.ScrollToSelectedTab();
isUpdating = false;
}
int i = 0;
bool isUpdating = false;
public Form1()
{
InitializeComponent();
c1DockingTab1.CanMoveTabs = true;
c1DockingTab1.SelectedIndex = 0;
timer.Interval = 300;
}
private void C1DockingTab1_SelectedIndexChanging(object sender, C1.Win.C1Command.SelectedIndexChangingEventArgs e)
{
if (!isUpdating)
{
Console.WriteLine(e.NewIndex);
index = e.NewIndex;
timer.Start();
}
}
private void Timer_Tick(object sender, EventArgs e)
{
timer.Stop();
isUpdating = true;
C1DockingTabPage tabPage = new C1DockingTabPage();
tabPage.Text = $"test{(i++)}";
c1DockingTab1.TabPages.Insert(index + 1, tabPage);
c1DockingTab1.SelectedIndex = index;
c1DockingTab1.ScrollToSelectedTab();
isUpdating = false;
}
旧文書番号
83734