




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【精品】c学习的心得 C#实现控件随窗体大小自动改变c#xx-12-1617:56:45阅读1207评论0字号大中小订阅using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections;namespace WindowsApplication3public partialclass Form1:Form/*设定程序中可能要用到的用以存储初始数据的动态数组及相关私有变量*/private ArrayListInitialCrl=new ArrayList();/用以存储窗体中所有的控件名称private ArrayListCrlLocationX=new ArrayList();/用以存储窗体中所有的控件原始位置private ArrayListCrlLocationY=new ArrayList();/用以存储窗体中所有的控件原始位置private ArrayListCrlSizeWidth=new ArrayList();/用以存储窗体中所有的控件原始的水平尺寸private ArrayListCrlSizeHeight=new ArrayList();/用以存储窗体中所有的控件原始的垂直尺寸private intFormSizeWidth;/用以存储窗体原始的水平尺寸private intFormSizeHeight;/用以存储窗体原始的垂直尺寸private doubleFormSizeChangedX;/用以存储相关父窗体/容器的水平变化量private doubleFormSizeChangedY;/用以存储相关父窗体/容器的垂直变化量private intWcounter=0;/为防止递归遍历控件时产生混乱,故专门设定一个全局计数器/*/public Form1()InitializeComponent();private voidForm1_Load(object sender,EventArgs e)GetInitialFormSize();/this.AutoScroll=true;/this.SetAutoSizeMode(FormSizeWidth,FormSizeHeight);/this.AutoScrollMinSize.Width=FormSizeWidth;/this.AutoScrollMinSize.Height=FormSizeHeight;GetAllCrlLocation(this);GetAllCrlSize(this);public voidGetAllCrlLocation(Control CrlContainer)/获得并存储窗体中各控件的初始位置foreach(Control iCrlin CrlContainer.Controls)if(iCrl.Controls.Count0)GetAllCrlLocation(iCrl);InitialCrl.Add(iCrl);CrlLocationX.Add(iCrl.Location.X);CrlLocationY.Add(iCrl.Location.Y);public voidGetAllCrlSize(Control CrlContainer)/获得并存储窗体中各控件的初始尺寸foreach(Control iCrlin CrlContainer.Controls)if(iCrl.Controls.Count0)GetAllCrlSize(iCrl);CrlSizeWidth.Add(iCrl.Width);CrlSizeHeight.Add(iCrl.Height);public voidGetInitialFormSize()/获得并存储窗体的初始尺寸FormSizeWidth=this.Size.Width;FormSizeHeight=this.Size.Height;private voidForm1_SizeChanged(object sender,EventArgs e)/MessageBox.Show(窗体尺寸改变);Wcounter=0;int counter=0;if(this.Size.Width0)ResetAllCrlState(kCrl);Point point=new Point();point.X=(int)(int)CrlLocationXWcounter*FormSizeChangedX);point.Y=(int)(int)CrlLocationYWcounter*FormSizeChangedY);kCrl.Width=(int)(int)CrlSizeWidthWcounter*FormSizeChangedX);kCrl.Height=(int)(int)CrlSizeHeightWcounter*FormSizeChangedY);kCrl.Bounds=new Rectangle(point,kCrl.Size);Wcounter+;/MessageBox.Show(Wcounter.ToString();System包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。 其他类提供支持下列操作的服务数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。 System.Collections包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。 System.Collections.Generic包含定义泛型集合的接口和类;泛型集合允许用户创建强类型的集合,这种集合在类型安全和性能上均优于非泛型强类型集合。 System.ComponentModel提供用于实现组件和控件的运行时和设计时行为的类。 此命名空间包括用于属性和类型转换器的实现、数据源绑定和组件授权的基类和接口。 System.Data包含组成大部分ADO.NET结构的类。 ADO.NET结构使您可以生成可用于有效管理多个数据源的数据的组件。 在断开连接的方案(如Inter)中,ADO.NET提供了一些可以在多层系统中请求、更新和协调数据的工具。 ADO.NET结构也可以在客户端应用程序(如Windows窗体)或ASP.NET创建的HTML页中实现。 System.Drawing提供对GDI+基本图形功能的访问。 System.Drawing.Drawing2D、System.Drawing.Imaging和System.Drawing.Text命名空间中提供了更高级的功能。 System.Text包含表示ASCII、Unicode、UTF-7和UTF-8字符编码的类;用于在字符块和字节块之间相互转换的抽象基类;以及不需要创建字符串的中间实例就可以操作和格式化字符串对象的帮助器类。 System.Windows.Forms包含用于创建基于Windows的应用程序的类,这些应用程序可以充分利用Microsoft Windows操作系统中的丰富用户界面功能。 C#多线程(System.Threading)线程的命名空间比如(启用新线程,线程休眠)等操作的1.使用线程的情况.程序需要执行和两个和多个任务.程序要等待某事件的发生例如用户输入、文件操作、网络操作和搜索.后台程序2.多线程的并发执行如果有多个线程在执行,单CPU只有一个,到底执行的哪个?.如果一个线程连续占用CPU资源时间过长,其它的资源得不到执行,则系统会强制的切换执行其它线程。 (强制剥夺).如果一个线程没事可做、CPU可执行其它线程。 (主动放弃).这是由操作系统的调度机制决定的,不同的操作系统调度机制不一样。 一般无法精确的预料多线程的执行顺序,在程序设计的时候应特别注意3.创建并启动线程ThreadStart线程启动委托名=new ThreadStart(方法名);Thread线程实例名=new Thread(线程启动委托名);线程实例名.Start();4.终止线程.线程实例名.Abort();用此方法的后果是不可恢复的终止线程。 .线程实例名.Interrupt();中断后可恢复5.休眠线程.线程实例名.Sleep();当线程Sleep时,系统就立即退出执行队列一段时间,当睡眠结束时,系统会产生一个时钟中断,从而使线程回到执行队列中,从而恢复线程的执行。 6.挂起/恢复线程.线程实例名.Suspend();挂起与线程休眠不同,线程的挂起不会使线程立即停止执行,直到线程到达安全点之后它才可以将该线程挂起,如果线程尚未启动或已经停止,则它将不能挂起。 .线程实例名.Resume();恢复将使一个线程跳出挂起状态并使该线程继续执行。 一个线程不能对另一个线程调用Sleep(),但是一个线程可以对另一个线程调用Suspend()。 还可以使用许多其它的方式来阻塞线程。 例如,可以通过调用Thread.Join使一个线程等待另一个线程(子线程)停止。 使用Monitor.Wait使一个线程等待访问一个同步对象。 7.串行化线程.线程实例名.jion();例如在主线程中插入t.jion();主线程执行到这条语句后,主线程(当前线程)立即进入阻塞状态.直到t运行完后阻塞状态才解除。 相当于把t的任务插入或串联到主线程中,把两条线索串联成一条线索8.线程的锁定机制线程的锁定机制可以保证每次只有一个线程可以访问共享资源。 使用关键字lock.lock语句的语法lock(对象引用)语句块;.lock语句的功能当对象被lock锁定时,访问该线程的其它线程会进入等待的状态。 .对象锁机制保证了对象访问的完整性只有一个线程完成操作后,其它的线程才能进行操作。 .一般情况下,当一个线程写某个变量,而同时可能有其它的线程读或写这个变量时,为了保持数据的一致性应该使用锁定机制。 .线程的安全性线程安全性就是保护的类的成员和代码的安全,从而使他们不会同时被几个线程中断,使用锁定机制。 .多线程公用一个对象时,就不应该使用lock关键字了,这里Monitor,Monitor提供了使线程共享资源的方案。 Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。 如Monitor.Enter(obj);Monitor.Exit(obj);.临界区和锁当谈论多线程应用程序的时候,首先应该想到的就是并发性问题。 尽管这对于同时执行多个任务的程序是很有用的,但通常都是危险的。 为了解决这个问题,在C#中提出了临界区和锁的概念。 在程序设计中,临界区是一块在任何时候只能有一个进程进入的区域。 在C#中通过语句lock来声明临界区。 lock声明后面的代码,不管是以行还是一块代码,在同一时间最多只能有一个进程执行。 9.线程的优先级具有不可靠性,就是说不能用优先级来控制线程的执行顺序。 10.后台线程.什么是后台线程?比起应用程序的主图形用户界面(GUI)线程来说,这些线程以较低的优先权在不同的过程中运行着。 对于不能立即执行结束,又不想一直等待的任务,后台线程能很好的胜任。 在C#中,把线程对象的IsBackground属性设为true,该线程即为后台线程。 后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。 一旦一个进程所有的前台线程都终止后,CLR将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。 注意后台线程不能直接操作所在进程之外的数据引用。 .怎样与后台线程通讯?运用MethodInvoker委派实体。 也可在初始化(构造函数)中加入下面一句即可实现通讯Control.CheckForIllegalCrossThreadCalls=False;要使用MethodInvoker委派,需要三个条件a.一个创建委派的后台线程Thread thread=new Thread(new ThreadStart(Run);thread.IsBackground=true;/把Thread设为后台线程thread.Start();b.一个用作后台线程与前台可视化单元的接口的类级方法public voidRun()int count=0;tryMethodInvoker mi=new MethodInvoker(this.UpdateLabel);/创建一个委托,UpdateLabel是该委托所托管的代码,必须是声明为void且不接受任何参数的任何方法。 while(true)count+;/this.Invoke(mi);/同步执行委托this.BeginInvoke(mi);/异步执行委托Thread.Sleep (500);catch(ThreadInterruptedException e)Console.WriteLine(Interruption Exception in Thread:0,e);catch(Exception ex)Console.WriteLine(ExceptioninThread:0,ex);c.一个应用程序中可以更新的可视化单元public voidUpdateLabel()label1.Text=count.ToString();例1使用多线程实现的打字练习(VSxx)using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;/*编写一个基于Windows窗体的应用程序,实现打字练习功能,要使用多线程,在主线程里用*Timer控件定时产生Label控件,每个Label控件显示一个随机产生的字母,每产生一个Label*就新开一个线程(辅助线程),这个线程用于控制Label控件的向下移动,主线程监视键盘*输入,如果键盘输入文本与这个Label控件的Text相同,Label就消失*/namespace TypewriteExcercisepublic partialclass frmTyped:Formpublic frmTyped()InitializeComponent();private voidfrmTyped_Load(object sender,EventArgs e)timer1.Start();/启动时钟private voidtimer1_Tick(object sender,EventArgs e)Label label=new Label();/创建标签对象label.Width=12;label.Height=12;label.ForeColor=Color.White;/把标签的前景色设为白色label.BackColor=this.BackColor;/把窗体的背景色设置黑色为标签的背景色this.Controls.Add(label);/把标签添加到窗体中System.Random random=new Random(DateTime.Now.Second*DateTime.Now.Second);/当前系统时间的秒数的平方作为随机种子label.Left=random.Next(this.Width);/标签随机数0,窗体的宽度),Letter letter=new Letter(label,this);/把标签和窗体传递给letter对象ThreadStart threadstart=new ThreadStart(letter.Run);/创建线程启动委托,注意括号里面是方法名Thread thread=new Thread(threadstart);/创建线程实例thread.Start();/启动线程private voidfrmTyped_KeyPress(object sender,KeyPressEventArgs e)foreach(Label labelin this.Controls)if(label=null)/没有标签break;/退出if(label.Text0=e.KeyChar)/label.Text返回的是字符串,label.Text0返回第一个字符。 e.KeyChar返回的是字符。 这样都为字符才能判断label.Dispose();/释放由label所使用的所有资源this.Controls.Remove(label);/从frmTyped中移除labelpublic classLetterprivate Label_label;private Form_container;private int_speed=2;public Letter(Label label,Form container)/构造函数接受标签和窗体_label=label;/初始化标签_container=container;/初始化窗体Random random=new Random(DateTime.Now.Second);/使用当前系统时间的秒数作为随机种子_speed=random.Next (5)+1;/产生一个1,6)的随机数用来表示速度_label.Text=Convert.ToChar(65+random.Next (57).ToString();/*a-z的ASCII码97-122A-Z的ASCII码65-90:91:92:93:94_:95:96*/switch(_speed)case1:_label.ForeColor=Color.Red;/将标签的前景色设为红色break;case2:_label.ForeColor=Color.Yellow;break;case3:_label.ForeColor=Color.Blue;break;case4:_label.ForeColor=Color.Green;break;case5:_label.ForeColor=Color.White;break;default:_label.ForeColor=Color.White;break;public voidRun()trywhile(_label.Top=this._container.Height+100)/标签的的上边距小于或等于窗体的高度+100像素if(_label=null)/没有产生标签这种情况Thread.CurrentThread.Abort();/就终止当前的线程_label.Top+=1;/有标签,上边距就加1像素;Thread.Sleep(_speed*5);/让线程休眠(速度越快,休眠的时间越短。 以毫秒为单位);if(Thread.CurrentThread.IsAlive)/如果当前线程还是存活的Thread.CurrentThread.Abort();/就终止当前的线程catch(Exception ex)Console.WriteLine(错误+ex.Message);/获取描述当前异常的消息Console.WriteLine(错误+ex.StackTrace);/获取当前异常发生时调用堆栈上的帧的字符串表达形式finally/释放资源,不管是否发生异常,finally都要五条件的执行if(!_label.Disposing)/如果标签没有释放到进程中_label.Dispose();/释放由标签使用的所有资源_container.Controls.Remove(_label);/移除在窗体中产生的所有标签DllImport(user32.dll)topic.csdn./u/xx0828/16/e4ae4b41-5933-4225-b0cd-1c028d17ad18.html DllImport属性的常见用法。 第一节讨论使用DllImport从托管应用程序调用本机代码的优点。 第二节集中讨论封送处理和DllImport属性的各个方面。 从托管应用程序调用非托管代码当在托管应用程序中重用现有的非托管代码时,DllImport属性非常有用。 例如,托管应用程序可能需要调用非托管WIN32API。 下面的代码示例说明此通用方案,此示例将调用MessageBox(位于User32.lib中)#usingusing namespaceSystem:Runtime:InteropServices;/for DllImportAttributenamespace SysWin32DllImport(user32.dll,EntryPoint=MessageBox,CharSet=Unicode)int MessageBox(void*hWnd,wchar_t*lpText,wchar_t*lpCaption,unsigned intuType);int main()SysWin32:MessageBox(0,LHello world!,LGreetings,0);主要注意包含DllImport的代码行。 此代码行根据参数值通知编译器,使之声明位于User32.dll中的函数并将签名中出现的所有字符串(如参数或返回值)视为Unicode字符串。 如果缺少EntryPoint参数,则默认值为函数名。 另外,由于CharSet参数指定Unicode,因此公共语言运行库将首先查找称为MessageBoxW(有W是因为Unicode规范)的函数。 如果运行库未找到此函数,它将根据调用约定查找MessageBox以及相应的修饰名。 受支持的调用约定只有_cdecl和_stdcall。 当调用用户定义的DLL中所包含的函数时,有必要将externC添加在DLL函数声明之前,如下所示/The functiondeclaration inSampleDLL.h fileexternCSAMPLEDLL_API intfnSampleDLL(void);有关受支持的其他参数值的更多信息,请参见DllImport。 将非结构化参数由托管封送处理为非托管除使用上述方法外,还可以使用另一种方法将托管参数(托管应用程序)封送处理为非托管参数(在非托管DLL中)。 以下代码示例说明封送处理技术#usingusing namespaceSystem;/To bringSystem:String inusing namespaceSystem:Runtime:InteropServices;/for DllImportAttributenamespace SysWin32DllImport(user32.dll,EntryPoint=MessageBox,CharSet=Unicode)Int32MessageBox(Int32hWnd,String*lpText,String*lpCaption,UInt32uType);int main()SysWin32:MessageBox(0,SHello world!,SGreetings,0);常用的三大模块:user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息gdi32.dll gdi32.dll是Windows GDI图形用户界面相关程序,包含的函数用来绘制图像和显示文字kernel32.dll控制着系统的内存管理、数据的输入输出操作和中断处理微软就是靠这三个模块起家的Windows SDK只利用这三个模块就能构建基本的Windows程序C#中实现拖动无边框窗体Form文章录入王子dingkai1983193【字体小大】Point mouseOff;/鼠标移动位置变量bool leftFlag;/标签是否为左键private voidForm1_MouseDown(object sender,MouseEventArgs e)if(e.Button=MouseButtons.Left)mouseOff=new Point(-e.X,-e.Y);/得到变量的值leftFlag=true;/点击左键按下时标注为true;private voidForm1_MouseMove(object sender,MouseEventArgs e)if(leftFlag)Point mouseSet=Control.MousePosition;mouseSet.Offset(mouseOff.X,mouseOff.Y);/设置移动后的位置Location=mouseSet;private voidForm1_MouseUp(object sender,MouseEventArgs e)if(leftFlag)leftFlag=false;/释放鼠标后标注为false;第二种方法实现DllImport(user32.dll)/*拖动无窗体的控件public staticextern boolReleaseCapture();DllImport(user32.dll)public staticextern boolSendMessage(IntPtr hwnd,int wMsg,int wParam,int lParam);public constint WM_SYSMAND=0x0112;public constint SC_MOVE=0xF010;public constint HTCAPTION=0x0002;下面再你要拖动触发的控件里面写上这句话private voidgPanelTitleBack_MouseDown(object sender,MouseEventArgs e)ReleaseCapture();SendMessage(this.Handle,WM_SYSMAND,SC_MOVE+HTCAPTION,0);/*调用移动无窗体控件函数表7.1Runtime提供的标准异常异常类型描述Exception所有异常对象的基类SystemException运行时产生的所有错误的基类IndexOutOfRangeException当一个数组的下标超出范围时运行时引发NullReferenceException当一个空对象被引用时运行时引发InvalidOperationException当对方法的调用对对象的当前状态无效时,由某些方法引发ArgumentException所有参数异常的基类ArgumentNullException在参数为空(不允许)的情况下,由方法引发ArgumentOutOfRangeException当参数不在一个给定范围之内时,由方法引发InteropException目标在或发生在CLR外面环境中的异常的基类ComException包含类的HRESULT信息的异常摘自红色黑客联盟(.7747.)原文.7747./kf/xx10/75948.html C#访问修饰符及各种元素的访问修饰符的默认值文章录入王子dingkai1983163【字体小大】一个编译器错误提示在命名空间中定义的元素无法显示的声明为private,protected,protected internal。 能在命名空间中定义的元素有类(class),结构(struct),委托(delegate),接口(interface),枚举(enum)MSDN提示:protected internal可访问性的意思是受保护“或”内部,而不是受保护“和”内部。 我们的访问修饰符一共有5个级别public,private,protected,internal,protected internal1.命名空间下的元素的默认访问修饰符根据上面的红色错误提示,可以知道命名空间下只能使用两种访问修饰符public和internal。 如果没有显示的给这些元素访问修饰符,其修饰符默认为internal。 public:同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员。 internal:同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。 2.各类型中的成员的默认访问修饰符剩下的修饰符主要是正对继承这个语言特性的,拥有继承的类型有两个类(class)和接口(interface)。 public,internal同样可以用于类型成员。 private:同一类和结构的代码可以访问该类型和成员。 protected:同一类和派生(继承特性)类中的代码可以访问该类型和成员。 protected internal:同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员。 MSDN提示1.)派生类的可访问性不能高于其基类型。 换句话说,不能有从内部类A派生的公共类B。 如果允许这种情况,将会使A成为公共类,因为A的所有受保护的成员或内部成员都可以从派生类访问。 2.)成员的可访问性决不能高于其包含类型的可访问性。 3.)可以使用五种访问类型中的任何一种来声明类成员(包括嵌套的类和结构)。 接口(interface)接口成员访问修饰符默认为public,且不能显示使用访问修饰符。 类(class)构造函数默认为public访问修饰符。 析构函数不能显示使用访问修饰符且默认为private访问修饰符。 类的成员默认访问修饰符为private;枚举(enum)枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。 结构(struct)结构成员默认为private修饰符。 结构成员无法声明为protected成员,因为结构不支持继承。 嵌套类型嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致。 C#指定窗口显示位置文章录入王子dingkai1983148【字体小大】在启动一个程序时,我们希望窗口显示的位置处于屏幕的正中心,可以如下设置MainFormmainForm=newMainForm();mainForm.StartPosition=FormStartPosition.CenterScreen;mainForm.Show();如果在允许操作主窗口之前,必须先登录,则弹出登录窗口。 此时主窗口出现在登录窗口后面,无法进行操作。 MainFormmainForm=newMainForm();LoginFormdlg=newLoginForm();dlg.ShowDialog();这里ShowDialog方法表示你必须先操作完dlg窗口,才能操作后面的主窗体。 如果要登录窗口显示在主窗口的中心,则在显示之前设置如下dlg.StartPosition=FormStartPosition.CenterParent;dlg.ShowDialog();能够这样做的前提是主窗体必须先定义和显示。 否则登录窗体可能无法找到父窗体。 除此之外,也可以手动设置窗口显示的位置,即窗口坐标。 首先必须把窗体的显示位置设置为手动。 dlg.StartPosition=FormStartPosition.Manual;随后获取屏幕的分辨率,也就是显示器屏幕的大小。 intxWidth=SystemInformation.PrimaryMonitorSize.Width;/获取显示器屏幕宽度intyHeight=SystemInformation.PrimaryMonitorSize.Height;/高度然后定义窗口位置,以主窗体为例mainForm.Location=new Point(xWidth/2,yHeight/2);/这里需要再减去窗体本身的宽度和高度的一半mainForm.Show();这样三步之后,一个准确定位在屏幕位置上的窗体就显示出来了。 用Point类时,必须先把它包含进来,在程序最前面写上usingSystem.Drawing;在C#中,实现可拖动控件,并显示控件的坐标位置文章录入王子dingkai1983140【字体小大】private Pointmouse_offset;private voidControl_MouseDown(object sender,System.Windows.Forms.MouseEventArgs e)mouse_offset=new Point(-e.X,-e.Y);private voidControl_MouseMove(object sender,System.Windows.Forms.MouseEventArgs e)if(e.Button=MouseButtons.Left)Point mousePos=Control.MousePosition;mousePos.Offset(mouse_offset.X,mouse_offset.Y);(Control)sender).Location=(Control)sender).Parent.PointToClient(mousePos);this.label1.Text=横坐标:+mouse_offset.X+纵坐标+mouse_offset.Y;摘自红色黑客联盟(.7747.)原文.7747./kf/xx09/75127.html C#实现控件随窗体拖动而自动缩放其大小文章录入王子dingkai1983172【字体小大】C#代码public voidAutoScale(Form frm)frm.Tag=frm.Width.ToString()+,+frm.Height.ToString();frm.SizeChanged+=new EventHandler(frmScreen_SizeChanged);private voidfrmScreen_SizeChanged(object sender,EventArgs e)stringtmp=(Form)sender).Tag.ToString().Split(,);float width=(float)(Form)sender).Width/(float)Convert.ToInt16(tmp0);float heigth=(float)(Form)sender).Height/(float)Convert.ToInt16(tmp1);(Form)sender).Tag=(Form)sender).Width.ToString()+,+(Form)sender).Height;foreach(Control controlin(Form)sender).Controls)control.Scale(new SizeF(width,heigth);public frmScreen()InitializeComponent();AutoScale(this);使用C#将数据从excel文件中导出实例代码文章录入王子7747.Net96【字体小大】使用C#讲数据从excel文件中导出实例代码如下private voiddoExport(DataSet ds1,stringstr)System.Reflection.Missing oMissing=System.Reflection.Missing.Value;_Application xlApp=null;_Workbook xlWorkbook=null;_Worksheet xlWorksheet=null;tryxlApp=new ApplicationClass();xlApp.Visible=true;xlWorkbook=xlApp.Workbooks.Add(oMissing);xlWorksheet=xlWorkbook.Worksheets.Add(oMissing,oMissing,1,oMissing)as_Worksheet;xlWorksheet.Name=福州市盲人按摩单位信息;Excel.Range
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风力发电设备制造行业2025年风电叶片防雷技术报告
- 农村合作社农产品营销策略合作协议
- 1.1《测量气温》(教学设计)-2023-2024学年三年级上册科学大象版
- 吉林长春版《心理健康》六年级上 第十二课 这样攀比要不得 教案
- (2025年标准)花店股份合伙协议书
- 2025年即时配送行业前景分析及投资机遇研究报告
- 2025年旅行社电商O2O行业投资趋势与盈利模式研究报告
- (2025年标准)河北婚姻协议书
- 2025年工业地产行业投资趋势与盈利模式研究报告
- 2025年消防头盔行业前景分析及投资机遇研究报告
- 公共基础知识试题(附答案)
- 2025年湖北省中考语文真题(含答案)
- 2025年四川三支一扶考试公共基础知识试卷
- 战术基础动作低姿匍匐
- TCCEAS001-2022建设项目工程总承包计价规范
- 大学普通化学-课件文档
- 质量成长记-过程模式作业表
- 漆黑的魅影-精灵分布图鉴
- 小学语文分层作业设计
- 《只有一个地球》说课课件课件
- 200T钻具点压校直机技术方案
评论
0/150
提交评论