aardio

记录aardio中listview配置文件自动加载

2023-08-06  本文已影响0人  LCSan

winform.bindConfig会自动绑定配置文件保存和加载。其加载过程在执行bindConfig时就调用了config的afterLoad,进行控件赋值。

bindConfig = function(cfg,fields){
                ...
                if(fields){
                    cfg.afterLoad = function(){
                        for(name,ctrl in winform.eachControl() ){
                            var v =  fields[name]  : fields[ctrl.cls]
                            if( v  ) {
                                if(type(v) == "table"){
                                    for(n,v2 in v){
                                        if( ..string.find(name,n) ) {
                                            fields[name] = v2;
                                            v = v2;
                                            if(cfg[name]!==null){ ctrl[v] = cfg[name];} else {cfg[name]= ctrl[v]};
                                            continue 2;
                                        }
                                    } 
                                    continue;
                                }
                                if(cfg[name]!==null){ ctrl[v] = cfg[name];} else {cfg[name]= ctrl[v]};
                            }
                        };
                    }
                    cfg.afterLoad();
                    cfg.save();
                }
                ...
            };

listview比较特殊没有设置表头的时候,直接设置items会失效,解决这个先后问题即可。
1、将listview设置头的代码放在bindConfig前执行


import config;

// 这里必须放在conf前面,因为bingconfig会直接调用afterLoad,而listview没有头的情况下,直接设置items回丢数据。
winform.listview_task.setColumns({"序号";"任务时间";"任务内容";"物品限制数量"},{50;140;140;140});
// 开启双缓冲,显示更流畅
winform.listview_task.enableDoubleBuffering();
...
winform.bindConfig( config.winform,{
    edit = "text";
    radiobutton = "checked";
    checkbox = "checked";
    combobox = "selIndex";
    plus ={
        ["^chk"] = "checked";
        ["^edit"] = "text";
    };
    listbox = "items";
    listview = "items";
} );

2、在listview设置头后重新加载一遍配置

import config;
winform.bindConfig( config.winform,{
    edit = "text";
    radiobutton = "checked";
    checkbox = "checked";
    combobox = "selIndex";
    plus ={
        ["^chk"] = "checked";
        ["^edit"] = "text";
    };
    listbox = "items";
    listview = "items";
} );
...
// 这里必须放在conf前面,因为bingconfig会直接调用afterLoad,而listview没有头的情况下,直接设置items回丢数据。
winform.listview_task.setColumns({"序号";"任务时间";"任务内容";"物品限制数量"},{50;140;140;140});
// 开启双缓冲,显示更流畅
winform.listview_task.enableDoubleBuffering();
// 重新加载数据
config.winform.load()
上一篇下一篇

猜你喜欢

热点阅读