鼠标框 列表框 拖放
回复:鼠标框列表框拖放<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />谢谢。
回复:鼠标框列表框拖放setKey 是一个类似于单击/跟踪/拖动处理程序的击键处理程序。按键。GetUserData 就是你想要的;如果需要多个值,请使用关联数组、列表或矩阵。
回复:鼠标框列表框拖放谢谢克雷格。我想我开始弄清楚了。
Get/SetKey 中的 Key 是存储信息的另一种方式还是有其他用途?
回复:鼠标框列表框拖放原始 JSL 的扩展规模不会超过两个盒子,而且无论是否通用,都很难让它在两个以上的盒子上工作,因为假设“另一个盒子”产生了阻力。代码开头有一条注释解释了为什么 MouseBox 使用轨迹(鼠标移动但未按下按钮)方法而不是单击或拖动方法...单击和拖动都会阻止 ListBox 进行选择(然后采购阻力)。最初的 JSL 是针对 ListBox 当前无法完成的任务的解决方法。
如果不更改内部列表框支持,我认为您不会找到在三个或更多列表框之间拖放的完全令人满意的方法。我认为,你应该能够使用原始代码制作多对盒子;有一个串扰测试(检查另一个框的选择与拖动的文本是否匹配),可以检测大多数滥用尝试。
如果不需要从源ListBox中删除所选项目,那么问题就简单很多。使用删除的文本进行克隆,甚至不用担心找到另一个框,因为您不需要删除该项目。
----
您可以构建一些非常酷的拖放 GUI与 <<。使用它们的关键之一是让dragBegin 为其返回代码提供一个字符串。这是 dropCommit 将收到的字符串。MouseBox setDropTrack 的脚本索引有一个包含 15 个谜题的 JSL 示例:
DragBegin = 函数( {this, clickPt},
{x, y} = this << getUserData;
如果( nextToBlank( x, y ),
((this << child) << child) << getText/* 消息是文本框内容 */
, /* 别的 */
0 /* 抑制阻力 */
);
);/* 从源单元格中删除字符的函数,但前提是删除成功 */
粗线显示了使用返回值的两种方式:当 15 块拼图无法移动时忽略拖动尝试,或者如果可以移动则返回字母。该示例还有一些其他功能,例如帮助找出哪些方块相邻的 userData。
克雷格
回复:鼠标框列表框拖放嗨,克雷格,我正在努力让你的列表框更通用,因为我喜欢这些,但我想制作任意数量的列表框并将它们放在任何地方。我已经让它工作了,但选择似乎非常挑剔。您能想到什么来改变鼠标盒的灵敏度或任何东西吗?我不想依赖孩子/父母的关系。
名称默认为此处( 1 );
链接 =功能({列表}, {},
鼠标盒(
<<设置拖动启用( 1 ),
//<<设置轨道启用(1),
<<设置丢弃启用( 1 ),
<<设置拖动开始(
功能({这个,点击Pt},
这个<<设置丢弃启用( 0 );
)
),
/*<<设置轨迹(
函数({this, clickPt},
this << 设置 DropEnable(0);
sel = (这个 << 孩子)<< 被选中;
这个 << SetUserData(sel)
)
),
<<设置拖放轨迹(
函数({this, clickPt},
{destbox,sourcebox,lb,项目,i,lb_source,lb_dest,索引},
目标框 = 这个 << GetDestBox;
源框 = 这个 << GetSourceBox;
显示(源框);
/*lb_source = 源框 << 子项;
sel = lb_source << 被选中;
lb_dest = 目标框 << 孩子;
items = lb_source << 获取项目;
for(i = 1, i<=nitems(sel), i++,
索引 = 包含(lb_source<<获取项目, sel );
lb_source << 删除项目(索引);
lb_dest << 追加(sel );
);
显示(destbox,sel,文本,lb,索引,项目);
sourcebox << 设置删除启用(1);
1;*/
)
),*/
<<设置拖动结束(
功能({这个,clickPt,如何},
这个<<设置丢弃启用( 1 );
)
),
<<设置删除提交(
功能({这个, clickPt, 文本},
{destbox,sourcebox,lb,项目,i,lb_source,lb_dest,索引},
目标框=这个<<获取目标框;
源框=这个<<获取源框;
展示(来源盒);
lb_source = 源框 <<孩子;
sel = lb_source <<被选中;
lb_dest = 目标框 <<孩子;
项目 = lb_source <<获取物品;
为了(我= 1 ,我<=尼特姆斯(选择),i++,
索引 =包含(磅源<<获取物品, 选择);
磅源<<除去项目(指数);
lb_dest <<附加(塞尔)
);
展示(destbox、sel、文本、lb、索引、项目);
源框<<设置丢弃启用( 1 );
1 ;
)
),
列表框(列表)
)
);
新窗户( “测试” ,
列表框(
链接({ “1” , “2” , “3” }),
链接({ “4” , “5” , “6” }),
链接({ “8” , “9” , “14” })
)
);
新窗户( 《另一扇窗》 , //还不确定这是好事还是坏事
链接({ “测试” , 「其他这些」 , “东西” })
);
回复:鼠标框列表框拖放@Craige_Hales这是否是向 1 个列表框添加单击/拖动功能的理想设置? IE。 包含项目列表的列表框,用户可以在其中进行选择,然后拖动以调整列表的顺序。 如果不是,我认为我的解决方法将是向上和向下箭头按钮......有效但交互速度较慢。
回复:鼠标框列表框拖放我认为操作所选项目的向上/向下按钮是正确的答案;我不认为尝试将鼠标框像素级坐标与列表框项目编号对齐将是一个可靠的解决方案。
回复:鼠标框列表框拖放我想我已经把它列好了... 不确定这是否对任何人有用,但在这里发布以防万一......
跟踪选定的索引,然后在重新定位后重新选择。
/*
* Changes position of selected list items, moving them up in rank
*/
On Move Up = function({this},
selectedList = listBoxBoxVariable << Get Selected;
selectedIndices = listBoxBoxVariable << Get Selected Indices;
myNewIndices = List();
listBoxBoxVariable << Remove Selected;
<BR />
For Each({index, i}, selectedIndices,
tempName = selectedList[i];
newInsertIndex = Max(i-1,index-2);
listBoxBoxVariable << Insert(tempName, newInsertIndex);
Insert Into(myNewIndices, newInsertIndex+1);
);
For Each({index, i}, myNewIndices,
listBoxBoxVariable << Set Selected(index);
);
);
/*
* Changes position of selected list items, moving them down in rank
*/
On Move Down = function({this},
selectedList = listBoxBoxVariable << Get Selected;
selectedIndices = listBoxBoxVariable << Get Selected Indices;
myNewIndices = List();
listBoxBoxVariable << Remove Selected;
For Each({index, i}, selectedIndices,
tempName = selectedList[i];
newInsertIndex = Min(Length(TagListBox << Get Items),index);
listBoxBoxVariable << Insert(tempName, newInsertIndex);
Insert Into(myNewIndices, newInsertIndex+1);
);
For Each({index, i}, myNewIndices,
listBoxBoxVariable << Set Selected(index);
);
);