以下代码适用于 Ctrl + D , F2 和 F7 ,但不起作用 Ctrl + A 。谁知道问题可能是什么?
Private Sub AgentSetupForm_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Select Case e.KeyCode
' Ctrl + A
Case Keys.A And (e.Control And Not e.Shift And Not e.Alt)
Dim f As New InvestorAccountsForm
f.MdiParent = TraderoomMDI
f.Show()
' Ctrl + D
Case Keys.D And (e.Control And Not e.Shift And Not e.Alt)
Dim f As New InvestorAddressForm
f.MdiParent = TraderoomMDI
f.Show()
' F2, F7
Case Keys.F2 'And (e.Shift And Not e.Control And Not e.Alt)
Me.Text = "F2 Test"
Case Keys.F7
stlFormMode.Text = "Edit"
End Select
End Sub
答案 0 :(得分:1)
接受的答案完全错误。
VB.NET不是C#。因此,如果在c = 1
"this causes no error or notification to the developer"
b = 2
s(双方)的上下文中使用And
,VB.NET会自动切换到逻辑Boolean
而不是按位And
。所以这根本不是问题。我只是运行OP代码并且运行正常 - Ctrl + A组合被成功捕获。此外,如果组合键意味着OS(或其他组件)的某些内容,那么它并不意味着它不会被我们的应用程序捕获。
And
和And
之间的区别在于第一个从左到右一直评估布尔表达式,即使某些表达式的计算结果为AndAlso
。后者评估表达式UNTIL到达False
或结束 - 即短路。
为了提高代码的可读性,您可以在False
语句中测试特定键。然后在特定情况下插入Case
块以检查控制键的条件:
If
或者,您可以将Select Case e.KeyCode
Case Keys.A
If e.Control AndAlso Not (e.Shift OrElse e.Alt)
Dim f As New InvestorAccountsForm
f.MdiParent = TraderoomMDI
f.Show()
End If
'
'
End Select
块分解为包含有关条件If
的所有案例的Select Case
。
很遗憾,我无法回答您的问题,因为您的问题似乎无法(轻松)转载。根据评论,与代码中的e.Control AndAlso ...
语句相比,它更可能是硬件或驱动程序相关的问题。
答案 1 :(得分:0)
修改强>
由于您似乎遇到了 CTRL + A 组合的问题,您可以尝试覆盖ProcessCmdKey
并查看是否有效。应该在.NET环境处理和/或转换密钥之前调用该方法。
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
If keyData = (Keys.Control Or Keys.A) Then
...your code here...
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
如果其他组合有效,您可以将其保留在KeyDown
事件中。
编辑2:
@BozhidarStoinev说的是正确的;我错了,说你现在正在使用按位和。
由于在VB.NET中如何转换布尔值,显然它在And
- 语句中使用AndAlso
或Select Case
。在这种情况下,只要第一个运算符只是And
,您就可以了。我们使用了下面的AndAlso
因为它们执行短路,因为AndAlso
只评估左侧是True
,所以Keys.A And (e.Control AndAlso Not e.Shift AndAlso Not e.Alt)
仅评估右侧。
以下内容:
(65 And True) = (65 And -1) = 65 'I added parentheses for improved readability
转换为:
(65 And False) = (65 And 0) = 0
或:
<anything> And False
不能确定多语句案例每次都会有效。它可能适用于键,但如果您在另一个Case
中检查0,则<div class="search">
<div class="row">
<div class="large-6 medium-6 small-12 columns">
<div class="postcode-wrapper">
<form class="lookup-form">
<input type="text" class="postcode" placeholder="Location" >
<input type="submit" class="go-btn" value="Search"/>
<a href="#" class="fancybox go" style="position:absolute; left:-99999px" data-fancybox-type="iframe">Search</a>
<div class="form-error"></div>
</form>
<script>
jQuery('form').submit(function (evt) {
evt.preventDefault();
var error = false;
var error_list = [];
var $postcode = jQuery('.postcode').val();
if($postcode == ''){
error = true;
error_list.push('Location is required');
}
console.log(error);
if(error === true){
jQuery('.form-error').show();
jQuery('.search-results').hide();
jQuery('.form-error').html('');
for(i=0;i<error_list.length;i++){
jQuery('.form-error').append(error_list[i]+'<br/>');
}
}else if(error === false) {
jQuery('.form-error').hide();
jQuery('.postcode-wrapper .go').click(function(){
jQuery(".search-results").slideDown("slow");
});
var location = encodeURIComponent(jQuery('.postcode-wrapper .postcode').val());
console.log(location);
jQuery('.postcode-wrapper .go').click();
}
return false;
});
</script>
</div>
</div>
</div>
</div>
<div class="search-results">
<div class="map">
<iframe src="http://google.com/maps&location=OUTPUTHERE" width="100%" height="400" frameborder="0"></iframe>
</div>
</div>
等于零时可能会出现意外结果。