添加到Panel时,RichTextBox以纯文本显示

时间:2015-12-01 14:01:19

标签: c# winforms controls event-listener

我创建了一个自定义Tabs Control。它可用作选项卡本身的彩色标签,也可用作保存内容的Panel。我的应用程序从配置文件中读取UI参数。以控制配置为例,以此行为例:

RTFBOX=(ID - rtf1) (BOUNDS - 0,0,100,100) (MULTILINE - enable) (FILE - email_rules.rtf)

这一行告诉应用程序创建我的自定义RichTextBoxPlus类的实例,重要的是它设置为从FILE参数读取富文本。如果我不将此RichTextBoxPlus添加到另一个Control,它会显示它的富文本格式绝对正常。

我有另一个在运行时读取操作的配置,这可以是简单的事情,比如告诉使用控件配置创建的按钮,当它被点击时,它应该使用来自TextBox控件的内容触发电子邮件。我有一个动作,将控件配对选项卡自定义控件中的每个选项卡。例如:

ADDTOTABS=(OBJECT - tabsControl1) (CONTROLS - panel1, panel2)

找到tabsControl1并将panel1添加到第一个标签页,将panel2添加到第二个标签页。在此示例中,Panel正被添加到每个选项卡而不是单独的控件,因为Panel可以包含多个控件,在运行时通过ADDTOPANEL操作进行处理。

ADDTOPANEL=(OBJECT - rtf1) (TARGET - panel1) (TRIGGER - onload)

因此rtf1的{​​{1}}实例已添加到RichTextBoxPlus,然后将其添加到panel1控件的第一个标签的相应Panel

我发现rtf1显示富文本格式,如果添加到panel1但没有将panel1添加到Tabs,则显示格式正常。

ADDTOTABS操作执行此方法:

Tabs

Tabs类的SetTaggedObject方法找到与提供的选项卡名称对应的Panel控件:

private void TabContents_Action(Tabs tabpanel, string[] ctrls)
{
    string[] tabs = tabpanel.GetTabNames();
    for(int i = 0; i < tabs.Length; i++)
    {
        Control control = this.Controls.Find(ctrls[i], true).FirstOrDefault();
        tabpanel.SetTaggedObject(control, tabs[i]);
    }
    tabpanel.SetTabActive(tabs[0]);
}

这种方法似乎没什么不妥。

Tabs类的SetTabActive方法有更大的批量。这会处理更改所有选项卡的外观,以使非活动选项卡看起来与活动选项卡不同。它还隐藏并显示每个选项卡的面板,具体取决于选项卡是否处于活动状态。

public void SetTaggedObject(Control ctrl, string tab)
{
    Control container = this.Controls.Find(tab, false).FirstOrDefault();
    container.Controls.Add(ctrl);
}

不确定,但我会说问题必须在这个方法中。有什么想法吗?

0 个答案:

没有答案