请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 481|回复: 2

[求助] 如何给继承的控件添加属性?

[复制链接]

1

主题

3

帖子

6

积分
交易币
0

新手入门

Rank: 1

发表于 2018-11-23 10:00:56 | 显示全部楼层 |阅读模式
我想继承一个控件,然后给他添加一个新属性,该如何实现呢?
代码:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=319;bottom=183)
winform.add(
edit={cls="edit";text="Edit";left=44;top=63;right=206;bottom=131;edge=1;multiline=1;z=2};
static={cls="static";text="Static";left=44;top=31;right=106;bottom=52;border=1;transparent=1;z=1}
)
/*}}*/

import util.metaProperty;

class myLabel {
        ctor(static){//继承一个static控件
                this = static;
        }
        前缀 = "自定义_";
        @_metaProperty;//设置属性表
}

myLabel._metaProperty = util.metaProperty(

    别名 = {
        _get = function(){            
            return owner.前缀 ++ owner.cls;//返回一个别名
        }
    };

)

mylabel = myLabel(winform.static);
winform.edit.text = mylabel.别名;//出现Can't _remove fixed metatable!错误。



winform.show()
win.loopMessage();

//我的理解是static控件自带一个属性元表,这个属性元表是不能移除的,所以新的属性添加不上去。
//那么如何给所继承的控件添加一个新属性呢?

回复

使用道具 举报

1

主题

3

帖子

6

积分
交易币
0

新手入门

Rank: 1

 楼主| 发表于 2018-11-23 14:24:07 | 显示全部楼层
经高手指点,解决了此问题,不敢独享,贴上答案。

好久没看到群里面有玩元表的了。我来解答下吧。解决这个问题取决于那个元表是不是用了float可移除标记。如果没有一般是不能在进行赋值元表。
不过绕过的方法应该是有的。现在有另外几个方法供你参考。
首先可以不用直接继承的方式。你要继承的可以作为成员来处理。或者是用间接继承的方法。

//下面给一段间接继承的例子
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=319;bottom=183)
winform.add(
edit={cls="edit";text="Edit";left=44;top=63;right=206;bottom=131;edge=1;multiline=1;z=2};
static={cls="static";text="Static";left=44;top=31;right=106;bottom=52;border=1;transparent=1;z=1}
)
/*}}*/

import util.metaProperty;

class myLabel {
        ctor(static){};
        前缀 = "自定义_";
        @..util.metaProperty(
                别名 = {
                        _get = function(){            
                    return owner.前缀 ++ owner.cls;//返回一个别名
                }        
                };
                @{ _get = static } /*属性表可继承*/
        )
}

mylabel = myLabel(winform.static);
winform.edit.text = mylabel.别名;//出现Can't _remove fixed metatable!错误。

winform.show()
win.loopMessage();
回复 支持 反对

使用道具 举报

2

主题

10

帖子

13

积分
交易币
0

新手入门

Rank: 1

发表于 2019-4-9 19:54:08 | 显示全部楼层
楼主辛苦了。我把你的代码贴过去出错不能运行,估计是版本升级了。
能稍微讲解一下控件继承的大概操作吗?
谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2019-8-22 09:33 , Processed in 0.093749 second(s), 24 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表