我已自定义TreeNode
和TreeView
,因为我的TreeView
具有普通复选框TreeNode
和自定义的TreeNode
,其中包含组合框。我的树视图是可滚动的,但是当我向下滚动时,带有组合框的TreeNode不会与树视图一起滚动。为什么?
示例:
MyTreeNode
具有ComboBox
属性:
public ComboBox ComboBox
{
get
{
likelihood.DropDownStyle = ComboBoxStyle.DropDownList;
return likelihood;
}
set
{
likelihood = value;
likelihood.DropDownStyle = ComboBoxStyle.DropDownList;
}
}
和MyTreeView
具有此方法:
protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
{
if (e.Node is MyTreeNode)
{
myTreeNode = (MyTreeNode)e.Node;
Controls.Add(myTreeNode.ComboBox);
myTreeNode.ComboBox.SetBounds(myTreeNode.Bounds.X, myTreeNode.Bounds.Y, myTreeNode.Bounds.Width + 25, myTreeNode.Bounds.Height);
myTreeNode.ComboBox.Show();
}
}
MyTreeView
是在两个事件(AfterCheck
和DrawNode
)上“注册”的,属性DrawMode
是OwnerDrawAll
。
谢谢
答案 0 :(得分:0)
这是预期的行为。 TreeView对ComboBox一无所知,并且在滚动时不会同步其位置。您应该手动进行同步。
除了在显示时立即计算ComboBox边界外,还应该在TreeView滚动事件和节点展开/折叠事件后重新定位ComboBox。
要处理展开/折叠,您应覆盖OnAfterExpand和OnAfterCollapse。
处理滚动事件不是一件容易的事,因为TreeView不会公开滚动事件。但这是可行的,这是来自MSDN社区问答的一个示例:treeview scrollbar event (detecting/controlling)。