Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何编写代码获取控件提示文本(ControlTipText属性)的内容

沙溪一滴水  发表于:2014-04-17 11:19:23  
复制

附图是个房地产楼盘模型,是由图像控件组合而成的,即每一个窗户(代表一套房)都是一个独立的图像控件,每个图像控件的ControlTipText属性(即控件提示文本)都输入了相应的提示内容,当鼠标指向时会得到相应的提示,如附图中的“8-1801”代表8号楼1801房,由于应用需要,当触发控件的单击事件时要获取如图中的“8-1801”这样的提示内容并赋值给某一变量,请教各位老师有没有这样的函数或VB代码能够实现我的愿望。谢谢!我试过Set ctl = Screen.ActiveControl,但它只能用于如命令按钮等有焦点的控件,而不能用于图像等这样没有焦点的控件。

 

Top
煮江品茶 发表于:2014-04-17 12:07:34
在窗体加载事件中,通过遍历控件给控件的单击事件绑定事件处理程序即可。

cspa 发表于:2014-04-17 12:15:31
给你一个变通的办法:在每“一个独立的图像控件”下方放一个带有单击事件的控件,如标签控件。把相应的图像控件叠加在它的上方,这样看上去就看不见标签控件了。再用标签控件的属性完成你想要的功能就行了。

沙溪一滴水 发表于:2014-04-17 14:34:13
感谢cspa老师,你说的办法很好,我现在用的与你的类似,就是命令控件与图像控件叠加,但因资源有限,可添加到窗体或报表的控件和节的最多个数 是754个,所以用这种方法不是很理想,要是能直接获得鼠标指向时的提示内容就可以节省一半的资源。再次谢谢cspa老师,我上次的问题也得到了你的帮助,我要向你学习做个热心人。

zhaoyoulong 发表于:2014-04-17 14:45:33

煮江品茶老师的方法更简单




zhaoyoulong 发表于:2014-04-17 14:54:00

 假设图像的名称是

Im1,Im2,Im3....Imn

在窗体加载事件中键入:

Me.Controls("Im" & i).OnClick = "=ImClickOn(" & i & ")"  

=================================

function  ImClickOn(i as integer)'函数可以根据需要要设置参数和过程


Me.Controls("Im" & i).ControlTipText="8-18" & format(i,"00")

msgbox "这是第" & Me.Controls("Im" & i).ControlTipText  & "号房"

end  function



沙溪一滴水 发表于:2014-04-17 16:20:18
感谢zhaoyouiong老师和煮江品茶老师,可能我问题表述的不是很清楚,Me.controls("Im"&i).controlTiptext="8-18"&format(i,"00")是写入内容,而我要的恰恰相反是要读取控件提示文本的内容,有没有好办法?谢谢!

cspa 发表于:2014-04-17 16:25:18
图像控件是有单击事件的,见示例:�������ش˸���

沙溪一滴水 发表于:2014-04-17 16:45:12
cspa老师好,可能是我没把问题表达准确,我问的不是单击事件的问题,我的附图“8-1801”处其实还有一个鼠标箭头(因截幕后的图片显示不了),更准确的说是要获取鼠标下方的控件提示内容

cspa 发表于:2014-04-17 16:54:58

你说:“当鼠标指向时会得到相应的提示,如附图中的“8-1801”代表8号楼1801房,由于应用需要,当触发控件的单击事件时要获取如图中的“8-1801”这样的提示内容并赋值给某一变量,”

我的示例就是实现了你的需求啊。

你说:“获取鼠标下方的控件提示内容”,必须要有触发事件啊,不是单击就是双击。如果鼠标指向哪里就动作,那就乱了,不知会把哪个提示文本赋值给变量了。



zhaoyoulong 发表于:2014-04-17 17:14:29

可以用窗体的鼠标移动事件来获取

鼠标的X、Y值在控件的位置范围内时触发事件



沙溪一滴水 发表于:2014-04-18 11:30:33

非常感谢各位老师,还是我自己没说明白,这样下面列出代码让老师们诊断一下,在加红颜色的地方该用什么方法:

---------------------------------------------------------------------------------------
Private Sub Form_Load() '加载,遍历控件
    Dim ctr As Control
    For Each ctr In Me.Controls
        If ctr.ControlType = acImage Then 'acImage为图像控件关键字
        ctr.OnClick = "=MLANDJSJ()" '设定单击事件执行自定义函数
        End If
    Next
End Sub
-------------------------------------------------------------------------------------------
Private Function MLANDJSJ()
Dim ctll As Control
Dim BQMC As String  '房号编码

'(这里有什么方法能把ControlTipText属性里的内容如“8-1801”读出来并赋值给变量BQMC,以便实现如下标签窗体的功能)

   DoCmd.OpenForm "标签"
   Call Form_Timer
   XX = IIf(XX > 20475 - 5670, XX - 5670, XX)
   YY = IIf(YY > 10959 - 1375, YY - 1375, YY)
   DoCmd.MoveSize XX, YY  '在XX,YY坐标上即当前鼠标所处位置上打开标签窗体
   Forms!标签.RecordSource = "SELECT * FROM 滨河壹号一期面积表 WHERE [编码]=" & " '" & BQMC & "';" '筛选标签窗体的记录为当前房号编码的数据
End Function
---------------------------------------------------------------------------------------------
Private Sub Form_Timer() '触发器,坐标定位
  Dim P1 As POINTAPI
  GetCursorPos P1
  XX = P1.x * 15
  YY = P1.Y * 15
'X,Y坐标的单位是像素,与计算系统[开始]-[控制面板]-[显示]-[设置]-[屏幕分辨率]的数值相同
'VB的坐标单位是缇,1缇=15像素
End Sub
--------------------------------------------------------------------------------------------



沙溪一滴水 发表于:2014-04-18 11:36:23


沙溪一滴水 发表于:2014-04-18 18:29:13
Private Function MLANDJSJ()
Dim ctll As Control
Dim BQMC As String  '房号编码

'(这里有什么方法能把ControlTipText属性里的内容如“8-1801”读出来并赋值给变量BQMC,以便实现如下标签窗体的功能)

   DoCmd.OpenForm "标签"
   Call Form_Timer
   XX = IIf(XX > 20475 - 5670, XX - 5670, XX)
   YY = IIf(YY > 10959 - 1375, YY - 1375, YY)
   DoCmd.MoveSize XX, YY  '在XX,YY坐标上即当前鼠标所处位置上打开标签窗体
   Forms!标签.RecordSource = "SELECT * FROM 滨河壹号一期面积表 WHERE [编码]=" & " '" & BQMC & "';" '筛选标签窗体的记录为当前房号编码的数据
End Function



落尘_小新 发表于:2014-04-19 00:07:08

第一步: 需要把  BQMC 变量在代码声明节中声明为公用变量用以保存房号编码

Public BQMC As String

第二步: 写一个函数给这个变量赋值,例如:

Public Function LLX(STR As String)
    BQMC = STR
End Function
第三步: 在窗体加载事件中加入一句代码给所有图像控件的鼠标移动事件加入代码,修改后如下.

Private Sub Form_Load()
    Dim ctr As Control
    For Each ctr In Me.Controls
        If ctr.ControlType = acImage Then    'acImage为图像控件关键字
            ctr.OnClick = "=MLANDJSJ()"    '设定单击事件执行自定义函数
            ctr.OnMouseMove = "=LLX(" & ctr.ControlTipText & ")"            '此步加入此句代码
        End If
    Next
End Sub

第四步: 把 MLANDJSJ 函数中的声明变量的这一句删除.

Dim BQMC As String  '房号编码   这句要删除



沙溪一滴水 发表于:2014-04-19 15:30:50

    落尘_小新老师好!非常感谢你的赐教,困扰我多日的问题终于解决了。Access交流中心正因为有你这样一批的老师的无私奉献才有了这样的勃勃生机,你们就是最可爱的人!现将结果汇报一下,辛苦老师了。

   遵照您的方法,经调试作如下更改就顺利通过了(灰色行是原代码予以注释掉,黄色行是更正行)

----------------------------------------------------------------

Private Sub Form_Load() '加载,遍历控件
    Dim ctr As Control
    For Each ctr In Me.Controls
        If ctr.ControlType = acImage Then 'acImage为图像控件关键字 

           'ctr.OnClick = "=MLANDJSJ()" '设定单击事件执行自定义函数

           'ctr.OnMouseMove = "=LLX(" & ctr.ControlTipText & ")"   

           ctr.OnClick = "=MLANDJSJ('" & ctr.ControlTipText & "')" '设定单击事件执行自定义函数

           '因房号,如8-1801是一组数字要加引号,否则系统会当作8-1801=-1793处理
        End If
    Next
End Sub

--------------------------------------------------------

Private Function MLANDJSJ(STR As String)

'Private Function MLANDJSJ()
'Dim ctll As Control
Dim BQMC As String  '房号编码

BQMC=STR

   DoCmd.OpenForm "标签"
   Call Form_Timer
   XX = IIf(XX > 20475 - 5670, XX - 5670, XX)
   YY = IIf(YY > 10959 - 1375, YY - 1375, YY)
   DoCmd.MoveSize XX, YY  '在XX,YY坐标上即当前鼠标所处位置上打开标签窗体
   Forms!标签.RecordSource = "SELECT * FROM 滨河壹号一期面积表 WHERE [编码]=" & " '" & BQMC & "';" '筛选标签窗体的记录为当前房号编码的数据
End Function

--------------------------------------------------------------




 

 



落尘_小新 发表于:2014-04-20 14:59:03
加油,修改后代码更加简练.

总记录:16篇  页次:1/1 9 1 :