Автозаполнение в приложении Windows - PullRequest
0 голосов
/ 14 мая 2018

Как я могу выбрать значение в текстовом поле символ за символом Как текстовое поле автозаполнения HDPOS

Я пытался Загрузка страницы

private void loadproductName()
{
    DataTable dt = _poshelper.getproductName("Bill_Select_ProductName");
    if (dt.Rows.Count != 0)
    {
        string[] postSource = dt
                .AsEnumerable()
                .Select<System.Data.DataRow, String>(x => x.Field<String>("UniqueName"))
                .ToArray();

        var source = new AutoCompleteStringCollection();
        source.AddRange(postSource);
        txtItemName.AutoCompleteCustomSource = source;
    }     
}

В отпуске

private void txtItemName_Leave(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(txtItemName.Text))
    {
        DataSet ds1 = _poshelper.getproductNameExistWhileLeave(txtItemName.Text);
        if (ds1.Tables[0].Rows.Count == 0)
        {
            txtItemName.Text = "";
            txtItemName.Focus();
        }
        else
        {
            loadLeave(ds1);
            txtItemName.Focus();
        }
    }
}

Мне нужно

Если я удаляю символ, используя клавишу Backspace, он удаляет навсегда

a

Мне нужно 2-е изображение, если я удаляю, значит, мне нужно, чтобы оно оставалось в текстовом поле

b

Обновление

больше разъяснений, из комментариев

Строка в текстовом поле не должна быть удалена, если я нажму клавишу пробела.Вместо этого следует выбрать каждый символ. Каждый раз, когда я нажимаю клавишу Backspace

1 Ответ

0 голосов
/ 18 мая 2018

Здесь я предлагаю внести изменения, чтобы ваше текстовое поле несло следующее поведение.

Когда вы не хотите, чтобы текст «добавленное предложение» (как показано на первом изображении) пропалкогда вы набираете backspace в текстовом поле,

вы можете сделать это в следующих шагах

  • Получить текст текущего текстового поля (убрал последний символ, так как мы отступили назад)
  • Очистить текст
  • Отправить текст, взятый обратно в текстовое поле

сделать следующие изменения в вашем коде

private void loadproductName()
{
  DataTable dt = _poshelper.getproductName("Bill_Select_ProductName");
  if (dt.Rows.Count != 0)
  {
    string[] postSource = dt
            .AsEnumerable()
            .Select<System.Data.DataRow, String>(x => x.Field<String>("UniqueName"))
            .ToArray();

    var source = new AutoCompleteStringCollection();
    source.AddRange(postSource);
    txtItemName.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
    txtItemName.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
    txtItemName.AutoCompleteCustomSource = source;
  }
}

Я не уверен, что вы делаете вLeave Событие.Но вы можете добавить textBox KeyUp событие и добавить код, как показано ниже в этом событии.

private void txtItemName_KeyUp(object sender, KeyEventArgs e)
{
    // track for backspace
    if (e.KeyCode == Keys.Back)
    {
        if (txtItemName.Text != "")
        {
            string text = txtItemName.Text.Substring(0, txtItemName.Text.Count() - 1);
            txtItemName.Text = "";
            txtItemName.Focus();
            SendKeys.Send(text);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...