为什么我在多行文本框中收到无关的回车符?

时间:2015-07-13 14:18:54

标签: .net vb.net winforms

我在Winforms应用程序中发生了一个奇怪的错误,它带有一个多行文本框。当我更改文本框的文本时,我得到额外的换行符。该换行的定位各不相同。例如,如果我这样做:

someTextBox.Clear()
someTextBox.Text = someOtherObject.SomeTextProperty

然后我在文本末尾得到额外的换行符。但是,如果我没有先调用clear,对SomeTextProperty使用相同的值,我会在开头获得换行符。但是,如果我只使用像“TEST”这样的测试字符串,我会在文本的开头得到换行符,无论我是否先调用Clear()。如果我使用AppendText(),我会在所有情况下都在最后插入换行符。

任何人都可以解释这些无关的换行/回车来自哪里,以及为什么他们的定位有时会改变?

2 个答案:

答案 0 :(得分:2)

使用.Lines()属性而不是.Text。 (参见文档here。)

您不需要使用.Clear;相反,只需确保您传递的数组不包含任何不需要的空字符串,因为这些字符串将转换为空行。

一些示例代码:

'Set lines
Dim myLines As String() = {"Hello.", _
                         "My name is Inigo Montoya.", _
                         "", _
                         "You killed my father.", _
                         "Prepare to die."}
someTextBox.Lines = myLines

'Get lines
MsgBox(Join(someTextBox.Lines, vbCrLf))

我已成功测试了上述内容。如果您仍然遇到问题,请将设置值的代码(使用someOtherObject.SomeTextProperty)或您读取值的位置发布,因为可能存在问题。

答案 1 :(得分:1)

我找到了答案on another SO question。这可能是我没有完全解释情况的错。但是我在TextBox中按Enter键时触发了一个事件,并将Textbox的AcceptsReturn属性设置为false。我期待事件在没有回车的情况下触发,因此我在回车时感到困惑。但根据MSDN,如果表单没有默认的OK按钮,除非在事件处理程序中设置e.SuppressKeyPress,否则仍会得到回车符。这样做可以防止出现额外的回车。但是,在设置textbox.Lines = New String() { "TEST" }之后,我仍然仍然感到困惑,回车仍然存在。这对我来说似乎是个错误。

编辑:正如Josh的评论中指出的那样,回车很可能是在事件处理完毕后插入的,并且文本框中的文本已经更新。