首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能从RichTextBox的引用创建RichTextBox

为什么不能从RichTextBox的引用创建RichTextBox
EN

Stack Overflow用户
提问于 2013-03-04 20:12:12
回答 2查看 372关注 0票数 1

我把RichTextBox控件搞糊涂了。

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

因此,假设在我的Form上有一个名为rtbResultRichTextBox,我会认为我可以执行以下操作:

代码语言:javascript
复制
    RichTextBox rtb = new RichTextBox();
    rtb.Text =  "Hello all";
    rtb.Width = 50;
    rtbResult = rtb;

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

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

你知道我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-04 20:16:32

您所做的与此并无太大不同:

代码语言:javascript
复制
RichTextBox r1 = new RichTextBox();
r1.Text =  "I am RTB #1";
Controls.Add(r1);

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

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

代码语言:javascript
复制
r1 = r2;

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

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

代码语言:javascript
复制
r2.Bounds = r1.Bounds;
Controls.Remove(r1);
Controls.Add(r2);

这是非常幼稚的,许多属性可能需要从旧的属性复制到新的属性(DockTabIndex等等),而且顺序也很重要,所以你可能需要调用Controls.SetChildIndex()进行正确的定位(这取决于你真正需要做什么以及你的代码是如何做的)。

票数 4
EN

Stack Overflow用户

发布于 2013-03-04 20:16:39

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

您必须将新控件添加到窗体中才能使其可见,例如:

代码语言:javascript
复制
somePanel.Controls.Add(rtb);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15201309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档