为什么可以';t我从RichTextBox的引用创建了一个RichTextBox

本文关键字:RichTextBox 创建 一个 引用 为什么 我从 | 更新日期: 2023-09-27 18:02:11

我对RichTextBox控件感到困惑。

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

因此,假设在我的Form上有一个名为rtbResultRichTextBox,我会认为我可以做以下事情:

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

当代码执行时,结果是页面上的空RichTextBox,原始大小为100px(例如,不是宽度50(。

请注意,在live中,我使用的是文本高亮显示,因此它必须是RichTextBox,上面的例子被删除以使问题更加简洁。

你知道我做错了什么吗?

为什么可以';t我从RichTextBox的引用创建了一个RichTextBox

您所做的与此没有太大区别:

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

现在,在您的页面上有一个名为r1RichTextBox。如果你这样做:

r1 = r2;

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

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

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

这太天真了,许多属性可能需要从旧属性复制到新属性(DockTabIndex等(,而且顺序也很重要,因此您可能需要调用Controls.SetChildIndex()来进行正确定位(这取决于您真正需要做什么以及代码的方式(。

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

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

somePanel.Controls.Add(rtb);