VB6 ssTab奇怪

时间:2009-02-24 00:41:20

标签: vb6

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

Picture2.Line (0, 0)-(Picture2.Width, Picture2.Height), RGB(255, 255, 255), BF

当Tab 0可见时,它工作正常,但如果在显示不同的选项卡时调用此代码,则整个可见选项卡(以及选项卡0)的背景将显示为白色。不仅仅是Picture2的区域,而是两个标签的整个可见区域。除0以外的选项卡和当前选定的选项卡不受影响。

我第一次粗略地解决这个问题的方法是在上面的Line命令之前添加将标签更改回标签0:

SSTab1.Tab = 0 ' Select tab containing PictureBox2
DoEvents

但结果相同 - 原始标签和0标签现在都是白色的(尽管它确实将可见标签更改回标签0)。

我注意到当发生wallpainting时,Picture2.Width的值比它应该的大。如果Tab 0可见,当我调整窗口大小时,Picture2.Width在7180和21225 Twips之间变化。当我选择Tab 1并调整大小时,Picture2.Width大约为82180(高度保持原样)。

我知道SStab有点儿马车,但有没有人知道任何工作方式?我可以将修复(在重绘后重新绘制两个选项卡上的灰色背景)整合在一起,但我想了解为什么Picture2.Width会失去理智......

4 个答案:

答案 0 :(得分:5)

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

这不应该影响width属性 - 你有自定义的重新调整代码吗?

答案 1 :(得分:1)

有一个关于sstab和宽度的小铃声响起......但是如果我能回忆起什么那么该死的。不知何故,我认为对标签上的控件不可见有什么奇怪的东西?

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

我认为(不要“知道”)PictureBox控件经常直接处理表单的设备上下文...所以我不会感到惊讶,因为它不喜欢sstab对它做的事情。 / p>

我推荐的只是在切换到该标签时重绘...如果你知道我的意思。或者可能检测到图片框在屏幕外并跳过刷新(移动图片框时仍需要刷新)。

答案 2 :(得分:0)

一旦我理解了奇怪行为的原因(感谢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和rbobby!

答案 3 :(得分:0)

此问题的解决方案是基于每个标签编写调整大小代码。这允许SSTab将屏幕上的内容移出其他选项卡,并让您为当前选项卡移动内容。

以下是执行此类调整大小的一些代码。

(?<=[A-Z][a-z])|(?=(?<!^)[A-Z])