2

我刚刚开发了一个自定义控件(下图)

在此处输入图像描述

它是一个“迷你屏幕键盘”=)现在我放置了一个简单的文本框,并用 sendkeys 代码填充了键盘的所有按钮

    Private Sub BTN4_Click(sender As Object, e As EventArgs) Handles BTN4.Click
         SendKeys.Send("4")
    End Sub

问题是,如果我单击其中一个按钮,则不会写入文本框,这是因为按钮在发送字符之前获得了焦点!

我google了很多没有任何结果,所以我开始梳理MSDN寻找有用的东西,我发现了这个

Me.SetStyle(ControlStyles.Selectable, False)

还是不行。你能以任何方式帮助我吗?我正在做一个应该交付简短的项目,我很生气,因为我无法解决这样一个白痴的问题!

感谢一切

4

2 回答 2

1

为什么不创建一个带有事件的键盘控件并使用 WithEvents 键声明它?然后在键盘控件中声明以下事件:

Public Class CustomKeyboardControl

    Inherits Control

    Public Event KeyboardButtonPressed(ByVal KeyValue As String)

    ' ...

    ' And on click event for each of your buttons :
    Private Sub BTN4_Click(sender As Object, e As EventArgs) Handles BTN4.Click
         RaiseEvent KeyboardButtonPressed("4")
    End Sub

End Class

最后,在使用此自定义键盘控件的应用程序中,只需添加一个处理程序。

Public Class MyForm
    Private WithEvents MyKeyboard As New CustomKeyboardControl()
    ' Should be declared in your Designer...
    ' Just add the "WithEvents" if that declaration...

    Private Sub HandleKeyboardInputs(ByVal KeyValue As String) Handles MyKeyboard.KeyboardButtonPressed
        MyTextBox.Text = MyTextBox.Text + KeyValue
        ' Of course, you can use SelectionStart/SelectionLength (...)
        ' to replace or insert the input at the correct place
        ' without forgetting to update the values of SelectionStart and SelectionLength...
    End Sub

    ' ...

End Class

这种方法让您可以在许多不同的情况下使用您的键盘控制...

希望这可以帮助。我可以看到您实际上正在使用类似 Android 的布局...在这种情况下,我认为我的想法不会更好...

于 2013-06-13T22:24:08.813 回答
1

在您的 Sub, beforeSendKeys.Send("4")中,插入以下行:

Me.TextBox1.Focus()
Me.TextBox1.SelectionStart = TextBox1.Text.Length

TextBox1您的文本框的名称在哪里。

资源

于 2013-06-13T17:25:33.853 回答