win.ui.tabs 的 clear() 函数导致程序报错的解决办法

光庆 1天前 97

执行 win.ui.tabs 的 clear() 函数后,会导致程序报错。

因为这个函数,清除了tabs的第1个项目,从而导致 tabList[1].setTimeout() 函数中访问该项目时出错。

测试代码如下:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add({
plus={cls="plus";text="111111";left=224;top=184;right=360;bottom=248;forecolor=32768;z=1};
plus2={cls="plus";text="22222";left=368;top=184;right=504;bottom=248;forecolor=32768;z=2}
})
/*}}*/
winform.show();
import win.ui.tabs
var tabs = win.ui.tabs(winform.plus,winform.plus2);
tabs.clear();
win.loopMessage();


修改方法:

将 win.ui.tabs 库文件的如下代码:

 		if(defaultStyle){
			this.tabList[1].setTimeout( 
				function(){
					if(!this.style){
						var $fixDefaultStyle = {
							color = this.tabList[1].argbColor; // 每次都访问 tabList[1] ,若清除此项目,便出错。
							foreground = this.tabList[1].getForeground(); // 每次都访问 tabList[1] ,若清除此项目,便出错。
						}
						
						this.skin( ..table.clone(defaultStyle));
						
						//避免将默认字体修改为白色,用户自定义样式又指定了白色背景且没有指定字体颜色
						this.$fixDefaultStyle = $fixDefaultStyle;
					}
				},100
			)			
		}

改为:

		if(defaultStyle){
			this.tabListargbColor = this.tabList[1].argbColor; // 预存此值,以便后用,与项目脱钩,无需每次都访问
			this.tabListgetForeground = this.tabList[1].getForeground(); // 预存此值,以便后用,与项目脱钩,无需每次都访问
			this.tabList[1].setTimeout( 
				function(){
					if(!this.style){
						var $fixDefaultStyle = {
							color = this.tabListargbColor;
							foreground = this.tabListgetForeground;
						}
						this.skin( ..table.clone(defaultStyle));
						//避免将默认字体修改为白色,用户自定义样式又指定了白色背景且没有指定字体颜色
						this.$fixDefaultStyle = $fixDefaultStyle;
					}
				},100
			)			
		}



最新回复 (1)
  • 近我者赤 1天前
    0 2

返回