




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章WPF文本编辑器,学习目的,本章目的是建立一个文本编辑器,同时继续介绍控件的用法。有两类文本编辑器:单文档文本编辑器一次只能打开一个文件,如果要打开另一个文件,必须关闭当前打开的文件,微软的写字板程序就是单文档字处理程序。多文档文本编辑器允许同时打开多个文件,每个文件占用一个子窗口,微软的Word程序就是多文档字处理程序。,主要内容,3.1文档布局3.2RichTextBox控件3.3Command实现编辑功能3.4存取文件3.5About对话框3.6文本编辑器查找替换功能3.7提示用户保存已被修改的文件3.8打印和打印预览3.9多选项卡页的文本编辑器,3.1文档布局,WPF基于文档用途将文档分成两大类别:固定文档适用于“所见即所得”应用程序,任何显示器显示的内容和格式以及任何打印机打印的内容和格式完全相同。固定文档的典型例子是字处理程序。而流文档(FlowDocument)会根据窗口大小、设备分辨率和用户的选择来动态调整和重新排列文档内容。网页就是流文档的一个简单示例。此外,流文档还具有很多内置功能,包括搜索、能够优化可读性的查看模式以及更改字体大小和外观的功能。有四个控件对流文档提供支持:RichTextBox、FlowDocumentPageViewer、FlowDocumentReader和FlowDocumentScrollViewer。RichTextBox控件可以编辑流文档内容,其余三种控件只能查看文档。,【例3.1】使用FlowDocumentReader控件例子,XAML标记如下。所有查看控件都必须使用FlowDocument控件来记录流内容。例子中Paragraph是段落标记,List是列表项标记,Table是表标记,BlockUIContainer块标记,类似Word程序文本框,可放入文字图形等,如果希望图形被文字环绕,可将BlockUIContainer块标记放到Figuer或Floates标记中,这两个标记就像一个小型FlowDocument,不但可放入图像,也可放入其他对象,例如表格。还可以有Section节标记等。运行效果见图3.1,请注意排版格式和窗体大小有关。读者可更改FlowDocumentReader为其他查看控件看一下效果。,流文档(FlowDocument)包括很多内容,使用TextPointer类来表示流文档位置,位置或落在内容中的字符之间,或者落在定义内容结构的流内容元素标记之间。常用方法如下:publicintCompareTo(TextPointerposition):比较位置顺序。publicTextPointerContextGetPointerContext(LogicalDirectiondirection):返回和调用本方法的TextPointer类对象相邻内容类别,TextPointerContext.None表示内容的开头或末尾相邻,TextPointerContext.Text表示和文本相邻,其他选项略。参数是LogicalDirection.Forward,表示其后部相邻的内容,LogicalDirection.Backward表示其前部相邻的内容。publicstringGetTextInRun(LogicalDirectiondirection):得到相邻文本。publicTextPointerGetPositionAtOffset(intoffset):移动到新位置,参数为移动偏移量。publicTextPointerGetNextContextPosition(LogicalDirectiondirection):下一位置。,3.2RichTextBox控件,RichTextBox控件可用来输入和编辑文本。控件常用属性、事件和方法如下:属性Selection:选定文本内容。FontFamily、FontSize、FontStretch、FontStyle、FontWeight和Foreground:修改字符的字体属性。属性Document:记录输入到控件中的内容。属性AcceptsTab和AcceptsReturn:是否允许使用TAB键和回车键换行。属性SpellCheck.IsEnabled:是否允许拼写检查。事件TextChanged:RichTextBox控件内的内容被改变时发生的事件。方法Copy、Cut、Paste、Redo和Undo:实现控件剪贴板功能和撤消、恢复命令。方法SelectAll():RichTextBox为文本编辑控件时选择的全部内容。,3.3Command实现编辑功能,编辑程序都支持很多编辑功能。【例3.2】本例在例2.37基础上增加工具条,在工具条上增加18个按钮,实现上述的编辑功能,具体步骤如下。(1)继续例2.37。删除TextBox控件,先在窗体放置工具条,DockPanel.Dock=Top,属性Height=30。再增加RichTextBox控件,最后放入的控件充满面板剩余区域,删除其属性Height和Width,属性AcceptsTab=True。修改New菜单项单击(Click)事件函数如下:privatevoidNew_MenuItem_Click(objectsender,RoutedEventArgse)richTextBox1.Document.Blocks.Clear();,(2)右击解决方案管理器中的项目名称文本编辑器,在弹出的快捷菜单中选中添加(D)|新建文件夹(D)菜单项,新建文件夹Images。右击文件夹Images,在弹出的快捷菜单中选中添加(D)|现有项(G)菜单项,在出现对话框中选择要作为工具条按纽图标的图形文件,将这些图形文件放到文件夹Images中。(3)在工具条面板上增加18个按钮,XAML标记如下,ToolTip属性为中文提示。,(4)增加编辑|全选菜单项标记如下:(5)修改文件|退出菜单项标记和单击事件处理函数如下:privatevoidExit_MenuItem_Click(objectsender,RoutedEventArgse)Application.Current.Shutdown();(6)在工具条中增加两个ComboBox控件,一个选择字号,另一个选择字体名称。用例2.11方法为字号控件下拉列表增加字号,例如10、20等,也可用例2.30方法显示大号字体和小号字体,选中时得到选中字体的实际字号。用例2.14方法为字体名称控件下拉列表增加能够使用的字体。两个控件SelectionChanged事件处理函数如下:,privatevoidcomboBox1_SelectionChanged(objectsender,SelectionChangedEventArgse)FontFamilyfontName=newFontFamily(comboBox1.SelectedItem.ToString();richTextBox1.Selection.ApplyPropertyValue(TextElement.FontFamilyProperty,fontName);privatevoidcomboBox2_SelectionChanged(objectsender,SelectionChangedEventArgse)ComboBoxItemCbItem=comboBox2.SelectedItemasComboBoxItem;doublefontSize=Convert.ToDouble(CbItem.Content.ToString();richTextBox1.Selection.ApplyPropertyValue(TextElement.FontSizeProperty,fontSize);(7)编译运行界面如图3.2。试验一下运行效果。,3.4存取文件,文本编辑器都应具有文件存取功能,菜单顶级菜单项“文件”的弹出菜单中一般包括如下菜单项:新建、打开、关闭、保存和另存为等。3.4.1OpenFileDialog和SaveFileDialog类OpenFileDialog对话框用来选择要打开的文件路径及文件名,SaveFileDialog对话框用来选择要保存的文件路径及文件名。它们的属性和方法基本相同。必须引入Microsoft.Win32命名空间。属性Filter属性FilterIndex属性FileName属性InitialDirectory属性DefaultExt方法ShowDialog(),3.4.2存取文件功能实现,(8)在Window1.xaml.cs文件头部增加引入命名空间语句:usingSystem.IO;usingMicrosoft.Win32;(9)在Window1类中定义变量:strings_FileName=,记录当前编辑的文件名,如果字符串为空,表示还未记录文件名,即编辑的文件还没有名字,当单击菜单文件|保存菜单项保存文件时,要请用户输入文件名。(10)为菜单顶级菜单项文件增加菜单项:打开.、保存.和另存为.,Name属性分别为:FileOpen_MenuItem、FileSave_MenuItem、FileSaveAs_MenuItem。为三个菜单项增加单击事件处理函数如下。,当前支持的数据格式是Rtf、Text、Xaml和XamlPackage,微软Word程序和写字板程序支持Rtf文件,因此本例以打开和保存Rtf文件为例,其他格式文件的打开和保存请读者完成。privatevoidFileOpen_MenuItem_Click(objectsender,RoutedEventArgse)OpenFileDialogopenFileDialog1=newOpenFileDialog();openFileDialog1.Filter=Rtf文件(*.Rtf)|*.rtf|所有文件(*.*)|*.*;,if(openFileDialog1.ShowDialog().Value)s_FileName=openFileDialog1.FileName;StringfileExtension=ystem.IO.Path.GetExtension(s_FileName).ToUpper();if(fileExtension=.RTF)using(FileStreamfileStream=File.OpenRead(s_FileName)TextRangetextRange=newTextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd);if(textRange.CanLoad(DataFormats.Rtf)textRange.Load(fileStream,ataFormats.Rtf);,privatevoidFileSave_MenuItem_Click(objectsender,RoutedEventArgse)if(s_FileName.Length!=0)using(FileStreamfileStream=File.Create(s_FileName)TextRangetextRange=newTextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd);textRange.Save(fileStream,DataFormats.Rtf);elseFileSaveAs_MenuItem_Click(sender,e);,privatevoidFileSaveAs_MenuItem_Click(objectsender,RoutedEventArgse)SaveFileDialogsaveFileDialog1=newSaveFileDialog();saveFileDialog1.Filter=Rtf文件(*.Rtf)|*.rtf|所有文件(*.*)|*.*;if(saveFileDialog1.ShowDialog().Value)s_FileName=saveFileDialog1.FileName;using(FileStreamfileStream=File.Create(s_FileName)TextRangetextRange=newTextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd);textRange.Save(fileStream,DataFormats.Rtf);,(11)修改New菜单项单击(Click)事件处理函数如下:privatevoidNew_MenuItem_Click(objectsender,RoutedEventArgse)richTextBox1.Document.Blocks.Clear();s_FileName=;(12)编译运行,首先输入一些内容,从画图程序拷贝一幅图像。首先保存,注意扩展名为rtf。关闭程序,再打开程序。,3.5About对话框,本节介绍如何创建满足一定要求的自定义对话框。(13)在VS2008集成环境中,单击菜单项目|添加窗体(I)菜单项,弹出对话框,在模板(T)编辑框中选择窗体(WPF),在名称栏(N)编辑框中输入窗体文件名称:About.xaml,单击添加(A)按钮。(14)修改About窗体属性ResizeModen=NoResize,表示窗体没有最大化和最小化按钮;属性Title=“关于记事本”。增加Label控件表示版权信息,其属性Content=“版权所有”。一个按钮,属性Content=“确定”privatevoidbutton1_Click(objectsender,RoutedEventArgse)Close();(15)为菜单增加顶级菜单项:帮助,为其弹出菜单增加标题为关于的菜单项,属性Name为HelpAbout_MenuItem。,privatevoidHelpAbout_MenuItem_Click(objectsender,RoutedEventArgse)Aboutd1=newAbout();d1.ShowDialog();(16)编译运行,单击菜单帮助|关于菜单项,将打开About对话框(如图3.5),并且不关闭此对话框,不能操作主窗体,一般把这样的对话框叫做模式对话框。,3.6文本编辑器查找替换功能,3.6.1模式对话框和非模式对话框模式对话框和非模式对话框的区别是:打开模式对话框后,只有关闭该模式对话框,才能操作其他窗体,例如SaveDialog和OpenDialog都是典型的模式对话框,打开方法ShowDialog()。而打开非模式对话框后,不必退出该模式对话框,就可以操作其他窗口,例如字处理程序中的查找和替换对话框就是典型的非模式对话框,打开方法Show()。两类对话框本质上都是窗体,是Window类的派生类。,3.6.2查找替换功能的实现,(17)参照3.5节方法,建立查找替换对话框。设定窗体文件名称为FindReplace.xaml,从文件FindReplace.xaml.cs可以看到新建窗体类名也为FindReplace。(18)修改窗体FindReplace属性ResizeModen=NoResize,表示窗体没有最大化和最小化按钮,既窗体不能最大化和最小化,窗体不能改变大小;属性Title=查找和替换。在窗体中增加两个Label控件,属性Text分别为查找字符串和替换字符串。两个TextBox控件,属性Text=。两个按钮,属性Text分别为查找下一个和替换查到字符。修改属性TopMost=true,使该窗口打开时总在其他窗体的前边。对话框界面如图3.6。(19)为FindReplace类增加变量:Window1mainWindow;,(20)在创建窗体对象时,要自动调用构造函数。如果在FindReplace类构造函数中,把主窗体对象的引用传递给查找替换窗体,查找替换窗体就可以用主窗体对象的引用调用主窗体中的方法了。修改formFindReplace类构造函数。publicFindReplace(Window1window1)InitializeComponent();mainWindow=window1;(21)为主窗体Window1类增加方法如下,该方法将被窗体FindReplace类的方法调用。publicvoidFindRichTextBoxString(stringFindString)(22)FindReplace窗体中标题为查找下一个的按钮单击事件函数:privatevoidbuttonFind_Click(objectsender,RoutedEventArgse)if(textBox1.Text.Length!=0)mainWindow.FindRichTextBoxString(textBox1.Text);elseMessageBox.Show(“查找字符串不能为空”,“提示”);,(23)在Window1类中增加方法如下,该方法将被窗体FindReplace类的方法调用。publicvoidReplaceRichTextBoxString(stringReplaceString)(24)FindReplace窗体中标题为替换查到字符的按钮单击事件处理函数:privatevoidbuttonReplace_Click(objectsender,RoutedEventArgse)if(textBox2.Text.Length!=0)mainWindow.ReplaceRichTextBoxString(textBox2.Text);ElseMessageBox.Show(替换字符串不能为空,提示,MessageBoxButtons.OK);(25)为Window1类增加变量:TextPointerpostion=null,该变量用来记录下一次查找的开始位置。,(26)为Window1窗体菜单的编辑顶级菜单项的弹出菜单增加菜单项:查找和替换,属性Name为EditFindReplace。查找和替换菜单项单击事件处理函数:privatevoidEditFindReplace_Click(objectsender,RoutedEventArgse)postion=richTextBox1.Document.ContentStart;FindReplaceFindReplaceDialog=newFindReplace(this);FindReplaceDialog.Owner=this;FindReplaceDialog.Show();(27)在Window1类中定义3.1节中从指定位置开始查找指定的字符串方法。(28)第21步在主窗体Window1类中定义了FindRichTextBoxString方法,现为其增加语句如下:,publicvoidFindRichTextBoxString(stringFindString)if(postion.CompareTo(richTextBox1.Document.ContentEnd)0)MessageBox.Show(已到文本底部,再次查找将从文本开始处查找,提示);postion=richTextBox1.Document.ContentStart;return;postion=FindWordFromPosition(postion,FindString);if(postion=null)MessageBox.Show(未找到匹配字符串,再次查找将从文本开始处查找,提示);postion=richTextBox1.Document.ContentStart;elserichTextBox1.Focus();TextPointerpostion1=postion;postion=postion.GetPositionAtOffset(FindString.Length);richTextBox1.Selection.Select(postion1,postion);,(29)第23步在Window1类增加了一个替换字符串的方法ReplaceRichTextBoxString,这里为其增加语句如下:publicvoidReplaceRichTextBoxString(stringReplaceString)if(!richTextBox1.Selection.IsEmpty)richTextBox1.Selection.Text=ReplaceString;(30)编译运行,输入若干字符,单击应用程序菜单编辑|查找和替换菜单项,打开标题为查找和替换对话框。注意可以不关闭该对话框,操作主窗体,并且该对话框总是在主窗体的前边,它是一个典型的非模式对话框。在对话框中输入查找和替换的字符,单击标题为查找下一个的按钮,可以找到所选字符,并被选中,单击标题为替换查到字符的按钮,可以看到已被选中的查找到的字符被替换。,3.7提示用户保存已被修改的文件,使用单文档文本编辑器,用户在新建文本,打开其他文件或者关闭文本编辑器时,如果用户对已打开的文件做了修改,或者是新建的文件,还未保存,就需要在关闭当前文件前,使用对话框提示用户是否保存已被修改的文本内容。3.7.1MessageBox类使用MessageBox类的Show方法可以打开一个模式对话框,有多个重载Show方法:MessageBox.Show(模式对话框提示信息);MessageBox.Show(模式对话框提示信息,标题栏中的标题);MessageBox.Show(模式对话框提示信息,标题栏中的标题,MessageBoxButton.YesNoCancel,MessageBoxImage.Question);,(31)为Window1类增加一个bool变量bSave=false作为标记,用来跟踪控件RichTextBox中的文本内容是否被修改。在程序开始运行、建立和打开一个新文件后,bSave=false,表示如果关闭当前文件,不必提示用户保存当前文件。当RichTextBox控件中的文本被修改,将激活RichTextBox控件TextChanged事件,在该事件处理函数中,使bSave=true,表示关闭当前文件前,要询问用户是否保存当前已被修改的文件,3.7.2提示保存已被修改的文件,(32)首先在主窗体Window1类中增加一个函数,其功能是如果检查到当前文件已被修改,用对话框询问用户是否保存当前文件,根据用户的选择作相应的处理,该函数返回true,表示继续操作,该函数返回false,表示忽略此次操作。之所以要增加这个函数是因为有三处要用到此函数。该函数定义如下:publicboolIfSaveOldFile()boolReturnValue=true;if(bSave)MessageBoxResultdr;dr=MessageBox.Show(要保存当前更改吗?,保存更改吗?,MessageBoxButton.YesNoCancel,MessageBoxImage.Question);,switch(dr)caseMessageBoxResult.Yes:FileSave_MenuItem_Click(null,null);ReturnValue=true;bSave=false;break;caseMessageBoxResult.No:bSave=false;ReturnValue=true;break;caseMessageBoxResult.Cancel:ReturnValue=false;break;returnReturnValue;,(33)在菜单文件|新建和文件|打开菜单项的事件函数第1条语句前增加如下语句:if(!IfSaveOldFile()return;(34)在菜单文件|新建菜单项事件函数最后,在文件|打开菜单项textRange.Load语句后边增加语句:bSave=false;(35)修改菜单文件|保存.菜单项单击事件处理函数如下:privatevoidFileSave_MenuItem_Click(objectsender,RoutedEventArgse)if(s_FileName.Length!=0)using(FileStreamfileStream=File.Create(s_FileName)TextRangetextRange=newTextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd);,textRange.Save(fileStream,DataFormats.Rtf);bSave=false;elseFileSaveAs_MenuItem_Click(sender,e);(36)修改菜单文件|另存为.菜单项单击事件处理函数privatevoidFileSaveAs_MenuItem_Click(objectsender,RoutedEventArgse)SaveFileDialogsaveFileDialog1=newSaveFileDialog();saveFileDialog1.Filter=Rtf文件(*.Rtf)|*.rtf|所有文件(*.*)|*.*;if(saveFileDialog1.ShowDialog().Value)s_FileName=saveFileDialog1.FileName;using(FileStreamfileStream=File.Create(s_FileName)TextRangetextRange=newTextRange(richTextBox1.Document.ContentStart,richTextBox1.Document.ContentEnd);,textRange.Save(fileStream,DataFormats.Rtf);bSave=false;(37)为RichTextBox控件TextChanged事件增加事件处理函数如下:privatevoidrichTextBox1_TextChanged(objectsender,TextChangedEventArgse)bSave=true;(38)窗体Window1的Closing事件是在关闭窗口之前产生的事件,此时窗体中的控件还存在,还可以保存修改的内容,也可以不退出。增加Closing事件的事件处理函数如下:privatevoidWindow_Closing(objectsender,System.ComponentModel.CancelEventArgse)if(!IfSaveOldFile()e.Cancel=true;,(39)编译运行,键入若干字符,单击菜单文件顶级菜单项的新建、打开或退出菜单项,将看到提示信息,询问是否保存已被修改的文件。有三种选择:存文件,不存文件,忽略此次操作,试验一下单击不同按钮程序运行的效果。,3.8打印和打印预览,打印和打印预览是一个编辑器必须具有的功能。一般要实现如下菜单项:打印、打印预览、页面设置。3.8.1打印对话框PrintDialogWPF实现一组新的丰富的打印和打印系统管理API,使用WPF打印对话框PrintDialog可以很容易地完成打印功能。其常用方法如下:ShowDialog():用此方法打开对话框,单击打印按钮,返回true。publicvoidPrinVisual(Visualvisual,stringdescription):打印参数1指定非文本可见对象,参数2为打印作业的说明。publicvoidPrintDocument(DocumentPaginatordocumentPaginator,stringdescription):打印参数1指定的DocumentPaginator对象,参数2为打印作业的说明。,3.8.2打印,(40)为Window1窗体菜单的“文件”顶级菜单项的弹出菜单增加菜单项:打印,Name属性为FilePrint_MenuItem,“打印”菜单项单击事件处理函数参考书上p113如果希望编辑的内容和打印的内容基本一致,可以在richTextBox1中放入TextBlock控件,代表一页。TextBlock控件的属性Margin为0,其宽和高为固定值,分别为打印纸的宽和高减去左右边距和上下边距。,3.8.3打印预览,打印预览就是在屏幕上显示打印效果。可使用DocumentViewer控件实现打印预览,须将FlowDocument文档转换为XPS文档。实现打印预览的步骤如下:(41)参照2.19节例2.14方法,添加引用System.Printing和ReachFramework。(42)在Window1.xaml.cs文件头部引用如下命名空间:usingSystem.Printing;usingSystem.Windows.Xps;usingSystem.IO.Packaging;usingSystem.Windows.Xps.Packaging;usingSystem.Windows.Xps.Serialization;,(43)参照3.5节方法,建立打印预览窗体。设定窗体文件名称为PrintPreview.xaml,属性Title=打印预览,在窗体中放置DocumentViewer控件,删除属性Margin,使控件充满客户区。(44)为Window1窗体菜单的“文件”顶级菜单项的弹出菜单增加菜单项:打印预览,Name属性为FilePrintPreview_MenuItem,“打印预览”菜单项单击事件处理函数参见书上p114。,3.9多选项卡页的文本编辑器,VS2008的文件编辑器有多个选项卡页,可以编辑多个文件。可以建立类似VS2008的文件编辑器的文本编辑器。【例3.3】如建立的应用程序选项卡页数固定,每选项卡页显示一行文本,建立这个应用程序的具体实现步骤如下:(1)新建项目。放TabControl控件到子窗体。(2)单击TabControl属性Items右侧标题为的按钮,打开集合编辑器:Items,单击添加按钮,增加2个选项卡页,修改属性Header分别为:第一页,第二页。(3)选中第一页,可以在页中放置控件,例如放置TextBlock控件,属性Text=这是第一个选项卡页。同样在第二页中也放置TextBlock控件,属性Text=这是第二个选项卡页。如果放置RichTextBox控件,可以做成多文档编辑器。XAML标记如下。,(4)运行,可以看到多页,单击每页的标题,可以转换选项卡页。,【例3.4】如设计一个有多个选项卡页文本编辑器,每选项卡页处理一个文档,并能动态增加新选项卡页,关闭当前选项卡页,文本编辑器实现步骤如下:(1)新建项目。放Menu控件到主窗体。为菜单增加顶级菜单项:文件,为其弹出菜单增加4个菜单项:新页、关闭当前页、打开、另存为。(2)为Window1类增加变量记录选项卡编号:intnum;(3)放TabControl控件到子窗体。删除初始选项卡页。(4)为主窗体Window1类增加一个新方法MakeNewTbpage()如下:privateobjectMakeNewTbpage()TabItemtabItem1=newTabItem();tabControl1.Items.Add(tabItem1);tabItem1.Header=第+num.ToString()+页;num+;,Gridgrid1=newGrid();RichTextBoxrichTextBox1=newRichTextBox();richTextBox1.Margin=newThickness(10,10,10,10);grid1.Children.Add(richTextBox1);tabItem1.Content=grid1;tabItem1.Focus();return(object)richTextBox1;(5)为主窗体菜单文件|新页菜单项增加单击事件函数privatevoidMenuItem_Click(objectsender,RoutedEventArgse)MakeNewTbpage();(6)为主窗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应链金融合同中担保资产范围及买卖双方风险分担
- 电力系统检修安全操作协议
- 高层管理人员内部股份转让及股权激励协议
- 2023年辅警招聘报名表
- 大学法学专业试题及答案
- 造价专业面试题目及答案
- 全球化与科技融合的新模式研究-洞察及研究
- 网媒专业考试题及答案
- 检验专业英语试题及答案
- 吊篮租赁公司半年工作总结
- 演唱会招商方案
- 河北信息技术学业水平考试试题集
- 压力容器使用单位安全总监题库
- 创业合伙人五份协议书模板
- 建筑工程消防查验检查表
- 2024-2025学年七年级语文上册第一单元测试卷(统编版2024新教材)
- 应征公民政治审查表
- FZ∕T 71006-2021 山羊绒针织绒线
- 慢性创面的治疗及护理课件
- 2023年上海交通大学招聘考试真题
- YY/T 0003-2023手动病床
评论
0/150
提交评论