如何保存文本的字体和颜色信息

时间:2022-04-06 22:14:59
   现在学习做个类似记事本的程序,用的是richTextBox,纯文本的可以保存和读取,
但我希望能将文本中设置的字体大小和颜色信息也保存起来,读取的时候还能够还原。
这样要怎么才能实现????

注:整个问件不一定使用的是同一种字体和颜色,有可能不同的字,不同的行使用的字体和
颜色都不同,希望能保存所有设置的这些信息!!!

找了好长时间都没找到什么可用的办法,拜托大家进来帮帮忙吧,先谢过了!!!!

21 个解决方案

#1


记得以前学过这个。
似乎得调用windows api,写入注册表信息或是INI信息

#2


可以考虑用注册表来存储。
颜色设置调用控件colorDialog,通过方法写入注册表。
using Microsoft.Win32;//用到Registry和RegistryKey两个类
//写入注册表
        private void SaveToRegistry()
        {
            try
            {
                //以可写的方式打开SOFTWARE子键
                RegistryKey softwarekey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true);
                //依次创建ChoseColor子键和Color子键
                RegistryKey choseColorKey = softwarekey.CreateSubKey("ChoseColor");
                RegistryKey colorKey = choseColorKey.CreateSubKey("Color");
                //设置Color键的SetValue方法可能引发异常
                colorKey.SetValue("Red", (int)BackColor.R);
                colorKey.SetValue("Green", (int)BackColor.G);
                colorKey.SetValue("Blue", (int)BackColor.B);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "提示");
            }
        }

#3


保存成rtf文件啊,是带格式的

#4



    // save
    richTextBox.SaveFile(@"c:\mytxt.rtf");


    // load
    string rtf = System.IO.File.ReadAllText( @"c:\mytxt.rft" );
    richTextBox = rtf;

#5


private bool ReadRegistry()
        {
            //依次打开SoftWareKey和ChoseColor子键
            RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");
            RegistryKey choseColorKey = softwareKey.OpenSubKey("ChoseColor");
            if (choseColorKey == null)
                return false;
            else
            {
                RegistryKey colorKey = choseColorKey.OpenSubKey("Color");
                if (colorKey == null)
                    return false;
                else
                {
                    try
                    {
                        listBox1.Items.Add("成功打开键:" + colorKey.ToString());
                        //读取注册表中Color键的各个键值的值
                        int redComponet = (int)colorKey.GetValue("Red");
                        int greenComponent = (int)colorKey.GetValue("Green");
                        int blueComponent = (int)colorKey.GetValue("Blue");
                        BackColor = Color.FromArgb(redComponet, greenComponent, blueComponent);
                        //遍历由指定子键拥有的键值名称组成的字符串数组
                        foreach (string sValName in colorKey.GetValueNames())
                        {
                            listBox1.Items.Add(sValName + "分量值:" + colorKey.GetValue(sValName));
                        }
                        return true;
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show(exc.Message, "提示");
                        return false;
                    }
                }
            }
        }

#6


调用SaveFile("xxx.rtf"),保存为rtf文件

调用LoadFile("xxx.rtf"),从rtf文件加载,是带格式的

#7


引用 4 楼 gomoku 的回复:
C# code
    // save
    richTextBox.SaveFile(@"c:\mytxt.rtf");


    // load
    string rtf = System.IO.File.ReadAllText( @"c:\mytxt.rft" );
    richTextBox = rtf;


Correction to my post:

    richTextBox .Rtf = rtf;

#8


引用 7 楼 gomoku 的回复:
引用 4 楼 gomoku 的回复:
C# code 
    // save 
    richTextBox.SaveFile(@"c:\mytxt.rtf"); 


    // load 
    string rtf = System.IO.File.ReadAllText( @"c:\mytxt.rft" ); 
    richTextBox = rtf; 
 

Correction to my post: 

    richTextBox.Rtf = rtf; 


这位老兄,@"c:\mytxt.rft" 这个@是干什么的?
我吧这句用myFileName代替了,myFileName从打开对话框获得,
myFileName = openFileDialog1.FileName;
但是执行道richTextBox.Rtf = rtf;时报错,文件格式无效,
然后我在C盘建了各mytxt.rft,完全用你的代码,但还是说格式无效啊!!!

#9


引用 6 楼 cpio 的回复:
调用SaveFile("xxx.rtf"),保存为rtf文件 

调用LoadFile("xxx.rtf"),从rtf文件加载,是带格式的


use this one :)

#10


引用 6 楼 cpio 的回复:
调用SaveFile("xxx.rtf"),保存为rtf文件 

调用LoadFile("xxx.rtf"),从rtf文件加载,是带格式的


这个试过了,打开的时候报错文件格式无效,

#11


private void SaveToRegistry() 
        { 
            try 
            { 
                //以可写的方式打开SOFTWARE子键 
                RegistryKey softwarekey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true); 
                //依次创建ChoseColor子键和Color子键 
                RegistryKey choseColorKey = softwarekey.CreateSubKey("ChoseColor"); 
                RegistryKey colorKey = choseColorKey.CreateSubKey("Color"); 
                //设置Color键的SetValue方法可能引发异常 
                colorKey.SetValue("Red", (int)BackColor.R); 
                colorKey.SetValue("Green", (int)BackColor.G); 
                colorKey.SetValue("Blue", (int)BackColor.B); 
            } 
            catch (Exception exc) 
            { 
                MessageBox.Show(exc.Message, "提示"); 
            } 
        }

#12


怎么回事啊,都这么说那么应该是木问题的。。。。

#13


写注册表的方法还没试过,但也只能搞定颜色,字体样式和大小怎么半??

#14


存rtf(其实时文本的),里面就注明了元素的字体 大小 颜色。
rtf文件格式的最前面是样式表。

#15


保存为rtf格式的
保存的时候这样保存
this.richTextBox1.SaveFile(this.saveFileDialog1.FileName,RichTextBoxStreamType.RichText);
打开的时候再以相同的形式打开
this.richTextBox1.LoadFile(this.openFileDialog1.FileName,RichTextBoxStreamType.RichText);

#16


    大哥,这个格式的怎么保存和打开撒,上面的有几个都是说的这种方法,
可试过了根本不行,我昨天开可以50分的贴也回复的是用rtf保存,,,,,

#17


up

#18


顶上去

#19


怎么回事?这帖我不是结了吗?今天竟然通知我没结帖,,,,,郁闷!!!!!!!!

#20


纠结、

#21


        private void btnSave_Click(object sender, EventArgs e)
{
                richTextBox1.SaveFile(@"D:\c.rtf");
}

        private void btnOpen_Click(object sender, EventArgs e)
{
                string nextline = @"D:\c.rtf";
                richTextBox2.LoadFile(nextline, RichTextBoxStreamType.RichText);
}

#1


记得以前学过这个。
似乎得调用windows api,写入注册表信息或是INI信息

#2


可以考虑用注册表来存储。
颜色设置调用控件colorDialog,通过方法写入注册表。
using Microsoft.Win32;//用到Registry和RegistryKey两个类
//写入注册表
        private void SaveToRegistry()
        {
            try
            {
                //以可写的方式打开SOFTWARE子键
                RegistryKey softwarekey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true);
                //依次创建ChoseColor子键和Color子键
                RegistryKey choseColorKey = softwarekey.CreateSubKey("ChoseColor");
                RegistryKey colorKey = choseColorKey.CreateSubKey("Color");
                //设置Color键的SetValue方法可能引发异常
                colorKey.SetValue("Red", (int)BackColor.R);
                colorKey.SetValue("Green", (int)BackColor.G);
                colorKey.SetValue("Blue", (int)BackColor.B);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "提示");
            }
        }

#3


保存成rtf文件啊,是带格式的

#4



    // save
    richTextBox.SaveFile(@"c:\mytxt.rtf");


    // load
    string rtf = System.IO.File.ReadAllText( @"c:\mytxt.rft" );
    richTextBox = rtf;

#5


private bool ReadRegistry()
        {
            //依次打开SoftWareKey和ChoseColor子键
            RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");
            RegistryKey choseColorKey = softwareKey.OpenSubKey("ChoseColor");
            if (choseColorKey == null)
                return false;
            else
            {
                RegistryKey colorKey = choseColorKey.OpenSubKey("Color");
                if (colorKey == null)
                    return false;
                else
                {
                    try
                    {
                        listBox1.Items.Add("成功打开键:" + colorKey.ToString());
                        //读取注册表中Color键的各个键值的值
                        int redComponet = (int)colorKey.GetValue("Red");
                        int greenComponent = (int)colorKey.GetValue("Green");
                        int blueComponent = (int)colorKey.GetValue("Blue");
                        BackColor = Color.FromArgb(redComponet, greenComponent, blueComponent);
                        //遍历由指定子键拥有的键值名称组成的字符串数组
                        foreach (string sValName in colorKey.GetValueNames())
                        {
                            listBox1.Items.Add(sValName + "分量值:" + colorKey.GetValue(sValName));
                        }
                        return true;
                    }
                    catch (Exception exc)
                    {
                        MessageBox.Show(exc.Message, "提示");
                        return false;
                    }
                }
            }
        }

#6


调用SaveFile("xxx.rtf"),保存为rtf文件

调用LoadFile("xxx.rtf"),从rtf文件加载,是带格式的

#7


引用 4 楼 gomoku 的回复:
C# code
    // save
    richTextBox.SaveFile(@"c:\mytxt.rtf");


    // load
    string rtf = System.IO.File.ReadAllText( @"c:\mytxt.rft" );
    richTextBox = rtf;


Correction to my post:

    richTextBox .Rtf = rtf;

#8


引用 7 楼 gomoku 的回复:
引用 4 楼 gomoku 的回复:
C# code 
    // save 
    richTextBox.SaveFile(@"c:\mytxt.rtf"); 


    // load 
    string rtf = System.IO.File.ReadAllText( @"c:\mytxt.rft" ); 
    richTextBox = rtf; 
 

Correction to my post: 

    richTextBox.Rtf = rtf; 


这位老兄,@"c:\mytxt.rft" 这个@是干什么的?
我吧这句用myFileName代替了,myFileName从打开对话框获得,
myFileName = openFileDialog1.FileName;
但是执行道richTextBox.Rtf = rtf;时报错,文件格式无效,
然后我在C盘建了各mytxt.rft,完全用你的代码,但还是说格式无效啊!!!

#9


引用 6 楼 cpio 的回复:
调用SaveFile("xxx.rtf"),保存为rtf文件 

调用LoadFile("xxx.rtf"),从rtf文件加载,是带格式的


use this one :)

#10


引用 6 楼 cpio 的回复:
调用SaveFile("xxx.rtf"),保存为rtf文件 

调用LoadFile("xxx.rtf"),从rtf文件加载,是带格式的


这个试过了,打开的时候报错文件格式无效,

#11


private void SaveToRegistry() 
        { 
            try 
            { 
                //以可写的方式打开SOFTWARE子键 
                RegistryKey softwarekey = Registry.LocalMachine.OpenSubKey("SOFTWARE", true); 
                //依次创建ChoseColor子键和Color子键 
                RegistryKey choseColorKey = softwarekey.CreateSubKey("ChoseColor"); 
                RegistryKey colorKey = choseColorKey.CreateSubKey("Color"); 
                //设置Color键的SetValue方法可能引发异常 
                colorKey.SetValue("Red", (int)BackColor.R); 
                colorKey.SetValue("Green", (int)BackColor.G); 
                colorKey.SetValue("Blue", (int)BackColor.B); 
            } 
            catch (Exception exc) 
            { 
                MessageBox.Show(exc.Message, "提示"); 
            } 
        }

#12


怎么回事啊,都这么说那么应该是木问题的。。。。

#13


写注册表的方法还没试过,但也只能搞定颜色,字体样式和大小怎么半??

#14


存rtf(其实时文本的),里面就注明了元素的字体 大小 颜色。
rtf文件格式的最前面是样式表。

#15


保存为rtf格式的
保存的时候这样保存
this.richTextBox1.SaveFile(this.saveFileDialog1.FileName,RichTextBoxStreamType.RichText);
打开的时候再以相同的形式打开
this.richTextBox1.LoadFile(this.openFileDialog1.FileName,RichTextBoxStreamType.RichText);

#16


    大哥,这个格式的怎么保存和打开撒,上面的有几个都是说的这种方法,
可试过了根本不行,我昨天开可以50分的贴也回复的是用rtf保存,,,,,

#17


up

#18


顶上去

#19


怎么回事?这帖我不是结了吗?今天竟然通知我没结帖,,,,,郁闷!!!!!!!!

#20


纠结、

#21


        private void btnSave_Click(object sender, EventArgs e)
{
                richTextBox1.SaveFile(@"D:\c.rtf");
}

        private void btnOpen_Click(object sender, EventArgs e)
{
                string nextline = @"D:\c.rtf";
                richTextBox2.LoadFile(nextline, RichTextBoxStreamType.RichText);
}