VB6 ssTab怪异

VB6 ssTab怪异,vb6,Vb6,我在VB6程序中使用ssTab控件(这可能是我的全部问题),并将数据打印到位于选项卡0上的Picturebox中。当我重新绘制图形时(例如,在调整窗口大小后),我要做的第一件事是清除该框: Picture2.Line (0, 0)-(Picture2.Width, Picture2.Height), RGB(255, 255, 255), BF 当选项卡0可见时,这可以正常工作,但如果在其他选项卡可见时调用此代码,则整个可见选项卡(以及选项卡0)的背景将被绘制为白色。不仅仅是图片2的区域,而是

我在VB6程序中使用ssTab控件(这可能是我的全部问题),并将数据打印到位于选项卡0上的Picturebox中。当我重新绘制图形时(例如,在调整窗口大小后),我要做的第一件事是清除该框:

Picture2.Line (0, 0)-(Picture2.Width, Picture2.Height), RGB(255, 255, 255), BF
当选项卡0可见时,这可以正常工作,但如果在其他选项卡可见时调用此代码,则整个可见选项卡(以及选项卡0)的背景将被绘制为白色。不仅仅是图片2的区域,而是两个选项卡的整个可见区域。0以外的选项卡和当前选定的选项卡不受影响

我第一次尝试粗略地修复此问题是在上述命令之前添加将选项卡更改回选项卡0:

SSTab1.Tab = 0 ' Select tab containing PictureBox2
DoEvents
但这会得到相同的结果-原始选项卡和0选项卡现在都是白色的(尽管它确实会将可见选项卡更改回选项卡0)

我注意到当壁画出现时,Picture2.Width的值比它应该的值大很多。如果选项卡0可见,则图片2。当我调整窗口大小时,宽度在7180和21225之间变化。当我选择Tab 1并调整大小时,图2.宽度大约为82180(高度保持在应该的位置)


我知道SStab有点不对劲,但是有人知道有没有工作犬吗?我可能可以拼凑出一个补丁(在重画后将两个标签上的背景重新涂成灰色),但我想了解为什么图片2.Width会失去理智…

有一个关于sstab和Width的小铃声响起。。。但如果我能回忆起发生了什么,我会后悔的。不知怎的,我在想它对选项卡上不可见的控件做了奇怪的事情

是的。。。它将它们“移出屏幕”(将“左”设置为非常大的负位置)。或者至少我的快速肮脏测试显示了这一点

我认为(不“知道”)PictureBox控件通常直接处理窗体的设备上下文。。。因此,它不喜欢sstab对它所做的事情并不让我感到惊讶


我建议只在切换到该选项卡时重新绘制。。。如果你知道我的意思。或者检测到图片框不在屏幕上并跳过刷新(移动图片框时仍需刷新)。

有一个关于sstab和宽度的小铃声响起。。。但如果我能回忆起发生了什么,我会后悔的。不知怎的,我在想它对选项卡上不可见的控件做了奇怪的事情

是的。。。它将它们“移出屏幕”(将“左”设置为非常大的负位置)。或者至少我的快速肮脏测试显示了这一点

我认为(不“知道”)PictureBox控件通常直接处理窗体的设备上下文。。。因此,它不喜欢sstab对它所做的事情并不让我感到惊讶


我建议只在切换到该选项卡时重新绘制。。。如果你知道我的意思。或者检测到图片框在屏幕外并跳过刷新(当图片框移动时仍需刷新)。

SStab使一个选项卡上的控件可见而隐藏其他控件的方式是使左侧属性为负值(基本上为“屏幕外”)


这不应该影响width属性-您是否有自定义的重新调整大小代码???

SStab使一个选项卡上的控件可见而隐藏其他控件的方式是将Left属性设置为负值(基本上是“屏幕外”)


这不应该影响width属性-您是否有自定义的重新调整大小代码???

一旦我理解了这种奇怪行为的原因(多亏了DJ:“SStab使一个选项卡上的控件可见而隐藏其他控件的方式是使.Left属性为负值(基本上是“屏幕外”)),我就意识到了问题所在

正如DJ所说,当您选择其中一个不包含PictureBox的选项卡时,PictureBox.Left属性将变得非常负(如-74000)。在我的Form_Resize()代码中,我有以下行:

Picture2.Width = MainForm.Width - (Picture2.Left + PictureBoxMargin)
这使得Picture2.Width成为一个更大的正数(我的一个大错误)

最终的解决方案是创建一个公共变量Picture2LeftEdge,在Form_Initialize()例程中将其设置为等于Picture2.Left,并将上面的调整大小行更改为:

Picture2.Width = MainForm.Width - (Picture2LeftEdge + PictureBoxMargin)

感谢DJ和Rbby的快速回复

一旦我理解了这种奇怪行为的原因(多亏了DJ:“SStab使一个选项卡上的控件可见而隐藏其他控件的方式是通过使.Left属性为负数(基本上是“屏幕外”)”),我就意识到问题出在哪里了

正如DJ所说,当您选择其中一个不包含PictureBox的选项卡时,PictureBox.Left属性将变得非常负(如-74000)。在我的Form_Resize()代码中,我有以下行:

Picture2.Width = MainForm.Width - (Picture2.Left + PictureBoxMargin)
这使得Picture2.Width成为一个更大的正数(我的一个大错误)

最终的解决方案是创建一个公共变量Picture2LeftEdge,在Form_Initialize()例程中将其设置为等于Picture2.Left,并将上面的调整大小行更改为:

Picture2.Width = MainForm.Width - (Picture2LeftEdge + PictureBoxMargin)

感谢DJ和Rbby的快速回复

这个问题的解决方案是根据每个选项卡编写调整大小代码。这允许SSTab将其他选项卡的内容移出屏幕,并允许您将当前选项卡的内容四处移动

下面是一些执行这种调整大小的代码

Private Sub Form_Resize()

Select Case SSTab.Tab
Case TAB0_INDEX
    With fraTab0
        .Left = 150
        .Top = 320
        .Height = SSTab.Height - 400
        .Width = SSTab.Width - 200
    End With

Case TAB1_INDEX

    With txtMaxPixelData
        .Height = SSTab.Height - 850
    End With
    With txtPixelData
        .Height = txtMaxPixelData.Height
    End With
End Select
End Sub

解决这个问题的方法是按标签写调整大小的代码。这允许SSTab将其他选项卡的内容移出屏幕,并允许您将当前选项卡的内容四处移动

下面是一些执行这种调整大小的代码

Private Sub Form_Resize()

Select Case SSTab.Tab
Case TAB0_INDEX
    With fraTab0
        .Left = 150
        .Top = 320
        .Height = SSTab.Height - 400
        .Width = SSTab.Width - 200
    End With

Case TAB1_INDEX

    With txtMaxPixelData
        .Height = SSTab.Height - 850
    End With
    With txtPixelData
        .Height = txtMaxPixelData.Height
    End With
End Select
End Sub

是的,我有定制的尺码代码。我只是把范围缩小到你和rbobby所说的-左边的属性被转移到-70000左右。知道它这样做的原因是很有帮助的-我现在应该可以让一些东西工作了…是的,我有自定义的重新大小代码。我只是把范围缩小到你和rbobby所说的-左边的属性被转移到-70000左右。知道它这样做的原因是很有帮助的——我应该能做点什么