如题,能够实现文本与图片混排,格式类似于WORD.不甚感激!

解决方案 »

  1.   

    要求是高了点,我这里有份文本编辑的东东,将就一下吧。
    using  System  ;
            using  System.Drawing  ;
            using  System.Collections  ;
            using  System.ComponentModel  ;
            using  System.Windows.Forms  ;
            using  System.Data  ;
            using  System.IO  ;
            using  System.Drawing.Printing  ;
        public  class  Form1  :  Form
        {
        private  RichTextBox  richTextBox1  ;
        private  Button  button1  ;
        private  Button  button2  ;
        private  Button  button3  ;
        private  Button  button4  ;
        private  Button  button5  ;
        private  OpenFileDialog  openFileDialog1  ;
        private  SaveFileDialog  saveFileDialog1  ;
        private  PrintDialog  printDialog1  ;
        private  PrintDocument  ThePrintDocument  ;
        private  PrintPreviewDialog  printPreviewDialog1  ;
                            private  StringReader  myReader  ;
        private  System.ComponentModel.Container  components  =  null  ;
        
        public  Form1  (  )
        {
        //初始化窗体中的各个组件
        InitializeComponent  (  )  ;
        }
        //清除程序中使用多的资源
        protected  override  void  Dispose  (  bool  disposing  )
        {
        if  (  disposing  )
        {
        if  (  components  !=  null  )  
    {
    components.Dispose  (  )  ;
        }
        }
        base.Dispose  (  disposing  )  ;
        }
        private  void  InitializeComponent  (  )
        {
        richTextBox1  =  new  RichTextBox  (  )  ;
        button1  =  new  Button  (  )  ;
        button2  =  new  Button  (  )  ;
        button3  =  new  Button  (  )  ;
        button4  =  new  Button  (  )  ;
        button5  =  new  Button  (  )  ;
                        saveFileDialog1  =  new  SaveFileDialog  (  )  ;
                        openFileDialog1  =  new  OpenFileDialog  (  )  ;
        printPreviewDialog1  =  new  PrintPreviewDialog  (  )  ;
        printDialog1  =  new  PrintDialog  (  )  ;
        ThePrintDocument  =  new  PrintDocument  (  )  ;
                                                        ThePrintDocument.PrintPage  +=  new  PrintPageEventHandler  (  ThePrintDocument_PrintPage  )  ;
        SuspendLayout  (  )  ;
        richTextBox1.Anchor  =  AnchorStyles.None  ;
        richTextBox1.Name  =  "richTextBox1"  ;
        richTextBox1.Size  =  new  Size  (  448  ,  280  )  ;
        richTextBox1.TabIndex  =  0  ;
        richTextBox1.Text  =  ""  ;
        button1.Anchor  =  AnchorStyles.None  ;
        button1.Location  =  new  Point  (  41  ,  289  )  ;
        button1.Name  =  "button1"  ;
        button1.Size  =  new  Size  (  48  ,  30  )  ;
        button1.TabIndex  =  1  ;
        button1.Text  =  "打开"  ;
        button1.Click  +=  new  System.EventHandler  (  button1_Click  )  ;
        button2.Anchor  =  AnchorStyles.None  ;
        button2.Location  =  new  Point  (  274  ,  288  )  ;
        button2.Name  =  "button2"  ;
        button2.Size  =  new  Size  (  48  ,  30  )  ;
        button2.TabIndex  =  4  ;
        button2.Text  =  "预览"  ;
        button2.Click  +=  new  System.EventHandler  (  button2_Click  )  ;
        button3.Anchor  =  AnchorStyles.None  ;
        button3.Location  =  new  Point  (  108  ,  288  )  ;
        button3.Name  =  "button3"  ;
        button3.Size  =  new  Size  (  48  ,  30  )  ;
        button3.TabIndex  =  2  ;
        button3.Text  =  "保存"  ;
        button3.Click  +=  new  System.EventHandler  (  button3_Click  )  ;
        button4.Anchor  =  AnchorStyles.None  ;
        button4.Location  =  new  Point  (  174  ,  288  )  ;
        button4.Name  =  "button4"  ;
        button4.Size  =  new  Size  (  80  ,  30  )  ;
        button4.TabIndex  =  3  ;
        button4.Text  =  "打印机设置"  ;
        button4.Click  +=  new  System.EventHandler  (  button4_Click  )  ;
        button5.Anchor  =  AnchorStyles.None  ;
        button5.Location  =  new  Point  (  345  ,  288  )  ;
        button5.Name  =  "button5"  ;
        button5.Size  =  new  Size  (  48  ,  30  )  ;
        button5.TabIndex  =  5  ;
        button5.Text  =  "打印"  ;
        button5.Click  +=  new  System.EventHandler  (  button5_Click  )  ;
                      saveFileDialog1.DefaultExt  =  "*.txt"  ;
                saveFileDialog1.FileName  =  "file.txt"  ;
        saveFileDialog1.InitialDirectory  =  "c:\\"  ;
        saveFileDialog1.Title  =  "另存为!"  ;
        openFileDialog1.DefaultExt  =  "*.txt"  ;
        openFileDialog1.FileName  =  "file.txt"  ;
        openFileDialog1.InitialDirectory  =  "c:\\"  ;
        openFileDialog1.Title  =  "打开文本文件!"  ;
        AutoScaleBaseSize  =  new  Size  (  6  ,  14  )  ;
        ClientSize  =  new  Size  (  448  ,  325  )  ;
        this.Controls.Add  (  button1  )  ;
        this.Controls.Add  (  button2  )  ;
        this.Controls.Add  (  button3  )  ;
        this.Controls.Add  (  button4  )  ;
        this.Controls.Add  (  button5  )  ;
        this.Controls.Add  (  richTextBox1  )  ;
        
        this.MaximizeBox  =  false  ;
        this.Name  =  "Form1"  ;
        this.Text  =  "C#来操作文本文件"  ;
        this.ResumeLayout  (  false  )  ;
        }
      

  2.   

    再接下来:
    static  void  Main  (  )  
    {
    Application.Run  (  new  Form1  (  )  )  ;
        }
        
        private  void  button1_Click  (  object  sender  ,  System.EventArgs  e  )
        {
                    try
                    {
        if  (  openFileDialog1.ShowDialog  (  )  ==  DialogResult.OK  )
        {
            FileStream  fs  =  new  FileStream  (  openFileDialog1.FileName    ,  FileMode.Open  ,  FileAccess.Read  )  ;
            StreamReader  m_streamReader  =  new  StreamReader  (  fs  )  ;  
        //使用StreamReader类来读取文件
        m_streamReader.BaseStream.Seek  (  0  ,  SeekOrigin.Begin  )  ;
            //  从数据流中读取每一行,直到文件的最后一行,并在richTextBox1中显示出内容
            this.richTextBox1.Text  =  ""  ;
            string  strLine  =  m_streamReader.ReadLine  (  )  ;
            while  (  strLine  !=  null  )
            {
                this.richTextBox1.Text  +=  strLine  +  "\n"  ;
                strLine  =  m_streamReader.ReadLine  (  )  ;
            }
            //关闭此StreamReader对象
            m_streamReader.Close  (  )  ;
        }  
                }
                catch  (  Exception  em  )
                    {
        Console.WriteLine  (  em.Message.ToString  (  )  )  ;
                    }
        
        }
        
        private  void  button3_Click  (  object  sender  ,  System.EventArgs  e  )
        {
                    try
                    {
        //获得另存为的文件名称
        if  (  saveFileDialog1.ShowDialog  (  )  ==  DialogResult.OK  )
        {  
        //创建一个文件流,用以写入或者创建一个StreamWriter
        FileStream  fs  =  new  FileStream  (  @saveFileDialog1.FileName    ,  FileMode.OpenOrCreate  ,  FileAccess.Write  )  ;
            StreamWriter  m_streamWriter  =  new  StreamWriter  (  fs  )  ;
            m_streamWriter.Flush  (  )  ;
        
            //  使用StreamWriter来往文件中写入内容
            m_streamWriter.BaseStream.Seek  (  0  ,  SeekOrigin.Begin  )  ;
            //  把richTextBox1中的内容写入文件
            m_streamWriter.Write  (  richTextBox1.Text  )  ;
            //关闭此文件
            m_streamWriter.Flush  (  )  ;
            m_streamWriter.Close  (  )  ;
        }
                    }
                    catch  (  Exception  em  )
                    {
        Console.WriteLine  (  em.Message.ToString  (  )  )  ;
                    }
        }
        
        private  void  button4_Click  (  object  sender  ,  System.EventArgs  e  )
        {
                    printDialog1.Document  =  ThePrintDocument  ;
                    printDialog1.ShowDialog  (  )  ;
        }
        //预览打印文档
        private  void  button2_Click  (  object  sender  ,  System.EventArgs  e  )
        {
                    try
                    {
        string  strText  =  richTextBox1.Text  ;
        myReader  =  new  StringReader  (  strText  )  ;
        PrintPreviewDialog  printPreviewDialog1  =  new  PrintPreviewDialog  (  )  ;
        printPreviewDialog1.Document  =  ThePrintDocument    ;
        printPreviewDialog1.FormBorderStyle  =  FormBorderStyle.Fixed3D    ;
        printPreviewDialog1.ShowDialog  (  )  ;
                    }
                    catch  (  Exception  exp  )
                    {
        Console.WriteLine  (  exp.Message.ToString  (  )  )  ;
                    }
        }
        //打印richTextBox1中的内容
        private  void  button5_Click  (  object  sender  ,  System.EventArgs  e  )
        {
                    printDialog1.Document  =  ThePrintDocument  ;
                    string  strText  =  richTextBox1.Text  ;
                    myReader  =  new  StringReader  (  strText  )  ;
                    if  (  printDialog1.ShowDialog  (  )  ==  DialogResult.OK  )
                    {
        ThePrintDocument.Print  (  )  ;
                    }
        }
                    protected  void  ThePrintDocument_PrintPage  (  object  sender  ,  PrintPageEventArgs  ev  )
                                {
                    float  linesPerPage  =  0  ;
                    float  yPosition  =  0  ;
                    int  count  =  0  ;
                    float  leftMargin  =  ev.MarginBounds.Left  ;
                    float  topMargin  =  ev.MarginBounds.Top  ;
                    string  line  =  null  ;
                    Font  printFont  =  richTextBox1.Font  ;
                    SolidBrush  myBrush  =  new  SolidBrush  (  Color.Black  )  ;
                    //计算每一页打印多少行  
                linesPerPage  =  ev.MarginBounds.Height  /  printFont.GetHeight  (  ev.Graphics  )  ;
                    //重复使用StringReader对象  ,打印出richTextBox1中的所有内容
                    while  (  count  <  linesPerPage  &&  (  (  line  =  myReader.ReadLine  (  )  )  !=  null  )  )  
                {
    //  计算出要打印的下一行所基于页面的位置
        yPosition  =  topMargin  +  (  count  *  printFont.GetHeight  (  ev.Graphics  )  )  ;
        //  打印出richTextBox1中的下一行内容
        ev.Graphics.DrawString  (  line  ,  printFont  ,  myBrush  ,  leftMargin  ,  yPosition  ,  new  StringFormat  (  )  )  ;
        count++  ;
                    }
                    //  判断如果还要下一页,则继续打印
                    if  (  line  !=  null  )
        ev.HasMorePages  =  true  ;
                    else
        ev.HasMorePages  =  false  ;
                    myBrush.Dispose  (  )  ;
          }
              }
      

  3.   

    要求高吗?有类似ewebeditor等编辑器的实例
      

  4.   

    看一下QuickStart1.1的WindowsForms控件示例中的RichTextBox里边的功能也不错,初学很合适。本地目录如下:http://localhost/QuickStart/winforms/default.aspx?url=/quickstart/winforms/doc/ControlRef/RichTextBoxCtl.aspx