文本框做两件事

时间:2011-11-17 12:38:22

标签: c# asp.net

我制作了文本框,但它需要将数据发送到其他具有自定义格式的应用程序(如%B为粗体,如果要关闭粗体,则键入普通字体的关键字,等等)。

因此,格式与平时大不相同。我创建了带有按钮的文本框,可以为文本格式添加关键字,并且工作正常,但如果我需要在同一个应用程序中的一个标签中进行预览,那么有什么好办法呢? (我制作了发送文字到标签的预览按钮)

显然,我需要设置%B在标签中开始加粗文字,对于其他格式化关键字,除非有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

您的问题不明确,您是否尝试格式化文本框中的字符串以使用或不使用粗体显示在标签中,或者您是否尝试在标签中显示格式化示例,例如%B?

对于第二个选项,我会使用一个文字字符串,这样符号就不会弄乱你。 即:

string here = @"%Byourtextboxtext";

对于第一个选项,我认为您需要创建一个处理字符串的函数。该函数应该接收一个字符串,根据自定义格式修改标签,清理字符串并将其应用于标签。 即:

        if (textBox1.Text.StartsWith(@"%B"))
        {
            char[] here = {'%', 'B'};
            label1.Font = new Font(label1.Font, FontStyle.Bold);
            label1.Text = textBox1.Text.TrimStart(here);
        }

答案 1 :(得分:1)

通常将这样的逻辑放入它自己的类中通常会更容易看到某些代码应该去哪里。在你的例子中,我会创建一个包含文本的FormattedTextModel。您的可编辑文本框可以更改此模型,预览标签会侦听此模型的更改并在需要时自行更新。

预览文本框需要知道如何以另一种方式格式化文本,以便可以查看它,例如使用RTF textbox

class FormattedTextModel
{
    private string _raw;

    public event EventHandler TextChanged;

    public string RawText
    {
        set
        {
            _raw = value;
            EventHandler tmp = TextChanged;
            if (tmp != null) tmp(this, EventArgs.Empty);
        }
        get { return _raw; }
    }

    public string RTFText
    {
        return <Convert to rtf here>
    }
}

因此,可编辑文本框和预览文本框都引用了此模型的同一实例。可以在可编辑文本框上的按键上更改模型,以获得预览的“实时”更新,或者在使用按钮等时触发。

答案 2 :(得分:1)

您可以创建从Label或Control继承的自定义ControlLable  你必须覆盖onpaint()控制方法并绘制你想要的文本(粗体,斜体),像这样的伪代码:

        protected override void OnPaint(PaintEventArgs e)
        {
            //base.OnPaint(e);//must be clear
            //tranlate your metaText for exapmle after translate:
            e.Graphics.DrawString("B", Font(Bold), Brush, Ponit);
            e.Graphics.DrawString("B", Font(Regular), Brush, Ponit+n);
        }