【问题标题】:Set specific line of multiline TextBox in c#在c#中设置多行文本框的特定行
【发布时间】:2017-10-15 10:56:24
【问题描述】:

您好,我是 C Sharp 和 Windows 窗体的新手。我无法设置多行文本框的特定字符串。到目前为止,我已经尝试过以下事情。

textBox1.Lines[1] = "welcome to stackOverflow";

上面的代码没有给出编译时错误,但是当我使用 Debug 模式看到结果时,它不是预期的。

然后我也在阅读这篇MSDN 文章,但在这篇文章中,有一个使用stream[] 构造函数创建的新集合,但仍然出现同样的问题。

【问题讨论】:

    标签: c# winforms textbox multiline


    【解决方案1】:

    它应该给出编译器错误,因为您试图在此处将 string 分配给 char

    textBox1.Text[1] = "welcome to stackOverflow";
    

    Text 属性的类型为string,当您在string 上使用索引器时,它会在该位置为您提供char。而且字符串是不可变的,所以你不能在不创建新字符串的情况下真正改变特定位置的字符。

    你应该像这样直接设置Text

    textBox1.Text = "welcome to stackOverflow";
    

    或者如果你在一个字符串数组中有不止一行,你应该设置 Lines 属性:

    var lines = new [] { "foo", "bar" };
    textBox1.Lines = lines;
    

    【讨论】:

    • 谢谢。但是在我的应用程序中,我必须根据用户选项替换多行文本框。所以在这种情况下,我必须每次都创建新的 string[] 实例。还有其他方法吗?跨度>
    • OP 似乎尝试使用textBox1.Lines[1](msdn 链接确认),这样可以编译。问题是Lines 只是返回 new 数组(由Text 制成),更改该数组的项不会影响控制。必须始终设置新文本(使用任一属性)来控制。
    • @Agyaat 创建一个字段string[] 来存储行。更改数组,将 Lines 设置为该数组。如果您需要更改行数,请重新创建数组。如果您需要更新特定行,只需设置lines[0] = "foo"。是的,当你想添加或删除行时,你需要重新创建数组,因为数组是固定大小的。
    • @SelmanGenç 我没有收到编译时错误。您能按照评论中的描述用新答案修改您以前的答案吗?谢谢
    【解决方案2】:

    您直接设置到 textBox1.Lines 的任何值都将影响到 textBox1。

    有一个解决方案可以解决您的问题。我认为这是最好的方式。 您必须克隆文本框的当前值。然后你为它设置新的价值。最后,您设置回文本框。

    var curValue = (string[])textBox1.Lines.Clone();
    curValue[1] = "welcome to stackOverflow";
    
    //Set back to textBox1
    textBox1.Lines = curValue;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      相关资源
      最近更新 更多