Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';t我从RichTextBox的引用创建RichTextBox_C#_.net_Richtextbox - Fatal编程技术网

C# 为什么可以';t我从RichTextBox的引用创建RichTextBox

C# 为什么可以';t我从RichTextBox的引用创建RichTextBox,c#,.net,richtextbox,C#,.net,Richtextbox,我对RichTextBox控件感到困惑 我有一个宽度为100px的RichTextBox控件来控制我的WinForm。我想动态创建一个实例,然后引用该实例 因此,假设在我的表单上有一个名为rtbResult的RichTextBox,我会认为我可以做到以下几点: RichTextBox rtb = new RichTextBox(); rtb.Text = "Hello all"; rtb.Width = 50; rtbResult = rtb; 当代码执行时,

我对
RichTextBox
控件感到困惑

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

因此,假设在我的
表单上
有一个名为
rtbResult
RichTextBox
,我会认为我可以做到以下几点:

    RichTextBox rtb = new RichTextBox();
    rtb.Text =  "Hello all";
    rtb.Width = 50;
    rtbResult = rtb;
当代码执行时,结果是我页面上的一个空
RichTextBox
,原始大小为100px(例如,不是宽度为50)

请注意,在live中,我使用的是文本突出显示,因此它必须是
RichTextBox
,为了使问题更简洁,上面的示例被删除


你知道我做错了什么吗?

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

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

RichTextBox r2 = new RichTextBox();
r2.Text =  "I am RTB #2";
现在在您的页面上有名为
r1
RichTextBox
。如果您这样做:

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

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

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

这很幼稚,许多属性可能需要从旧属性复制到新属性(
Dock
TabIndex
等等),而且顺序也很重要,因此您可能需要调用
Controls.SetChildIndex()
进行正确定位(这取决于您真正需要做的事情和代码的方式).

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

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

RichTextBox r2 = new RichTextBox();
r2.Text =  "I am RTB #2";
现在在您的页面上有名为
r1
RichTextBox
。如果您这样做:

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

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

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

这很幼稚,许多属性可能需要从旧属性复制到新属性(
Dock
TabIndex
等等),而且顺序也很重要,因此您可能需要调用
Controls.SetChildIndex()
进行正确定位(这取决于您真正需要做的事情和代码的方式)。通过将新控件放入该变量中,您只需更改该变量,原始控件仍在表单中,并且新控件不属于任何表单,因此它在任何地方都不可见

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

somePanel.Controls.Add(rtb);

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

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

somePanel.Controls.Add(rtb);

谢谢你,阿德里亚诺。太好了,谢谢你,阿德里亚诺。这太棒了。