2024年10月eventhandler标签(C# webBrowser 在控件里面加载了一个网页, 我在网页里面登录成功之后)

 更新时间:2024-10-12

  ⑴eventhandler标签(C#webBrowser在控件里面加载了一个网页,我在网页里面登录成功之后

  ⑵C#webBrowser在控件里面加载了一个网页,我在网页里面登录成功之后

  ⑶WebBrowserweb=newWebBrowser();web.Navigate(tbUrl.Text);web.Documentpleted+=newWebBrowserDocumentpletedEventHandler(web_Documentpleted);//当网页加载完成时触发该事件,获取网页数据voidweb_Documentpleted(objectsender,WebBrowserDocumentpletedEventArgse){//获取该html页面内的Table标签的内容WebBrowserweb=(WebBrowser)sender;HtmlElementCollectionElementCollection=web.Document.getElementsByTagName_r(“Table“);foreach(HtmlElementiteminElementCollection){textBox.AppendText(item.InnerText+“

  ⑷javascript中eventhandler是什么解释一下~~谢谢

  ⑸就是事件句柄,就是发生了什么事件,执行什么函数.比如《inputtype=“button“value=“创建“onClick=“createTable()“》这里的onclick就是事件.而点击这个按钮后就会执行createTable()这个方法.这个createTable()就是eventhandler而eventhandler是在《script》和《/script》标签对中定义的函数比如《script》functioncreateTable(){//这里写上你的代码}《/script》

  ⑹C#多线程方法控制两个进度条

  ⑺using?System;??using?System.Collections.Generic;??using?System.ponentModel;??using?System.Data;??using?System.Drawing;??using?System.Linq;??using?System.Text;??using?System.Windows.Forms;??using?System.Threading;????namespace?Demo??{??????public?partial?class?Form?:?Form??????{??????????public?Form()??????????{??????????????Initializeponent();??????????}????????????//线程开始的时候调用的委托??????????private?delegate?void?maxValueDelegate(int?maxValue);??????????//线程执行中调用的委托??????????private?delegate?void?nowValueDelegate(int?nowValue);????????????private?void?button_Click(object?sender,?EventArgs?e)??????????{??????????????ThreadMethod?method?=?new?ThreadMethod();??????????????//先订阅一下事件??????????????method.threadStartEvent?+=?new?EventHandler(method_threadStartEvent);??????????????method.threadEvent?+=?new?EventHandler(method_threadEvent);??????????????method.threadEndEvent?+=?new?EventHandler(method_threadEndEvent);????????????????Thread?thread?=?new?Thread(new?ThreadStart(method.runMethod));??????????????thread.Start();??????????}????????????///?《summary》??????????///?线程开始事件,设置进度条最大值??????????///?但是我不能直接操作进度条,需要一个委托来替我完成??????????///?《/summary》??????????///?《param?name=“sender“》ThreadMethod函数中传过来的最大值《/param》??????????///?《param?name=“e“》《/param》??????????void?method_threadStartEvent(object?sender,?EventArgs?e)??????????{??????????????int?maxValue?=?Convert.ToInt(sender);??????????????maxValueDelegate?max?=?new?maxValueDelegate(setMax);??????????????this.Invoke(max,?maxValue);??????????}????????????///?《summary》??????????///?线程执行中的事件,设置进度条当前进度??????????///?但是我不能直接操作进度条,需要一个委托来替我完成??????????///?《/summary》??????????///?《param?name=“sender“》ThreadMethod函数中传过来的当前值《/param》??????????///?《param?name=“e“》《/param》??????????void?method_threadEvent(object?sender,?EventArgs?e)??????????{??????????????int?nowValue?=?Convert.ToInt(sender);??????????????nowValueDelegate?now?=?new?nowValueDelegate(setNow);??????????????this.Invoke(now,?nowValue);??????????}????????????///?《summary》??????????///?线程完成事件??????????///?《/summary》??????????///?《param?name=“sender“》《/param》??????????///?《param?name=“e“》《/param》??????????void?method_threadEndEvent(object?sender,?EventArgs?e)??????????{??????????????MessageBox.Show(“执行已经完成!“);??????????}????????????///?《summary》??????????///?我被委托调用,专门设置进度条最大值的??????????///?《/summary》??????????///?《param?name=“maxValue“》《/param》??????????private?void?setMax(int?maxValue)??????????{??????????????this.progressBar.Maximum?=?maxValue;??????????}????????????///?《summary》??????????///?我被委托调用,专门设置进度条当前值的??????????///?《/summary》??????????///?《param?name=“nowValue“》《/param》??????????private?void?setNow(int?nowValue)??????????{??????????????this.progressBar.Value?=?nowValue;??????????}??????}??????????public?class?ThreadMethod??????{??????????///?《summary》??????????///?线程开始事件??????????///?《/summary》??????????public?event?EventHandler?threadStartEvent;??????????///?《summary》??????????///?线程执行时事件??????????///?《/summary》??????????public?event?EventHandler?threadEvent;??????????///?《summary》??????????///?线程结束事件??????????///?《/summary》??????????public?event?EventHandler?threadEndEvent;????????????public?void?runMethod()??????????{??????????????int?count?=?;??????//执行多少次??????????????threadStartEvent.Invoke(count,?new?EventArgs());//通知主界面,我开始了,count用来设置进度条的最大值??????????????for?(int?i?=?;?i?《?count;?i++)??????????????{??????????????????Thread.Sleep();//休息毫秒,模拟执行大数据量操作??????????????????threadEvent.Invoke(i,?new?EventArgs());//通知主界面我正在执行,i表示进度条当前进度??????????????}??????????????threadEndEvent.Invoke(new?object(),?new?EventArgs());//通知主界面我已经完成了??????????}??????}

  ⑻用VB开发托盘程序很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。程序(附后)用到了Shell_NotifyIcon、SendMessage、CallWindowProc、SetWindowLong等API函数,其中Shell_NotifyIcon是主要的函数,它用来添加、删除、更改系统托盘区(taskbarstatusarea)的图标,所以我们先来看看这个函数的声明和参数:使用API函数之前必须先在程序中声明如下:DeclareFunctionShell_NotifyIconLib“shell.dll“Alias“Shell_NotifyIconA“(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLong其中各参数的意义如下表:参数:意义dwMessage为消息设置值,它可以是以下的几个常数值:、、NIM_ADD=加入图标到系统状态栏中NIM_MODIFY=修改系统状态栏中的图标NIM_DELETE=删除系统状态栏中的图标LpData用以传入NOTIFYICONDATA数据结构变量,其结构如下所示:TypeNOTIFYICONDATAcbSizeAsLong需填入NOTIFYICONDATA数据结构的长度HWndAsLong设置成窗口的句柄UidAsLong为图标所设置的ID值UFlagsAsLong设置uCallbackMessage,hIcon,szTip是否有效UCallbackMessageAsLong消息编号HIconAsLong显示在状态栏上的图标SzTipAsString*提示信息EndType返回值Long,非零表示成功,零表示失败在使用这个API函数之前我们应该先定义结构类型NOTIFYICONDATA:PublicTypeNOTIFYICONDATAcbSizeAsLongHWndAsLongUidAsLongUFlagsAsLongUCallbackMessageAsLongHIconAsLongSzTipAsString*EndType然后定义一个NOTIFYICONDATA的变量TheData来记录设置托盘图标的数据PrivateTheDataAsNOTIFYICONDATA这时我们就可以使用这个函数来设置系统托盘图标了,具体方法如下:、添加图标WithTheData.Uid=.HWnd=frm.HWnd’frm.HWnd是程序主窗体的句柄.cbSize=Len(TheData).HIcon=frm.Icon.Handle’frm.Icon.Handle指向主窗体的图标.UFlags=NIF_ICON.UCallbackMessage=TRAY_CALLBACK’作用是允许返回消息,在下一节中会有详细解释。.UFlags=.UFlagsOrNIF_MESSAGE.cbSize=Len(TheData)EndWithShell_NotifyIconNIM_ADD,TheData’根据前面定义NIM_ADD,设置为“添加模式”,然后添加、删去图标WithTheData.UFlags=EndWithShell_NotifyIconNIM_DELETE,TheData’根据前面定义NIM_DELETE,设置为“删除模式”、更改图标WithTheData.HIcon=pic.Handle’pic是图片狂PictureBox,存放图标文件.UFlags=NIF_ICONEndWithShell_NotifyIconNIM_MODIFY,TheData’根据前面定义NIM_MODIFY,设置为“更改模式”、为图标添加浮动提示信息WithTheData.SzTip=tip&vbNullChar’tip是字符串string,存储提示信息.UFlags=NIF_TIP’指明要对浮动提示进行设置EndWithShell_NotifyIconNIM_MODIFY,TheData’根据前面定义NIM_MODIFY,设置为“修改模式”通过以上几段代码我们就能根据自己需要添加、删除、更改系统托盘图标,并能添加系统图标上的浮动提示信息。但这时的托盘图标是孤立的,我们并不能利用它来控制应用程序的行为,怎么办呢?别急,请往下看……如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹出一个右键菜单。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会恢复到原来的大小。其实实现上述的功能都要依赖于WINDOWS操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按下述文字来理解它。把WINDOWS操作系统看作人的大脑,它接收、处理、并发送各种各样的信息给我们的各个器官(当然是比喻各个应用程序了),也就是说它是消息的中枢。而每个应用程序(甚至每一个按钮、标签、窗体等等统称为窗口)在运行时都会被分配一个窗口过程WINDOWPROC,由这个窗口过程来接收和处理操作系统发来的消息(实际上存在一个消息队列),通常情况下这个窗口过程是由操作系统指定的,它会自动的响应并处理一些WINDOWS消息(如窗体移动、最大化、最小化、错误信息等)。好,到这我们先停一下,提出一个疑问,这些消息能否由我们自己写程序来处理呢?答案是肯定的,不过还得借助API函数的威力了,怎么用?我们还是先看看这些API函数的定义和参数吧。程序中用到了SendMessage、CallWindowProc、SetWindowLong等API函数,其中SendMessage函数的作用是将一条消息发给某个窗口;CallWindowProc函数用来发送消息到一个窗口过程;而使用SetWindowLong函数来为窗口结构中为指定的窗口设置属性。使用API函数之前必须先在程序中声明如下:DeclareFunctionCallWindowProcLib“user“Alias“CallWindowProcA“(ByVallpPrevWndFuncAsLong,ByValHWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLongDeclareFunctionSetWindowLongLib“user“Alias“SetWindowLongA“(ByValHWndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLongPrivateDeclareFunctionSendMessageLib“user“Alias“SendMessageA“(ByValHWndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong其中各参数的意义如下表:CallWindowProc函数参数意义lpPrevWndFuncLong,原来的窗口过程地址HWndLong,窗口句柄MsgLong,发送的消息wParamLong,消息类型,参考wParam参数表lParamLong,依据wParam参数的不同而不同返回值Long,依据发送的消息不同而变化SetWindowLong函数:参数TD》意义hwndLong,欲为其取得信息的窗口的句柄nIndexLong,请参考GetWindowLong函数的nIndex参数的说明dwNewLongLong,由nIndex指定的窗口信息的新值返回值Long,指定数据的前一个值SendMessage函数:参数意义hwndLong,要接收消息的那个窗口的句柄wMsgLong,消息的标识符wParamLong,具体取决于消息lParamAny,具体取决于消息返回值Long,由具体的消息决定我们要自己写程序来处理消息,必须先更改窗口的属性,从原来由默认的窗口过程来处理消息变成由我们自己写的消息处理过程来处理消息。方法是使用SetWindowLong函数来取得默认窗口过程的地址,然后转向为我们自己写的窗口过程的地址,具体的实现方法如下代码:’GWL_WNDPROC获得该窗口的窗口过程的地址,AddressOf是取址函数,NewWindowProc是我们写的过程OldWindowProc=SetWindowLong(frm.HWnd,GWL_WNDPROC,AddressOfNewWindowProc)然后在NewWindowProc函数中写入如下代码,需要注意的是下面代码中红色的TRAY_CALLBACK是由托盘区图标传来的消息,要让托盘图标传回消息,必须在添加托盘图标时指定:PublicFunctionNewWindowProc(ByValHWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong’如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键IfMsg=TRAY_CALLBACKThen’如果点击了左键IflParam=WM_LBUTTONUPThen’而这时窗体的状态是最小化时IfTheForm.WindowState=vbMinimizedThen_’恢复到最小化前的窗体状态TheForm.WindowState=TheForm.LastStateTheForm.SetFocusExitFunctionEndIfEndIf’如果点击了右键IflParam=WM_RBUTTONUPThen’则弹出右键菜单TheForm.PopupMenuTheMenuExitFunctionEndIfEndIf’如果是其他类型的消息则传递给原有默认的窗口函数NewWindowProc=CallWindowProc(OldWindowProc,HWnd,Msg,wParam,lParam)EndFunction这样我们就取得并处理了来自托盘图标的消息,现在的问题是在鼠标右键菜单弹出后,怎么控制程序主窗体的状态,这时我们需要用到SendMessage函数来向主窗体发送最大化、最小化、关闭、移动等消息,具体的代码实现如下,其中HWnd是主窗体的句柄,WM_SYSMAND表示发送的是系统控制类的消息,SC_MOVE、SC_SIZE、SC_RESTORE便是要发送的消息了:’托盘图标右键菜单上的“移动”项被点击时PrivateSubmnuTrayMove_Click()SendMessageHWnd,WM_SYSMAND,SC_MOVE,&EndSub’托盘图标右键菜单上的“恢复”项被点击时PrivateSubmnuTrayRestore_Click()SendMessageHWnd,WM_SYSMAND,SC_RESTORE,&EndSub’托盘图标右键菜单上的“退出”项被点击时PrivateSubmnuTraySize_Click()SendMessageHWnd,WM_SYSMAND,SC_SIZE,&EndSub最后要提醒你,在程序退出时一定要把窗口过程的地址恢复为默认值,同时把托盘图标移去哦。为了学习方便,以下提供了源代码:’---------------------------------------------’使用系统托盘程序演示’---------------------------------------------’程序说明:’这是一个比较完整的使用系统托盘的程序实例,包括’了:添加托盘图标,删除托盘图标,动态改变托盘图标,’为托盘图标添加浮动提示信息,实现托盘图标的鼠标右键’菜单等内容。’-------名称-------------------作用------------’Form主窗体’mnuFile,mnuFileExit文件菜单,菜单项’mnuTray,mnuTrayClose...托盘区右键菜单,菜单项’---------------------------------------------OptionExplicit’LastState变量的作用是标示主窗体原有状态PublicLastStateAsInteger’【VB声明】’PrivateDeclareFunctionSendMessageLib“user“Alias“SendMessageA“(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong’【说明】’调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum,’SendMessageByString是该函数的“类型安全”声明形式’【返回值】’Long,由具体的消息决定’【参数表】’hwnd-----------Long,要接收消息的那个窗口的句柄’wMsg-----------Long,消息的标识符’wParam---------Long,具体取决于消息’lParam---------Any,具体取决于消息PrivateDeclareFunctionSendMessageLib“user“Alias“SendMessageA“(ByValHWndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong’表示发送的是系统命令PrivateConstWM_SYSMAND=&HPrivateConstSC_MOVE=&HF&PrivateConstSC_RESTORE=&HF&PrivateConstSC_SIZE=&HF&’当主窗体加载时PrivateSubForm_Load()’窗体的WindowState属性,返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态’vbNormal(缺省值正常。’VbMinimized最小化(最小化为一个图标’VbMaximized最大化(扩大到最大尺寸IfWindowState=vbMinimizedThenLastState=vbNormalElseLastState=WindowStateEndIf’将图标添加到托盘的函数,参见模块中的解释’注意了这是从主程序到模块的入口,本例中并没有直接调用Shell_NotifyIcon函数AddToTrayMe,mnuTraySetTrayTip“托盘图标演示,点击右键弹出菜单“EndSub’在主窗体Form大小改变时,相应改变右键菜单mnuTray的菜单项的可用属性EnabledPrivateSubForm_Resize()SelectCaseWindowState’如果窗体最小化了,把菜单项“最大化”“恢复”设为可用,’而把“最小化”“移动”“大小”三项设为不可用.’如果这时在托盘图标上点击鼠标右键,会发现不可用项变为灰色CasevbMinimizedmnuTrayMaximize.Enabled=TruemnuTrayMinimize.Enabled=FalsemnuTrayMove.Enabled=FalsemnuTrayRestore.Enabled=TruemnuTraySize.Enabled=False’窗体最大化时CasevbMaximizedmnuTrayMaximize.Enabled=FalsemnuTrayMinimize.Enabled=TruemnuTrayMove.Enabled=FalsemnuTrayRestore.Enabled=TruemnuTraySize.Enabled=False’一般状态下CasevbNormalmnuTrayMaximize.Enabled=TruemnuTrayMinimize.Enabled=TruemnuTrayMove.Enabled=TruemnuTrayRestore.Enabled=FalsemnuTraySize.Enabled=TrueEndSelectIfWindowState《》vbMinimizedThenLastState=WindowStateEndSub’保证在程序退出时删除托盘图标PrivateSubForm_Unload(CancelAsInteger)RemoveFromTrayEndSub’“文件”菜单的“退出”项被点击时PrivateSubmnuFileExit_Click()UnloadMeEndSub’托盘图标右键菜单上的“退出”项被点击时PrivateSubmnuTrayClose_Click()UnloadMeEndSub’托盘图标右键菜单上的“最大化”项被点击时PrivateSubmnuTrayMaximize_Click()WindowState=vbMaximizedEndSub’托盘图标右键菜单上的“最小化”项被点击时PrivateSubmnuTrayMinimize_Click()WindowState=vbMinimizedEndSub’托盘图标右键菜单上的“移动”项被点击时PrivateSubmnuTrayMove_Click()SendMessageHWnd,WM_SYSMAND,_SC_MOVE,&EndSub’托盘图标右键菜单上的“恢复”项被点击时PrivateSubmnuTrayRestore_Click()SendMessageHWnd,WM_SYSMAND,_SC_RESTORE,&EndSub’托盘图标右键菜单上的“退出”项被点击时PrivateSubmnuTraySize_Click()SendMessageHWnd,WM_SYSMAND,_SC_SIZE,&EndSub’-----------------------------------------’以下为模块中的代码:’-----------------------------------------OptionExplicitPublicOldWindowProcAsLongPublicTheFormAsFormPublicTheMenuAsMenu’【VB声明】’DeclareFunctionCallWindowProcLib“user“Alias“CallWindowProcA“(ByVallpPrevWndFuncAsLong,ByValHWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong’【说明】’此函数发送消息到一个窗口过程’【返回值】’Long,依据发送的消息不同而变化’【参数表】’lpPrevWndFunc-----Long,原来的窗口过程地址’HWnd--------------Long,窗口句柄’Msg--------------Long,发送的消息’wParam-----------Long,消息类型,参考wParam参数表’lParam-----------Long,依据wParam参数的不同而不同DeclareFunctionCallWindowProcLib“user“Alias“CallWindowProcA“(ByVallpPrevWndFuncAsLong,ByValHWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong’【VB声明】’PrivateDeclareFunctionSetWindowLongLib“user“Alias“SetWindowLongA“(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong’【说明】’在窗口结构中为指定的窗口设置信息’【返回值】’Long,指定数据的前一个值’【参数表】’hwnd-----------Long,欲为其取得信息的窗口的句柄’nIndex---------Long,请参考GetWindowLong函数的nIndex参数的说明’dwNewLong------Long,由nIndex指定的窗口信息的新值DeclareFunctionSetWindowLongLib“user“Alias“SetWindowLongA“(ByValHWndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong’【VB声明】’DeclareFunctionShell_NotifyIconLib“shell.dll“Alias“Shell_NotifyIconA“(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLong’【说明】’【参数表】’参数dwMessage----为消息设置值,它可以是以下的几个常数值:、、’NIM_ADD=加入图标到系统状态栏中’NIM_MODIFY=修改系统状态栏中的图标’NIM_DELETE=删除系统状态栏中的图标’参数LpData----用以传入NOTIFYICONDATA数据结构变量,我们也需要在“模块“中定义其结构如下:’TypeNOTIFYICONDATA’cbSizeAsLong需填入NOTIFYICONDATA数据结构的长度’HWndAsLong设置成窗口的句柄’UidAsLong为图标所设置的ID值’UFlagsAsLong用来设置以下三个参数uCallbackMessage、hIcon、szTip是否有效’UCallbackMessageAsLong消息编号’HIconAsLong显示在状态栏上的图标’SzTipAsString*提示信息’EndType’----其中参数uCallbackMessage、hIcon、szTip也应在模块中声明为以下的常量:’PublionstNIF_MESSAGE=’PublionstNIF_ICON=’PublionstNIF_TIP=DeclareFunctionShell_NotifyIconLib“shell.dll“Alias“Shell_NotifyIconA“(ByValdwMessageAsLong,lpDataAsNOTIFYICONDATA)AsLongPublionstWM_USER=&HPublionstWM_LBUTTONUP=&HPublionstWM_MBUTTONUP=&HPublionstWM_RBUTTONUP=&HPublionstTRAY_CALLBACK=(WM_USER+&)PublionstGWL_WNDPROC=(-)PublionstGWL_USERDATA=(-)PublionstNIF_ICON=&HPublionstNIF_TIP=&HPublionstNIM_ADD=&HPublionstNIF_MESSAGE=&HPublionstNIM_MODIFY=&HPublionstNIM_DELETE=&H’记录设置托盘图标的数据的数据类型NOTIFYICONDATAPublicTypeNOTIFYICONDATAcbSizeAsLongHWndAsLongUidAsLongUFlagsAsLongUCallbackMessageAsLongHIconAsLongSzTipAsString*EndType’TheData变量记录设置托盘图标的数据PrivateTheDataAsNOTIFYICONDATA’*********************************************’新的窗口过程--主程序中采用SetWindowLong函数改变了窗口函数的地址,消息转向由NewWindowProc处理’*********************************************PublicFunctionNewWindowProc(ByValHWndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong’如果用户点击了托盘中的图标,则进行判断是点击了左键还是右键IfMsg=TRAY_CALLBACKThen’如果点击了左键IflParam=WM_LBUTTONUPThen’而这时窗体的状态是最小化时IfTheForm.WindowState=vbMinimizedThen_’恢复到最小化前的窗体状态TheForm.WindowState=TheForm.LastStateTheForm.SetFocusExitFunctionEndIfEndIf’如果点击了右键IflParam=WM_RBUTTONUPThen’则弹出右键菜单TheForm.PopupMenuTheMenuExitFunctionEndIfEndIf’如果是其他类型的消息则传递给原有默认的窗口函数NewWindowProc=CallWindowProc(OldWindowProc,HWnd,Msg,wParam,lParam)EndFunction’*********************************************’把主窗体的图标(Form.icon属性可改变添加到托盘中’*********************************************PublicSubAddToTray(frmAsForm,mnuAsMenu)’保存当前窗体和菜单信息SetTheForm=frmSetTheMenu=mnu’GWL_WNDPROC获得该窗口的窗口函数的地址OldWindowProc=SetWindowLong(frm.HWnd,GWL_WNDPROC,AddressOfNewWindowProc)’知识点滴:HWnd属性’返回窗体或控件的句柄。语法:object.HWnd’说明:MicrosoftWindows运行环境,通过给应用程序中的每个窗体和控件’分配一个句柄(或hWnd来标识它们。hWnd属性用于WindowsAPI调用。’将主窗体图标添加在托盘中WithTheData.Uid=’忘了吗?参考一下前面内容,Uid图标的序号,做动画图标有用.HWnd=frm.HWnd.cbSize=Len(TheData).HIcon=frm.Icon.Handle.UFlags=NIF_ICON’指明要对图标进行设置.UCallbackMessage=TRAY_CALLBACK.UFlags=.UFlagsOrNIF_MESSAGE’指明要设置图标或返回信息给主窗体,此句不能省去.cbSize=Len(TheData)’为什么呢?我们需要在添加图标的同时,让其返回信息EndWith’给主窗体,Or的意思是同时进行设置和返回消息Shell_NotifyIconNIM_ADD,TheData’根据前面定义NIM_ADD,设置为“添加模式”EndSub’*********************************************’删除系统托盘中的图标’*********************************************PublicSubRemoveFromTray()’删除托盘中的图标WithTheData.UFlags=EndWithShell_NotifyIconNIM_DELETE,TheData’根据前面定义NIM_DELETE,设置为“删除模式”’恢复原有的设置SetWindowLongTheForm.HWnd,GWL_WNDPROC,OldWindowProcEndSub’*********************************************’为托盘中的图标加上浮动提示(也就是鼠标移上去时出现的提示字条’*********************************************PublicSubSetTrayTip(tipAsString)WithTheData.SzTip=tip&vbNullChar.UFlags=NIF_TIP’指明要对浮动提示进行设置EndWithShell_NotifyIconNIM_MODIFY,TheData’根据前面定义NIM_MODIFY,设置为“修改模式”EndSub’*********************************************’设置托盘的图标(在本例中没有用到,如果要动态改变托盘内显示的图标,它非常有用’例如:、显示动画图标(方法你一定猜到了,对!使用Timer控件,不断调用此过程,注意把动画放在pic数组中’、程序处于不同状态时,显示不同的图标,方法是类似的’有兴趣的话试一试吧。’*********************************************PublicSubSetTrayIcon(picAsPicture)’判断一下pic中存放的是不是图标Ifpic.Type《》vbPicTypeIconThenExitSub’更换图标为pic中存放的图标WithTheData.HIcon=pic.Handle.UFlags=NIF_ICONEndWithShell_NotifyIconNIM_MODIFY,TheDataEndSub参考资料:

  ⑼C#编程窗体上有一个按钮,通过鼠标在窗体上不同的地方拖动,按钮跟着鼠标拖动请问在Mous

  ⑽你需要把鼠标的位置拿过来,代码是这样的。

  ⑾在窗体中定义两个变量

  ⑿Point?mouseOff;//鼠标移动位置变量??bool?leftFlag;//标签是否为左键

  ⒀this.MouseMove?+=?new?MouseEventHandler(MainWindow_MouseMove);????????????this.MouseDown?+=?new?MouseEventHandler(MainWindow_MouseDown);????????????this.MouseUp?+=?new?MouseEventHandler(LoginForm_MouseUp);

  ⒁private?void?MainWindow_MouseDown(object?sender,?MouseEventArgs?e)????????{????????????if?(e.Button?==?MouseButtons.Left)????????????{????????????????mouseOff?=?new?Point(-e.X,?-e.Y);?//得到变量的值????????????????leftFlag?=?true;??????????????????//点击左键按下时标注为true;????????????}????????}????????private?void?MainWindow_MouseMove(object?sender,?MouseEventArgs?e)????????{????????????if?(leftFlag)????????????{????????????????Point?mouseSet?=?Control.MousePosition;????????????????mouseSet.Offset(mouseOff.X,?mouseOff.Y);??//设置移动后的位置????????????????Location?=?mouseSet;????????????}????????}????????private?void?LoginForm_MouseUp(object?sender,?MouseEventArgs?e)????????{????????????if?(leftFlag)????????????{????????????????leftFlag?=?false;//释放鼠标后标注为false;????????????}????????}

  ⒂C#自定义控件内的子控件和父控件间事件怎么传递

  ⒃假设你的控件名称为UserControl,控件生各个Label的名称依次为label,label,……

  ⒄在控件UserControl后台代码中,对每个标签的Click事件编程

  ⒅public?partial?class?UserControl?:?UserControl??{????????public?UserControl()????????{????????????Initializeponent();????????}????????private?void?label_Click(object?sender,?EventArgs?e)????????{????????????base.OnClick(e);????????}????????private?void?label_Click(object?sender,?EventArgs?e)????????{????????????base.OnClick(e);????????}????????//有多少个标签,就重复多少次!????????//……}

  ⒆这样,UserControl布置在窗体上后,鼠标点击任何一个标签,都会引发UserControl的Click事件

  ⒇C#基础,如何实现多次点击标签,事件仍然触发

  ⒈简单的方法,你放两个标签,l,l,弹窗体写个方法,点L的时候先隐藏L,显示L,再弹窗体,再次点击的时候,这个时候实际上点的是L,你再调用事件,这样切换点,外观上是看不出来的,嘿嘿,当然这只是偷懒的方法,你还可以写线程,这个就有点难了

  ⒉计算机证书校验码怎么弄的

  ⒊计算机验证码制作方法/步骤/分步阅读在网页左侧有一个用户登录的界面,为防止恶意攻击,我们需要用户在登录的时候输入验证码,本节我们就讲述一下如何制作验证码图片?/代码【《imgid=“Img“src=我们用图片标签,链接一个验证码页面?/在【new】文件夹上单击右键,选择【新建项】?/选择【Web窗体】命名为【image.aspx】点击【添加】?/Web窗体设计器生成的代码overrideprotectedvoidOnInit(EventArgse){////CODEGEN:该调用是ASP.Web窗体设计器所必需的。//Initializeponent();base.OnInit(e);}///《summary》///设计器支持所需的方法-不要使用代码器修改///此方法的内容。///《/summary》privatevoidInitializeponent(){this.Load+=newSystem.EventHandler(this.Page_Load);}?/生成数字和字母的代码【privatestringCreateAuthStr(intlen){intnumber;StringBuildercode=newStringBuilder();stringcheckCode=String.Empty;Randomrandom=newRandom();for(inti=;i《len;i++){number=random.Next();if(number%==){code.Append((char)(’’+(char)(number%)));}else{code.Append((char)(’A’+(char)(number%)));}}checkCode=code.ToString();Response.Cookies.Add(newHttpCookie(“CheckCode“,checkCode));returncheckCode.ToString();}】?/为了防止被其他软件识别出验证码,我们需要增加图片的背景噪音线和前景噪音点?/因为代码比较多,也特别复杂,天使直接附上代码,同学们直接用我的就行了usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.IO;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Text;usingSystem.Text.RegularExpressions;publicpartialclass_Default:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){//this.CreateCheckCodeImage(CreateAuthStr());this.CreateCheckCodeImage(CreateAuthStr(,true));}#regionWeb窗体设计器生成的代码overrideprotectedvoidOnInit(EventArgse){////CODEGEN:该调用是ASP.Web窗体设计器所必需的。//Initializeponent();base.OnInit(e);}///《summary》///设计器支持所需的方法-不要使用代码器修改///此方法的内容。///《/summary》privatevoidInitializeponent(){this.Load+=newSystem.EventHandler(this.Page_Load);}#endregionprivatestringCreateAuthStr(intlen){intnumber;StringBuildercode=newStringBuilder();stringcheckCode=String.Empty;Randomrandom=newRandom();for(inti=;i《len;i++){number=random.Next();if(number%==){code.Append((char)(’’+(char)(number%)));}else{code.Append((char)(’A’+(char)(number%)));}}checkCode=code.ToString();Response.Cookies.Add(newHttpCookie(“CheckCode“,checkCode));returncheckCode.ToString();}privatestringCreateAuthStr(intlen,boolOnlyNum){if(!OnlyNum){returnCreateAuthStr(len);}intnumber;stringcheckCode=String.Empty;StringBuildercode=newStringBuilder();Randomrandom=newRandom();for(inti=;i《len;i++){number=random.Next();code.Append((char)(’’+(char)(number%)));}checkCode=code.ToString();Response.Cookies.Add(newHttpCookie(“CheckCode“,checkCode));returncheckCode.ToString();}privatevoidCreateCheckCodeImage(stringcheckCode){if(checkCode==null||checkCode.Trim()==String.Empty)return;Bitmapimage=newBitmap((int)Math.Ceiling((checkCode.Length*.)),);Graphicsg=Graphics.FromImage(image);try{//生成随机生成器Randomrandom=newRandom();//清空图片背景色g.Clear(Color.White);//画图片的背景噪音线for(inti=;i《;i++){intx=random.Next(image.Width);intx=random.Next(image.Width);inty=random.Next(image.Height);inty=random.Next(image.Height);g.DrawLine(newPen(Color.Silver),x,y,x,y);}Fontfont=newSystem.Drawing.Font(“Arial“,,(System.Drawing.FontStyle.Bold|System.Drawing.FontStyle.Italic));System.Drawing.DrawingD.LinearGradientBrushbrush=newSystem.Drawing.DrawingD.LinearGradientBrush(newRectangle(,,image.Width,image.Height),Color.Blue,Color.DarkRed,.f,true);g.DrawString(checkCode,font,brush,,);//画图片的前景噪音点for(inti=;i《;i++){intx=random.Next(image.Width);inty=random.Next(image.Height);image.SetPixel(x,y,Color.FromArgb(random.Next()));}//画图片的边框线g.DrawRectangle(newPen(Color.Silver),,,image.Width-,image.Height-);System.IO.MemoryStreamms=newSystem.IO.MemoryStream();image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);Response.ClearContent();Response.ContentType=“image/Gif“;Response.BinaryWrite(ms.ToArray());}finally{g.Dispose();image.Dispose();}}}/验证码已经生成,刷新一次自动生成一次

  ⒋c#.请问如何给tancontrol中的tabpage添加一个关闭事件,让在关闭tabpage时发生该事件

  ⒌C#重绘TabControl的Tabpage标签,添加图片及关闭按钮以下就是C#重绘TabControl控件的源码:usingSystem;usingSystem.Collections.Generic;usingSystem.ponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceTabControlTest{publicpartialclassForm:Form{publicForm(){Initializeponent();}constintCLOSE_SIZE=;//tabPage标签图片Bitmapimage=newBitmap(“E:\\.jpg“);//绘制“X”号即关闭按钮privatevoidMainTabControl_DrawItem(objectsender,DrawItemEventArgse){try{RectanglemyTabRect=this.MainTabControl.GetTabRect(e.Index);//先添加TabPage属性e.Graphics.DrawString(this.MainTabControl.TabPages.Text,this.Font,SystemBrushes.ControlText,myTabRect.X+,myTabRect.Y+);//再画一个矩形框using(Penp=newPen(Color.White)){myTabRect.Offset(myTabRect.Width-(CLOSE_SIZE+),);myTabRect.Width=CLOSE_SIZE;myTabRect.Height=CLOSE_SIZE;e.Graphics.DrawRectangle(p,myTabRect);}//填充矩形框Colorreolor=e.State==DrawItemState.Selected?Color.White:Color.White;using(Brushb=newSolidBrush(reolor)){e.Graphics.FillRectangle(b,myTabRect);}//画关闭符号using(Penobjpen=newPen(Color.Black)){//““线Pointp=newPoint(myTabRect.X+,myTabRect.Y+);Pointp=newPoint(myTabRect.X+myTabRect.Width-,myTabRect.Y+myTabRect.Height-);e.Graphics.DrawLine(objpen,p,p);//“/“线Pointp=newPoint(myTabRect.X+,myTabRect.Y+myTabRect.Height-);Pointp=newPoint(myTabRect.X+myTabRect.Width-,myTabRect.Y+);e.Graphics.DrawLine(objpen,p,p);////=============================================Bitmapbt=newBitmap(image);Pointp=newPoint(myTabRect.X-,);e.Graphics.DrawImage(bt,p);//e.Graphics.DrawString(this.MainTabControl.TabPages.Text,this.Font,objpen.Brush,p);}//绘制小图标//==============================================================================//Bitmapbt=newBitmap(“E:\\.jpg“);//Pointp=newPoint(,);////e.Graphics.DrawImage(bt,e.Bounds);//e.Graphics.DrawImage(bt,p);//Penpt=newPen(Color.Red);////e.Graphics.DrawString(this.MainTabControl.TabPages.Text,this.Font,pt.Brush,e.Bounds);//e.Graphics.DrawString(this.MainTabControl.TabPages.Text,this.Font,pt.Brush,p);e.Graphics.Dispose();}catch(Exception){}}//=======================================================================//关闭按钮功能privatevoidMainTabControl_MouseDown(objectsender,MouseEventArgse){if(e.Button==MouseButtons.Left){intx=e.X,y=e.Y;//计算关闭区域RectanglemyTabRect=this.MainTabControl.GetTabRect(this.MainTabControl.SelectedIndex);myTabRect.Offset(myTabRect.Width-(CLOSE_SIZE+),);myTabRect.Width=CLOSE_SIZE;myTabRect.Height=CLOSE_SIZE;//如果鼠标在区域内就关闭选项卡boolisClose=x》myTabRect.X&&x《myTabRect.Right&&y》myTabRect.Y&&y《myTabRect.Bottom;if(isClose==true){this.MainTabControl.TabPages.Remove(this.MainTabControl.SelectedTab);}}}//初始化页面privatevoidForm_Load(objectsender,EventArgse){//清空控件//this.MainTabControl.TabPages.Clear();//绘制的方式OwnerDrawFixed表示由窗体绘制大小也一样this.MainTabControl.DrawMode=TabDrawMode.OwnerDrawFixed;this.MainTabControl.Padding=newSystem.Drawing.Point(CLOSE_SIZE,CLOSE_SIZE);this.MainTabControl.DrawItem+=newDrawItemEventHandler(this.MainTabControl_DrawItem);this.MainTabControl.MouseDown+=newSystem.Windows.Forms.MouseEventHandler(this.MainTabControl_MouseDown);}//添加新的tabPage并修改所有tabPage标签上面的图片privatevoidbutton_Click(objectsender,EventArgse){TabPagetabtage=newTabPage();MainTabControl.TabPages.Add(tabtage);MainTabControl.SelectedTab=tabtage;image=newBitmap(“E:\\.jpg“);}//关闭选中的tabPageprivatevoidbutton_Click(objectsender,EventArgse){MainTabControl.TabPages.Remove(MainTabControl.SelectedTab);}}}C#重绘TabControl的Tabpage标签,添加图片及关闭按钮就像你介绍到这里了,希望对你有所帮助。

您可能感兴趣的文章:

相关文章