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

我正在尝试制作屏幕键盘(按钮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"); } 

为什么你甚至需要编写代码? 作为更好,更合理的解决方案,您可以使用Windows附带的屏幕键盘应用程序来实现此目的:

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

就在这里。 您可以手动设置控件的“标签” – 属性,然后将相同的处理程序应用于所有Click事件,并相应地将“标签”的内容添加到TextBox。

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

将设计器中每个按钮的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