如何模拟控件(按钮)用左键或右键单击避免列表框的自动交互

How simulate control (button) click with left or right key avoiding automatic interactions at listbox

我有 3 个列表框,其中 1 个列出文件夹,1 个列出子文件夹,第三个列出当前子文件夹中的图片文件。 1 Picturebox 加载第三个列表框的所选项目(图片)。 我有 2 个按钮来更改上一张图像或下一张图像调用此函数(这会使图像列表循环以使其无止境):

Private Sub ShowNextImage()

    If ListBox5.SelectedIndex = ListBox5.Items.Count - 1 Then
        ListBox5.SelectedIndex = 0
    Else
        ListBox5.SelectedIndex += 1
    End If
    Me.PictureBox1.Image = Image.FromFile(lastfoldr & (ListBox5.SelectedItem))
End Sub

右转按钮就是这个:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ShowNextImage()
End Sub

然后我添加了更改图片框大小的功能,并在您单击图片框时获得全屏。

我还添加了 picturebox_keydown 事件来检测键盘上的左键或右键。 作为全屏,最好的办法是直接从键盘更改照片并隐藏或发送按钮,为了让它工作,首先我尝试 直接调用 previos/next 图片函数,但它不起作用!:

Private Sub PictureBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles PictureBox1.KeyDown
 ShowNextImage()
 End If

问题按左右键出现:选中的文件夹或子文件夹变为下一项,第三个ListBox更新图像列表,一切都得到松动的!! 第二次尝试 我使用:

Private Sub PictureBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles PictureBox1.KeyDown
 If e.KeyCode = Keys.Right Then
 ActiveControl = Nothing 'also I try this!
 Button1.PerformClick()  '< simulate the click of the button
 End If

但同样如此!当前选定的文件夹发生变化,列表变得松散。 在表单上实际单击按钮可以正确更改图像,而不是使用我无法触及的键来使其工作!我做错了什么?我调用(模拟)按钮点击错误??

为了接收按键,PictureBox 必须有焦点,这种控件很少有焦点,因为你不能真正 select 它们。

执行此操作的最佳方法是覆盖表单的 ProcessCmdKey() function 并使用它来防止左右键按下到达任何子控件。这样做会阻止列表框的 selection 发生变化。

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
    If keyData = Keys.Left Then
        ShowPrevImage()
        Return True 'This prevents the key press from reaching any child controls.
    ElseIf keyData = Keys.Right Then
        ShowNextImage()
        Return True
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function