【问题标题】:Better solution for making on-screen keyboard制作屏幕键盘的更好解决方案
【发布时间】:2017-11-10 07:22:55
【问题描述】:

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

【问题讨论】:

    标签: c# winforms on-screen-keyboard


    【解决方案1】:

    是的,有。您可以手动设置控件的“标签”属性,然后将相同的处理程序应用于所有点击事件,并将“标签”的内容相应地添加到文本框。

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

    【讨论】:

    • 您也可以使用 .Text ,因为它是您“输入”的字符。我会使用 .Tag 作为标志来允许或不允许大写,然后使用 .ToUpper 或 .ToLower 遍历所有内容以处理 Shift。您也可以将所有“键”绑定到同一个点击事件,并使用 Sender.Text 作为值。
    • 我喜欢这个想法,但我怀疑它是否真的有效,因为某些键需要存储多达 3 个不同的字符,这使得这种方法更加困难。将所有字符存储在 Tag-Property 中,然后在 .Tag-Property 中附加第一个、第二个或第三个字符会更容易,根据哪个修饰键是活动的。
    【解决方案2】:

    为什么您甚至需要编写代码?作为更好、更合乎逻辑的解决方案,您可以为此目的使用on-screen keyboard application that comes with windows

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用 .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
      

      【讨论】:

      • 对不起,这是VB,我不会说C#。
      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2011-11-21
      • 1970-01-01
      相关资源
      最近更新 更多