注册 登录
编程论坛 VFP论坛

树控件失去焦点时背景色变灰了,有办法不变色吗?

laibinhua 发布于 7 天前 13:48, 223 次点击
请教,树控件失去焦点时背景色变灰了,有办法不变色吗?
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
8 回复
#2
sam_jiang7 天前 16:05
失去焦点变灰不是正常的吗?你的应用程序界面只能有一个焦点,根据你选择的功能切换焦点,很符合逻辑啊。

你是想获得焦点时返回刚才那个节点吧?可以在失去焦点时,记录index,在获得焦点时,在设置回这个index。。。
#3
easyppt6 天前 09:59
估计楼主的意思是:如何设置TreeView 失去焦点后的背景色,因为默认灰底看不清
#4
laibinhua6 天前 10:10
回复 3楼 easyppt
对,因为看不清,想把失去焦点时的背景色改成亮色
#5
sam_jiang6 天前 17:25
回复 4楼 laibinhua
你可以搜索一下,以前有贴讨论如何修改背景色的,好像是要用到api的sendmessage。
#6
shizi06 天前 18:59
sendmessage我没有搞定。
我是从LostFocus着手的,先备份选中的颜色,lost后保持该项颜色。这段代码是lostFocus的:
程序代码:
** 失去焦点后,保持选中突出色,涉及其他3处:HideSelection=.f.;Refresh装载时初始化3属性;NodeClick恢复原选中项的颜色
If Type([This.SelectedItem])=[O] And (Type([])#[C] Or This.SelectedItem.Key#)  &&Key比对比Node比对稳定
    ThisForm.LockScreen=.t. &&SelectedItem改颜色会闪屏
    =This.SelectedItem.Key
    =This.SelectedItem.BackColor  &&备份原颜色
    =This.SelectedItem.ForeColor
    This.SelectedItem.BackColor=Rgb(0,120,215)
    This.SelectedItem.ForeColor=Rgb(255,255,255)
    ThisForm.LockScreen=.f.
Endif
#7
laibinhua6 天前 20:05
回复 6楼 shizi0
你好,谢谢回复,用你的代码直接放在lostfocus里运行还是没有效果,是不是什么地方还要有代码?
我用下面这段代码放入lostfocus里也不行
LOCAL loNode
loNode = This.SelectedItem
IF !ISNULL(loNode)
   this.nodeClick(loNode)
   this.SetFocus()   
   This.Refresh()
ENDIF
#8
my23185 天前 07:06
是否可以换个思路,选中与非选用不同图标,比如选中用彩色图标,未选用黑白图标
#9
csyx5 天前 07:37
以下是引用laibinhua在2025-3-30 20:05:52的发言:
我用下面这段代码放入lostfocus里也不行

理解错了吧,shizi0 给出的就是 LostFocus 事件的代码,你只要按照他第一行注释中的说明完成剩下的工作即可。
如果树有 CheckBoxes 的话,还要在 NodeCheck 事件中添加与 NodeClick 同样逻辑的代码

另 @shizi0
我验证的结果是要不厌其烦的在 LosstFocus 里设置 HideSelection,原因可能是我用的是 XtremeSuiteControls.TreeView 而非 M$ 的 TreeView
程序代码:
If Type([This.SelectedItem])=[O] And ...
    ThisForm.LockScreen=.t.
    ....
    This.HideSelection = .t.   && ***
    ThisForm.LockScreen=.f.
Endif

1