我一直在努力尝试修改组合框,将当前所选项目视为另一种形式的链接。
基本工作流程很简单;当没有从列表中选择新项目时,我希望组合框中的文本像链接一样运行。此链接将打开一个新表单,并找到相关记录。即。单击客户名称以打开客户表单并显示其信息。
问题是组合框特有的;相同的功能适用于文本框。将代码放入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(因为下拉列表不再打开)
我尝试将静态变量设置为仅在未选择新项目时跟随链接。这是非常不一致的,因为没有好办法弄清楚组合框的状态。
将文字转换为可点击的链接不应该这么难。如何在组合框中将当前选中的项目作为链接,而不是同时将组合框中的所有其他项目作为链接?我错过了什么事件吗?
答案 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。将显示文本框,但组合框箭头可见
<强> 2。已单击组合框箭头以显示下拉列表
第3。单击文本框将在Click事件或超链接
中生成代码示例表单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
注意:您需要将焦点移动到子节点末尾的其他内容。