WordPad (programación de Windows)

Prólogo

c # está compilando y generando depuración, exe y otros archivos, y los archivos correspondientes también pueden generarse mediante descompilación exe . De una vez por todas, puede elegir (` ・ ω ・ ´) ( nuestro maestro nos dio un exe semi-terminado para mostrarnos el efecto requerido , Ingeniero de CV está en línea, realmente haga lo que quiera )

Descripción del problema

Verifique la implementación del programa de álbum simple (no es necesario escribir un informe)

Diseñe un programa similar a Windows WordPad para que tenga las siguientes funciones:

  • Proporcione funciones básicas del tablero de escritura, como abrir y guardar archivos, soporte txt, rtf;
  • La edición y modificación del texto multiformato se controlan mediante los menús correspondientes. Los elementos de menú de uso común están equipados con los botones correspondientes de la barra de herramientas (consulte el tablero de escritura incorporado de Windows).
    Agregue otros códigos según sea necesario, como el diseño de la ventana Etc.
  • Realice un diálogo de búsqueda personalizado, los estudiantes capaces pueden implementar aún más el reemplazo / reemplazo de texto completo y otras funciones
  • La barra de estado muestra la identificación del estudiante, el nombre y otra información, y muestra el nombre del archivo que se está editando actualmente en el título de la ventana
  • (Opcional) Otras funciones que le resultan útiles: como compatibilidad con Word, etc.
  • (Opcional) Transfórmalo en un programa MDI: la ventana principal contiene menús como Nuevo, Ventana y Ayuda; en tiempo de ejecución, el menú de la ventana secundaria se fusionará con él, y la propiedad MergeIndex / MergeAction de cada elemento del menú se configurará razonablemente para que se ajuste a nosotros hábitos; programación permite al usuario ajustar la relación entre el diseño de la ventana correspondiente (baldosas, laminado, etc.) y similares
    efecto mirada
    image.png

Solución

El uso de richtextbox es un control similar a WordPad, que puede cumplir con rtf, txt y otros formatos. Si desea cumplir con documentos doc, vaya a Baidu Microsoft.Office.Interop.Word.dll, descargue y cotice, abra el código de guardar de la siguiente manera (donde saveName es un archivo Nombre)


        /// <summary>
        /// 打开文档操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 打开OToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.InitialDirectory = "C:\\";
            openFileDialog1.Filter = "rtf 文件|*.rtf|txt 文件|*.txt|doc files|*.doc";
            if (openFileDialog1.ShowDialog() != DialogResult.OK)
                return;
            saveName = openFileDialog1.FileName;
            if (openFileDialog1.FilterIndex == 1)
                richTextBox1.LoadFile(saveName);
            else if (openFileDialog1.FilterIndex == 2)
                richTextBox1.LoadFile(saveName, RichTextBoxStreamType.PlainText);
            else
                OpenWord(saveName);
            Text = saveName;
        }
        public void 父窗体打开Open(WritingBoard writingBoard)
        {
            writingBoard.openFileDialog1.InitialDirectory = "C:\\";
            writingBoard.openFileDialog1.Filter = "rtf 文件|*.rtf|txt 文件|*.txt|doc files|*.doc";
            if (writingBoard.openFileDialog1.ShowDialog() != DialogResult.OK)
                return;
            saveName = writingBoard.openFileDialog1.FileName;
            if (writingBoard.openFileDialog1.FilterIndex == 1)
                writingBoard.richTextBox1.LoadFile(saveName);
            else if (writingBoard.openFileDialog1.FilterIndex == 2)
                writingBoard.richTextBox1.LoadFile(saveName, RichTextBoxStreamType.PlainText);
            else
                OpenWord(saveName);
            writingBoard.Text = saveName;
            return;
        }
        public void OpenWord(string fileName)
        {
            ApplicationClass applicationClass = new ApplicationClass();
            Document document = null;
            object obj = Missing.Value;
            object FileName = fileName;
            object ReadOnly = false;
            object Visible = true;
            try
            {
                document = applicationClass.Documents.Open(ref FileName, ref obj, ref ReadOnly, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref Visible, ref obj, ref obj, ref obj, ref obj);
                document.ActiveWindow.Selection.WholeStory();
                document.ActiveWindow.Selection.Copy();
                richTextBox1.Paste();
            }
            finally
            {
                document?.Close(ref obj, ref obj, ref obj);
                applicationClass?.Quit(ref obj, ref obj, ref obj);
            }
        }
        /// <summary>
        /// 保存操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 保存SToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (saveName != "")
            {
                richTextBox1.SaveFile(saveName, RichTextBoxStreamType.RichText);
            }
            else
            {
                saveFileDialog1.Filter = "rtf files|*.rtf";
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    saveName = saveFileDialog1.FileName;
                    richTextBox1.SaveFile(saveName, RichTextBoxStreamType.RichText);
                }
            }
        }
        /// <summary>
        /// 另存为操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 另存为AToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.FileName = saveName.Substring(saveName.LastIndexOf('\\') + 1);
            saveFileDialog1.Filter = "rtf files|*.rtf|txt files|*.txt|doc files|*.doc";
            saveFileDialog1.AddExtension = true;
            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
                return;
            saveName = saveFileDialog1.FileName;
            if (saveFileDialog1.FilterIndex == 1)
                richTextBox1.SaveFile(saveName, RichTextBoxStreamType.RichText);
            else if (saveFileDialog1.FilterIndex == 2)
                richTextBox1.SaveFile(saveName, RichTextBoxStreamType.PlainText);
            else
                SaveAsWord(saveName);
        }
        public void SaveAsWord(string fileName)
        {
            ApplicationClass applicationClass = new ApplicationClass();
            Document document = null;
            object obj = Missing.Value;
            object FileName = fileName;
            try
            {
                document = applicationClass.Documents.Add(ref obj, ref obj, ref obj, ref obj);
                document.ActiveWindow.Selection.WholeStory();
                richTextBox1.SelectAll();
                Clipboard.SetData(DataFormats.Rtf, richTextBox1.SelectedRtf);
                document.ActiveWindow.Selection.Paste();
                document.SaveAs(ref FileName, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj, ref obj);
            }
            finally
            {
                document?.Close(ref obj, ref obj, ref obj);
                applicationClass?.Quit(ref obj, ref obj, ref obj);
            }
        }
        /// <summary>
        /// 新建操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 新建NToolStripMenuItem_Click(object sender, EventArgs e)
        {
            richTextBox1.Clear();
            saveName = "";
        }

Otras series de documentos son negrita, inclinada, subrayada, alineada izquierda-centro-derecha, color del modelo de fuente, búsqueda (mayúsculas, palabra completa, adelante y atrás), de hecho, son esencialmente modificaciones de algunas propiedades de richtextbox, preste atención al uso de DropDownOpening Operaciones como DropDownItemClicked reemplazan Click, lo que hace que el código sea más ágil y eficiente

   image.png

  Este es un ejemplo de subformulario de ajuste de MDI usando DropDownItemClicked, eficiente y elegante = v =

private void 窗口WToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            string layout=e.ClickedItem.Text;
            switch(layout)
            {
                case "水平平铺": LayoutMdi(MdiLayout.TileHorizontal);break;
                case "垂直平铺": LayoutMdi(MdiLayout.TileVertical); break;
                case "层叠": LayoutMdi(MdiLayout.Cascade); break;
            }
        }

El uso de MDI es permitir que un formulario principal tenga muchos formularios secundarios para operaciones más simples y efectivas

image.png
En el formulario padre nuevo formulario hijo, solo recuerde una serie de operaciones básicas, también puede configurar de manera rápida y eficiente generando funciones y propiedades

private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            WritingBoard writingBoard = new WritingBoard();
            writingBoard.TopLevel = false;
            writingBoard.MdiParent = this;
            writingBoard.Show();
        }

        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            WritingBoard writingBoard = new WritingBoard();
            writingBoard.TopLevel = false;
            writingBoard.MdiParent = this;
            writingBoard.父窗体打开Open(writingBoard);
            writingBoard.Show();
        }

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (WritingBoard writingBoard in MdiChildren) writingBoard.Close();
            Application.Exit();
        }

        private void 窗口WToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            string layout=e.ClickedItem.Text;
            switch(layout)
            {
                case "水平平铺": LayoutMdi(MdiLayout.TileHorizontal);break;
                case "垂直平铺": LayoutMdi(MdiLayout.TileVertical); break;
                case "层叠": LayoutMdi(MdiLayout.Cascade); break;
            }
        }

Código fuente adjunto

  Portal , configuré una bifurcación, para poder juntar el código con el mismo atributo de contenido diferente, y también puedo tener diferentes md para leer, lo que también es bueno para la intercalación git (` ・ ω ・ ´)
image.png

Supongo que te gusta

Origin www.cnblogs.com/xxhao/p/12756315.html
Recomendado
Clasificación