我在Winforms应用程序中发生了一个奇怪的错误,它带有一个多行文本框。当我更改文本框的文本时,我得到额外的换行符。该换行的定位各不相同。例如,如果我这样做:
someTextBox.Clear()
someTextBox.Text = someOtherObject.SomeTextProperty
然后我在文本末尾得到额外的换行符。但是,如果我没有先调用clear,对SomeTextProperty使用相同的值,我会在开头获得换行符。但是,如果我只使用像“TEST”这样的测试字符串,我会在文本的开头得到换行符,无论我是否先调用Clear()。如果我使用AppendText(),我会在所有情况下都在最后插入换行符。
任何人都可以解释这些无关的换行/回车来自哪里,以及为什么他们的定位有时会改变?
答案 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的评论中指出的那样,回车很可能是在事件处理完毕后插入的,并且文本框中的文本已经更新。