
实际上,只要你激活treeview,就不可能会没有选中节点,因为即使你不选中,它也会默认为选中第一个根节点。
你可能是需要判断节点的名称(name),或者需要获取根节的位置信息而已。
dim
nodx
as
node,
trid%
set
nodx
=
treeview1selecteditem‘’获取名称
trid
=
treeview1selecteditemindex‘’获取位置(序号)
msgbox
nodx
msgbox
trid
实现方式:
可以实现采用手动触发事件的方式。
TreeItem<AbstractTreeNode> currentTreeItem = ;//当前发生修改的树节点
currentTreeItemgetValue()setNodeText("abc");
//自动触发修改的事件,使树节点的显示信息能同步修改
EventfireEvent(currentTreeItem, new TreeItemTreeModificationEvent<AbstractTreeNode>(TreeItemvalueChangedEvent(), currentTreeItem, currentTreeItemgetValue()));
构建树节点的显示时自定义渲染方式:
TreeView<AbstractTreeNode> leftNodeTree = new TreeView<AbstractTreeNode>();
leftNodeTreesetCellFactory(new Callback<TreeView<AbstractTreeNode>, TreeCell<AbstractTreeNode>>() {
@Override
public TreeCell<AbstractTreeNode> call(TreeView<AbstractTreeNode> param) {
return new TreeCellImpl();
}
});
public class TreeCellImpl extends TreeCell<AbstractTreeNode> {
@Override
public void updateItem(AbstractTreeNode item, boolean empty) {
superupdateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(itemgetNodeText());
setGraphic(itemgetGraphic());
if (itemgetNodeType()equals(NodeTypeTREE_CONFIG_NODE)) {
setContextMenu(new TreeConfigContextMenu(thisgetTreeView(), thisgetTreeItem(), item));
} else if (itemgetNodeType()equals(NodeTypeTREE_DETAIL_CONFIG_NODE)) {
setContextMenu(new TreeDetailConfigContextMenu(thisgetTreeView(), thisgetTreeItem(), item));
} else if (itemgetNodeType()equals(NodeTypeSHAREDATA_FIELDS_NODE)) {
// setContextMenu(new TreeConfigContextMenu(item));
}
}
}
}
class AbstractTreeNode {
private String nodeId;
private String nodeText;
public String getNodeId() {
return nodeId;
}
public void setNodeId(String nodeId) {
thisnodeId = nodeId;
}
public String getNodeText() {
return nodeText;
}
public void setNodeText(String nodeText) {
thisnodeText = nodeText;
}
XAML:
<TreeView TreeViewItemSelected="TreeView_Selected" />后台代码:
private void TreeView_Selected(object sender, RoutedEventArgs e)
{
TreeViewItem tviSelected = eOriginalSource as TreeViewItem;
}
方法如下:
新建了一个NM_Click消息响应函数,用
hParent
=
m_TreeCtrlGetSelectedItem();
m_TreeCtrlGetItemText(hParent);
获取当前选中的文本,但获取的竟然是前一次点击的文本,而非当前点击的文本,请问这是问什么?怎样才能正确获取当前点击的文本?
用OnSelectChanged获得的方法,是有缺陷的,例如两次都点同一个项,那么就不能执行了
解决方法:
DWORD
dwpos
=
GetMessagePos();
TVHITTESTINFO
ht
=
{0};
htptx
=
GET_X_LPARAM(dwpos);
htpty
=
GET_Y_LPARAM(dwpos);
::MapWindowPoints(HWND_DESKTOP,pNMHDR->hwndFrom,&htpt,1);
//把屏幕坐标转换成控件坐标
TreeView_HitTest(pNMHDR->hwndFrom,&ht);
//确定点击的是哪一项
strOpcServerName
=
m_OpcServerListGetItemText(hthItem);
自己数就行,
HTREEITEM hItem = m_TreeGetSelectedItem();
in nCount = 0;
while(hItem)
{
nCount ++;
hItem = m_TreeGetParentItem(hItem);
}
treeon("itemclick",function(view,record,item,index,e){
alert("点击的节点ID是:"+recordrawid+",文字是:"+recordrawtext);
});
以上就是关于treeview如何判断当前是否有选中节点全部的内容,包括:treeview如何判断当前是否有选中节点、javafx treeitem的getchildren在什么时候调用、wpf TreeView通过ItemSource设置的数据源。通过获取SelectItem时结果是实体类。怎么更改为TreeViewItem等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)