【问题标题】:How to prevent the enter key from making a new line in a multiple line text box?如何防止回车键在多行文本框中换行?
【发布时间】:2014-05-17 15:12:35
【问题描述】:

我想防止 Enter 键使用 KeyDown 事件在多行文本框中创建新行。尽管使用 textBox.Text = "" 或 textBox.Clear() 清除了文本框,但它的行为如下:http://i.imgur.com/3sknAbO.png

private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
        {
            listBox1.Items.Add(textBox2.Text);
            textBox2.Text = "";
        }
}

【问题讨论】:

  • 您确定要阻止 Enter 键吗?如果用户粘贴一些包含换行符的文本怎么办?
  • 我同意 CodeCaster,如果您只想取一行,则使用一行 textbox,否则添加另一个按钮供该人按下以提交 textbox
  • 我加入了以前的评论员,但如果你真的需要这样做,那么你使用KeyUp 处理程序并在擦除文本后添加e.Handled = true;
  • 要处理粘贴的文本,请使用TextBox.TextChanged 事件并删除换行符。

标签: c# textbox


【解决方案1】:

那么,基本上你想将一个文本框定义为多行并且只接受其中的一个长行?

似乎您只需要一个单行文本框。将您的文本框定义为单行并在设计时将其设置为 看起来 像多行文本框。

另一种选择是将框保持原样并允许用户在其中输入换行符。然后,当您需要数据时,只需删除所有换行符事后

【讨论】:

    【解决方案2】:

    我做了一些试验,似乎在 KeyUp 事件中添加了 Enter 键的新行。所以这应该有效(注意我使用KeyUp而不是KeyDown):

    private void textBox2_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            listBox1.Items.Add(textBox2.Text);
            textBox2.Text = "";
            e.Handled = true;
        }
    }
    

    或者你可以设置光标位置

    textBox2.Select(0, 0);
    

    而不是使用e.Handled = true;这一行

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多