Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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/8/logging/2.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# Textbox有两个功能_C#_Asp.net - Fatal编程技术网

C# Textbox有两个功能

C# Textbox有两个功能,c#,asp.net,C#,Asp.net,我制作了textbox,但它需要将数据发送到其他具有自定义格式的应用程序(如%B表示粗体,如果要禁用粗体,请键入普通字体的关键字,等等) 因此,格式与通常的格式有很大不同。我制作了一个带有按钮的文本框,可以为文本格式添加关键字,这很好,但若我需要在同一个应用程序中的一个标签中预览,那个么有什么好方法呢?(我制作了将文本发送到标签的预览按钮) 显然,我需要设置%B在标签中以粗体文本开头,因此对于其他格式化关键字,除非有更好的方法?您的问题不清楚,您是否正在尝试格式化文本框中的字符串以在标签中显示为

我制作了textbox,但它需要将数据发送到其他具有自定义格式的应用程序(如
%B
表示粗体,如果要禁用粗体,请键入普通字体的关键字,等等)

因此,格式与通常的格式有很大不同。我制作了一个带有按钮的文本框,可以为文本格式添加关键字,这很好,但若我需要在同一个应用程序中的一个标签中预览,那个么有什么好方法呢?(我制作了将文本发送到标签的预览按钮)


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

您的问题不清楚,您是否正在尝试格式化文本框中的字符串以在标签中显示为粗体或不粗体,或者尝试在标签中显示格式示例,如%B

对于第二个选项,我将使用文字字符串,这样符号就不会把你搞砸。 即:

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


一般来说,将这样的逻辑放入它自己的类中通常会更容易看到某些代码应该放在哪里。在您的示例中,我将装箱一个包含文本的
格式化文本模型
。您的可编辑文本框可以更改此模型,预览标签将侦听对此模型的更改,并在需要时自动更新

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

类格式化文本模型
{
私有字符串_raw;
公共事件事件处理程序文本已更改;
公共字符串原始文本
{
设置
{
_原始=价值;
EventHandler tmp=TextChanged;
如果(tmp!=null)tmp(这个,EventArgs.Empty);
}
获取{return\u raw;}
}
公共字符串RTFText
{
返回
}
}

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

您可以创建从标签或控件继承的自定义控件,然后 您必须重写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);
        }

这很难阅读,也很难找出你真正需要帮助的地方。最好的办法是尝试一些看起来可能有用的东西,然后向我们展示代码,我们也许能够帮助改进它。主要是按照外部应用程序的规则进行格式化,例如%B表示粗体,这很好,我需要以外部应用程序可以看到的方式在标签中预览它。那么,如何使标签格式的文本像外部应用程序那样呢?希望现在更清楚了。我将尝试这里提到的所有变体,看看什么适合。谢谢。错误:对不起,我认为在Windows应用程序中。。。
        if (textBox1.Text.StartsWith(@"%B"))
        {
            char[] here = {'%', 'B'};
            label1.Font = new Font(label1.Font, FontStyle.Bold);
            label1.Text = textBox1.Text.TrimStart(here);
        }
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>
    }
}
        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);
        }