Вы можете попробовать использовать класс Joiner вместо удаления последнего символа из вашего сгенерированного текста;
List<String> textList = new ArrayList<>();
textList.add("text1");
textList.add("text2");
textList.add("text3");
Joiner joiner = Joiner.on(",").useForNull("null");
String output = joiner.join(textList);
//output : "text1,text2,text3"
Не назначайте свойства формы AcceptButton и CancelButton. Установите DialogResult в событии OnClick кнопок.
вместо кнопок «Принять» и «Отменить» вы можете использовать следующий подход:
Обработайте ] KeyDown формы, в методе обработчика вы можете иметь что-то похожее на приведенный ниже переключатель кода
(e.KeyCode)
{
case Keys.Enter:
{
если (! txtAuto.Focused)
{
Сохранить();
}
перерыв;
}
case Keys.Escape:
{
если (! txtAuto.Focused)
{
Близко();
}
перерыв;
}
}
Простой способ - удалить свойства AcceptButton и CancelButton , пока вы находитесь в текстовом поле автозаполнения:
public Form1()
{
InitializeComponent();
txtAuto.Enter +=txtAuto_Enter;
txtAuto.Leave +=txtAuto_Leave;
}
private void txtAC_Enter(object sender, EventArgs e)
{
AcceptButton = null;
CancelButton = null;
}
private void txtAC_Leave(object sender, EventArgs e)
{
AcceptButton = btnOk;
CancelButton = btnCancel;
}
Другой вариант - создать свой собственный класс TextBox, который выполняет проверку при нажатии Enture / Return:
public class MyTextBox : TextBox
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter || keyData == Keys.Return)
{
// Perform validation here
return true;
}
else
return false;
}
}