制作屏幕键盘的更好解决方案
Better solution for making on-screen keyboard
我正在尝试制作屏幕键盘(按钮 A、按钮 B 等)。
当您按下按钮时,它会向 TextBox
添加字符。
一切正常,但如果我要创建 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
属性 设置为相应的文本。然后,在您的表单初始化事件下,为所有按钮添加一个事件处理程序。在 tastaturasIevade
方法中使用按钮的 tag
属性。
是的,有。您可以手动设置控件的 "Tag"-属性,然后将相同的处理程序应用于所有 Click-Events,并将 "Tag" 的内容相应地添加到文本框。
TextBox.Text += (string)(((Button)sender).Tag);
为什么还要写代码?作为更好、更合乎逻辑的解决方案,您可以为此目的使用 on-screen keyboard application that comes with windows:
System.Diagnostics.Process.Start("osk.exe");
使用键的 .Text 的简单示例。 .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
我正在尝试制作屏幕键盘(按钮 A、按钮 B 等)。
当您按下按钮时,它会向 TextBox
添加字符。
一切正常,但如果我要创建 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
属性 设置为相应的文本。然后,在您的表单初始化事件下,为所有按钮添加一个事件处理程序。在 tastaturasIevade
方法中使用按钮的 tag
属性。
是的,有。您可以手动设置控件的 "Tag"-属性,然后将相同的处理程序应用于所有 Click-Events,并将 "Tag" 的内容相应地添加到文本框。
TextBox.Text += (string)(((Button)sender).Tag);
为什么还要写代码?作为更好、更合乎逻辑的解决方案,您可以为此目的使用 on-screen keyboard application that comes with windows:
System.Diagnostics.Process.Start("osk.exe");
使用键的 .Text 的简单示例。 .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