如何将组合框视为指向另一种形式的链接?

时间:2018-05-04 16:27:19

标签: ms-access combobox access-vba

我一直在努力尝试修改组合框,将当前所选项目视为另一种形式的链接。

基本工作流程很简单;当没有从列表中选择新项目时,我希望组合框中的文本像链接一样运行。此链接将打开一个新表单,并找到相关记录。即。单击客户名称以打开客户表单并显示其信息。

问题是组合框特有的;相同的功能适用于文本框。将代码放入Click事件,打开表单,转到正确的记录,轻松自如。我应该可以用组合框做同样的事情,对吧?

不。 Combobox only fires when selecting a new item from the list上的Click事件。它说Clicks a control with the left mouse button. Clicking a control with the right or middle mouse button does not trigger this event.,但点击时它没有做任何事情。

好的。我们将其设置为超链接。这应该会触发Click事件!不。它首先尝试遵循"链接",由于该值是内部主键,因此它不知道如何处理它。所以它出错了,无处可去。

现在我的尝试变得更加深奥。让我们在组合框后面隐藏一个矩形,然后将代码放入其中点击事件!不。不会流到后面的物体。让我们把它放在下拉列表的顶部!不。仍然没有触发矩形的Click事件。

好的,摆脱矩形。让我们尝试将代码放在Combobox的MouseUp事件中。答对了。单击文本现在可以使用。但是......现在每次点击它都会这样做。当我试图选择其他客户时,我不希望它打开表单。

我已经尝试了detecting when the dropdown is expanded,并且在返回true时没有关注该链接。那...有点工作。它现在不会关闭扩展的下拉列表,你无法调试它,因为检测代码是低级别并显示调试屏幕使其返回false(因为下拉列表不再打开)

我尝试将静态变量设置为仅在未选择新项目时跟随链接。这是非常不一致的,因为没有好办法弄清楚组合框的状态。

将文字转换为可点击的链接不应该这么难。如何在组合框中将当前选中的项目作为链接,而不是同时将组合框中的所有其他项目作为链接?我错过了什么事件吗?

2 个答案:

答案 0 :(得分:3)

我认为我有一个适合您的解决方案,因为我了解您正在尝试做的事情。

要在您的组合框(我使用//define form variables var formSubmition = document.getElementById('formSubmition'); //addEventListener formSubmition.addEventListener('submit',dataSubmit,true);; function pageView(){ //localstorage_cookie = localStorage setItem('userpage_id','27727'); } // connect to server via XMLHttpRequest function serverConnection(){ this.object = { method:'', url:'', data:'', connect:function(a,b,d){ if(window.XMLHttpRequest){ server_http = new XMLHttpRequest(); }else{ server_http = new ActiveXObject('Microsoft.XMLHTTP'); } server_http.onprogress = function(event){ console.log(event); } server_http.onreadystatechange = function(e){ if(server_http.readyState == 4 && server_http.status == 200){ var res = server_http.responseText; return res; } } server_http.open(a,b,true); //server_http.setRequestHeader("Content-type","application/x-www- form-urlencoded"); server_http.send(d); } } } var conn = new serverConnection(),response_xmlhttp = new serverConnection(); function serverConn(c,method,URI,formdata){ //defining data configurations c.object['method'] = method; //defined key data for method c.object['url'] = URI; //defined key data for url c.object['data'] = formdata; //defined key data for data //store in global variables var method,url,data; method = c.object['method']; url = c.object['url']; data = c.object['data']; c.object.connect(method,url,data); } //submit_data using the class conn function dataSubmit(e){ e.preventDefault(); var formdata,method,URI,username,password; //define username and password username = document.getElementById('username').value; password = document.getElementById('password').value; if(username == '' && password == ''){ alert('fill in all the fields'); }else{ formdata = new FormData(this); formdata.append('submit_data','SIGNIN'); method = 'POST'; URI = 'admin/php_data/loginCredentials.php'; serverConn(conn,method,URI,formdata); } } )下方区域设置表单覆盖文本框(我使用Text3)下拉区域,使向下箭头可见。

另外,我为Combo0颜色设置了文本框属性,这样我就能明白地判断它是否正常工作。对于组合框 - 我也点击了Shape Outline - 到Arrange,因此它会隐藏在文本框后面。

每当更改ComboBox(通过单击其箭头)时,它还会设置textBox的值 - 如果需要,可以将其设置为超链接

<强> 1。将显示文本框,但组合框箭头可见

Text Box Default

<强> 2。已单击组合框箭头以显示下拉列表

Combo Box Arrow

第3。单击文本框将在Click事件或超链接

中生成代码

Clicked on text box

示例表单VBA

Send To Back

答案 1 :(得分:-1)

我进行了快速测试,这对我来说是预期的:

Private Sub Combo14_Click()

Select Case Combo14
    Case Is = "Form1"
        DoCmd.OpenForm "Form1"
    Case Is = "Form2"
        DoCmd.OpenForm "Form2"
    Case Is = "Form3"
        DoCmd.OpenForm "Form3"
    Case Is = "Form4"
        DoCmd.OpenForm "Form4"
End Select

End Sub

编辑:

然后在GotFocus事件字段中尝试此操作。

Private Sub Combo14_GotFocus()

Select Case Combo14
    Case Is = "Form1"
        DoCmd.OpenForm "Form1"
    Case Is = "Form2"
        DoCmd.OpenForm "Form2"
    Case Is = "Form3"
        DoCmd.OpenForm "Form3"
    Case Is = "Form4"
        DoCmd.OpenForm "Form4"
End Select

End Sub

注意:您需要将焦点移动到子节点末尾的其他内容。