1

我对RichTextBox控制感到困惑。

我有一个宽度为 100px的RichTextBox控件。WinForm我想动态创建一个,然后引用该实例。

所以,假设Form我有一个RichTextBox电话rtbResult,我会认为我可以做到以下几点:

    RichTextBox rtb = new RichTextBox();
    rtb.Text =  "Hello all";
    rtb.Width = 50;
    rtbResult = rtb;

当代码执行时,RichTextBox我的页面上的结果是一个空白,原始大小为 100 像素(例如,宽度不是 50)。

请注意,在现场我使用文本突出显示,因此它必须是 a RichTextBox,上面的示例被剥离以使问题更简洁。

任何想法我做错了什么?

4

2 回答 2

4

您所做的与此没有太大不同:

RichTextBox r1 = new RichTextBox();
r1.Text =  "I am RTB #1";
Controls.Add(r1);

RichTextBox r2 = new RichTextBox();
r2.Text =  "I am RTB #2";

现在在您的页面上,您已RichTextBox命名为r1. 如果你这样做:

r1 = r2;

您不需要用新的控件替换表单中的控件RichTextBox,您只需将相同的引用分配给变量r1。在您的表单中,您仍然拥有控件,但两个变量 (r1r2) 都指向同一个对象。

如果您不能简单地RichTextBox使用新值更新原始值,您可以做的是删除旧值并将新值添加到相同位置:

r2.Bounds = r1.Bounds;
Controls.Remove(r1);
Controls.Add(r2);

这很幼稚,可能需要将许多属性从旧属性复制到新属性(等等),而且顺序也很重要,因此您可能需要调用Dock正确的定位(这取决于您真正拥有的做什么以及您的代码如何)。TabIndexControls.SetChildIndex()

于 2013-03-04T12:16:31.607 回答
2

rtbResult只是一个包含对控件的引用的变量,而不是控件本身。通过将新控件放入该变量中,您只是更改了变量,原始控件仍在表单中,并且新控件不属于任何表单,因此它在任何地方都不可见。

您必须将新控件添加到表单以使其可见,例如:

somePanel.Controls.Add(rtb);
于 2013-03-04T12:16:38.550 回答