我试图使一些代码更简洁,并且在我尝试动态定义控件时尝试抛出异常。无论我尝试哪种方式,a和b总是按照处理方式返回。我可以将案例分开,但这会使代码延长两倍。任何建议/意见将不胜感激。
foreach (string[] str in items)
{
Control box = new Control();
CustomControlTypeA a = CustomControlTypeA();
CustomControlTypeB b = new CustomControlTypeB();
switch (str[4])
{
case "0":
a.richTextBox1.Rtf = str[5];
box = a;
break;
case "1":
b.panel1.BackgroundImage = Image.FromFile(str[5]);
box = b;
break;
}
a.Dispose();
b.Dispose();
box.Location = new Point(x,y);
box.Width = w;
box.Height = h;
panelBody.Controls.Add(box);
box.BringToFront();
}
我也尝试在case语句中定义CustomControlTypeA,将box重新定义为CustomControlTypeA,甚至尝试像这样进行转换:
case "0":
(CustomControlTypeA)box.richTextBox1.Rtf = str[5];
break;
答案 0 :(得分:0)
这是因为你有a.Dispose();
& b.Dispose();
。你正在向box
分配其中一个,所以它也被处理掉了。
奇怪的是,你正在创建box
作为新Control
(你不需要这样做),但不会将其处理掉。
如果您要将控件添加到.Controls
集合中,则根本不应将其置于此处。
此代码应该可以工作:
foreach (string[] str in items)
{
Control box = null;
switch (str[4])
{
case "0":
CustomControlTypeA a = CustomControlTypeA();
a.richTextBox1.Rtf = str[5];
box = a;
break;
case "1":
CustomControlTypeB b = new CustomControlTypeB();
b.panel1.BackgroundImage = Image.FromFile(str[5]);
box = b;
break;
}
box.Location = new Point(x, y);
box.Width = w;
box.Height = h;
panelBody.Controls.Add(box);
box.BringToFront();
}
答案 1 :(得分:-1)
经过大量的反复试验,我现在发现一个方面问题可能在于我的自定义控件中的Rtf,尽管谁知道为什么会这样。如果使用richtextbox.Text而不是richtextbox.Rtf,则Enigmativity的方法有效。
编辑:修改文本以将解决方案归功于Enigmativity。我的代码中的拼写错误(将str [5]设置为空)或者我在此期间更改的其他随机代码正在加剧这个问题。