制作屏幕键盘的更好解决方案



我正在尝试制作屏幕键盘(按钮A、按钮B

一切都很好,但如果我能创建30多个字符,我的代码将是巨大的。

有什么可能把它缩短的方法吗?当前3个按钮的代码。

// Method for each button
private void tastaturasIevade(TextBox varda_ievade, string burts)
{
    if (varda_ievade.TextLength == 0)
    {
        varda_ievade.Text = burts;
    }
    else
    {
        varda_ievade.Text = varda_ievade.Text + burts;
    }
}
// Writing buttons from on-screen keyboard
private void btn_A_Click(object sender, EventArgs e)
{
    tastaturasIevade(txt_VardaIevade, "a");
}
private void btn_B_Click(object sender, EventArgs e)
{
    tastaturasIevade(txt_VardaIevade, "b");
}
private void btn_C_Click(object sender, EventArgs e)
{
    tastaturasIevade(txt_VardaIevade, "c");
}

是的。您可以手动设置控件的"Tag"-属性,然后将相同的处理程序应用于所有单击事件,并相应地将"Tag"的内容添加到TextBox中。

TextBox.Text += (string)(((Button)sender).Tag);

为什么您甚至需要编写代码?作为一个更好、更符合逻辑的解决方案,您可以使用windows附带的屏幕键盘应用程序:

System.Diagnostics.Process.Start("osk.exe");

将设计器中每个按钮的tag属性设置为相应的文本。然后,在表单初始化事件下,为所有按钮添加一个事件处理程序。在tastaturasIevade方法中,使用按钮的tag属性。

使用键的.Text的简单示例。A.Tag="c"是一个字符。更复杂的标签可以用于逻辑流。btnQ是简单示例中唯一命名的按钮。Shift有一个专门的点击事件。

Sub ShiftCaseLower()
    For Each c As Control In FlowLayoutPanel1.Controls
        If c.Tag = "c" Then c.Text = c.Text.ToLower
    Next
End Sub
Sub ShiftCaseUpper()
    For Each c As Control In FlowLayoutPanel1.Controls
        If c.Tag = "c" Then c.Text = c.Text.ToUpper
    Next
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button7.Click, Button6.Click, Button5.Click, Button4.Click, Button3.Click, btnQ.Click
    ' all "key" click events handled here
    TextBox1.AppendText(sender.text)
End Sub
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
    ' Shift key
    If Asc(btnQ.Text) = Asc("Q") Then
        ShiftCaseLower()
    Else
        ShiftCaseUpper()
    End If
End Sub

最新更新