文本框自动完成 - 从屏幕上的自定义键盘输入

时间:2018-02-16 16:48:32

标签: c# autocomplete textbox

我正在尝试使用自动填充功能。输入文本来自定制的键盘,由表单制成。 我尝试使用简单的文本框中的自动完成功能和键盘上的文本输入,并且工作正常。但是当我从自定义键盘输入文本时,它不起作用。自定义键盘添加来自键侦听器Key_Click的输入。 我尝试添加一个额外的'a'并将文本添加为​​txtInput.Text += 'o';,但它不起作用。

有什么想法吗?

Customkeyboard

键盘代码:

public partial class frmTextInput : Form
{
    public string input_Text { get; set; }

    public frmTextInput(string TEXT,bool CTRL)
    {

        InitializeComponent();
        AlternarTeclas(chkShift.Checked);
        AgregarListenerTeclas();
        var source = new AutoCompleteStringCollection();
        List<string> box = Data.Data.SourcePatente();
        foreach (var item in box)
        {
            source.Add(item);
        }
        txtInput.AutoCompleteCustomSource = source;
        txtInput.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        txtInput.AutoCompleteSource = AutoCompleteSource.CustomSource;
    }


    private void btnSpace_Click(object sender, EventArgs e)
    {
        txtInput.Text = txtInput.Text + " ";
    }

    private void btnBorrar_Click(object sender, EventArgs e)
    {
        string str = txtInput.Text;
        if (!string.IsNullOrEmpty(str))
        {
            txtInput.Text = str.TrimEnd(str[str.Length - 1]);
        }
    }

    private void btnVolver_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void btnEnter_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
        input_Text = txtInput.Text;
    }

    private void frmTextInput_Load(object sender, EventArgs e)
    {

    }


    private void chkShift_CheckedChanged(object sender, EventArgs e)
    {
        AlternarTeclas(chkShift.Checked);
    }

    private void Key_Click(object sender, EventArgs e)
    {
        string key = sender.ToString();

        if (chkShift.Checked)
        {
            key = key.ToUpper();
        }
        else
        {
            key = key.ToLower();
        }

        txtInput.Text = txtInput.Text + key.Substring(key.Length - 1);
    }

    private void AgregarListenerTeclas()
    {
        foreach (Control c in tabCaracteres.Controls)
        {
            if (c.GetType() == typeof(Button))
            {
                if (c.Text.Length == 1 && c.Text != "←")
                {
                    c.Click += Key_Click;
                }
            }
        }

        foreach (Control c in tabSymbol.Controls)
        {
            if (c.GetType() == typeof(Button))
            {
                if (c.Text.Length == 1 && c.Text != "←")
                {
                    c.Click += Key_Click;
                }
            }
        }
    }

    private void AlternarTeclas(bool estaShiftApretado)
    {
        if (estaShiftApretado)
        {
            foreach (Control c in tabCaracteres.Controls)
            {
                if (c.GetType() == typeof(Button))
                {
                    if (c.Text.Length < 2)
                    {
                        c.Text = c.Text.ToUpper();
                    }
                }
            }
        }
        else
        {
            foreach (Control c in tabCaracteres.Controls)
            {
                if (c.GetType() == typeof(Button))
                {
                    if (c.Text.Length < 2)
                    {
                        c.Text = c.Text.ToLower();
                    }
                }
            }
        }
    }


    private void btnSymbol_Click(object sender, EventArgs e)
    {
        tabTeclado.SelectTab(tabTeclado.SelectedIndex + 1);
    }

    private void btnTecAlfanumerico_Click(object sender, EventArgs e)
    {
        tabTeclado.SelectTab(tabTeclado.SelectedIndex - 1);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        txtInput.Text += 'o';
    }

}

2 个答案:

答案 0 :(得分:0)

txtInput.AutoCompleteCustomSource = source;
txtInput.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
txtInput.AutoCompleteSource = AutoCompleteSource.CustomSource;

这应该放在文本框的设计器文件中,而不是这里。试试看,使用自定义键盘时,您是否可以看到文本框文本值发生变化?我的理解是您捕获自定义键盘的点击事件并更改txtInput.Text

答案 1 :(得分:0)

我做到了。首先,它没有使用textbox multiline。 然后,输入新字符的正确方法是模拟键盘: 我正在使用功能&#34; Key_Click&#34;:

== txtInput.Text = txtInput.Text + key.Substring(key.Length - 1); ==&GT;我不工作

相反,我使用了:

== txtInput.Focus(); //重要

SendKeys.Send(key.Substring(key.Length - 1));