winform 消息通讯组件实习
生活随笔
收集整理的這篇文章主要介紹了
winform 消息通讯组件实习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在項目上要做一個消息推送的組件,實習醫生站和護士站通訊的組件,醫生站開立醫囑后通知護士需要審核醫囑,會診醫囑審核之后通知會診醫生會診,我相信在其他項目上也會用到,在這里先總結一下,留著備用。廢話少說,直奔主題。
? 第一步,創建l兩個個表,如果不用表也可以用xml存。
? ? ? ?腳步如下:
? ?
1 -- Create table 2 create table COM_SYS_MSG 3 ( 4 msg_id NUMBER(10) not null, 5 msg_title VARCHAR2(50), 6 msg_content VARCHAR2(100), 7 publisher VARCHAR2(6), 8 publish_time DATE, 9 limited_area VARCHAR2(50) default 'ALL', 10 is_valid CHAR(1) default '0', 11 extend1 VARCHAR2(100), 12 extend2 VARCHAR2(100), 13 extend3 VARCHAR2(100), 14 role_area VARCHAR2(50) default 'ALL' 15 ) 16 tablespace USERS 17 pctfree 10 18 initrans 1 19 maxtrans 255 20 storage 21 ( 22 initial 192K 23 next 1M 24 minextents 1 25 maxextents unlimited 26 ); 27 -- Add comments to the table 28 comment on table COM_SYS_MSG 29 is '系統消息表,用于群發消息'; 30 -- Add comments to the columns 31 comment on column COM_SYS_MSG.msg_id 32 is '消息編碼'; 33 comment on column COM_SYS_MSG.msg_title 34 is '消息標題'; 35 comment on column COM_SYS_MSG.msg_content 36 is '消息內容'; 37 comment on column COM_SYS_MSG.publisher 38 is '消息發布者'; 39 comment on column COM_SYS_MSG.publish_time 40 is '消息發布時間'; 41 comment on column COM_SYS_MSG.limited_area 42 is '限制范圍:缺省為ALL——全部范圍'; 43 comment on column COM_SYS_MSG.is_valid 44 is '是否有效,0-無效,1-有效,缺省發布消息為0,需要確認發布才更新為1'; 45 comment on column COM_SYS_MSG.extend1 46 is '審核人'; 47 comment on column COM_SYS_MSG.extend2 48 is '接收科室'; 49 comment on column COM_SYS_MSG.role_area 50 is '角色范圍:缺省為ALL——全部范圍'; 51 -- Create/Recreate indexes 52 create index IDX_CSM_TIME on COM_SYS_MSG (PUBLISH_TIME) 53 tablespace USERS 54 pctfree 10 55 initrans 2 56 maxtrans 255 57 storage 58 ( 59 initial 64K 60 next 1M 61 minextents 1 62 maxextents unlimited 63 ); 64 -- Create/Recreate primary, unique and foreign key constraints 65 alter table COM_SYS_MSG 66 add constraint PK_COM_SYS_MSG primary key (MSG_ID) 67 using index 68 tablespace USERS 69 pctfree 10 70 initrans 2 71 maxtrans 255 72 storage 73 ( 74 initial 64K 75 next 1M 76 minextents 1 77 maxextents unlimited 78 ); 1 -- Create table 2 create table COM_IP_MSG 3 ( 4 ip_address VARCHAR2(50) not null, 5 last_view_time DATE, 6 extend1 VARCHAR2(100), 7 extend2 VARCHAR2(100), 8 extend3 VARCHAR2(100) 9 ) 10 tablespace USERS 11 pctfree 10 12 initrans 1 13 maxtrans 255 14 storage 15 ( 16 initial 64K 17 next 1M 18 minextents 1 19 maxextents unlimited 20 ); 21 -- Add comments to the table 22 comment on table COM_IP_MSG 23 is '每個IP地址的最后獲取消息記錄'; 24 -- Add comments to the columns 25 comment on column COM_IP_MSG.ip_address 26 is 'IP地址'; 27 comment on column COM_IP_MSG.last_view_time 28 is '最后獲取消息的時間'; 29 -- Create/Recreate primary, unique and foreign key constraints 30 alter table COM_IP_MSG 31 add constraint PK_CIM_IP primary key (IP_ADDRESS) 32 using index 33 tablespace USERS 34 pctfree 10 35 initrans 2 36 maxtrans 255 37 storage 38 ( 39 initial 64K 40 next 1M 41 minextents 1 42 maxextents unlimited 43 );?
?第二步:
? ? 創建彈窗代碼
? ?1、準備兩張資源圖片文件
? ? 效果如下:
?
?2,代碼實現:
? ?
// C# TaskbarNotifier Class v1.0 // by John O'Byrne - 02 december 2002 // 01 april 2003 : Small fix in the OnMouseUp handler // 11 january 2003 : Patrick Vanden Driessche <pvdd@devbrains.be> added a few enhancements // Small Enhancements/Bugfix // Small bugfix: When Content text measures larger than the corresponding ContentRectangle // the focus rectangle was not correctly drawn. This has been solved. // Added KeepVisibleOnMouseOver // Added ReShowOnMouseOver // Added If the Title or Content are too long to fit in the corresponding Rectangles, // the text is truncateed and the ellipses are appended (StringTrimming).using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Windows.Forms; using System.Runtime.InteropServices;namespace MyTaskbarNotifier {/// <summary>/// TaskbarNotifier allows to display MSN style/Skinned instant messaging popups/// </summary>public class TaskbarNotifier : System.Windows.Forms.Form{#region TaskbarNotifier Protected Membersprotected Bitmap BackgroundBitmap = null;protected Bitmap CloseBitmap = null;protected Point CloseBitmapLocation;protected Size CloseBitmapSize;protected Rectangle RealTitleRectangle;protected Rectangle RealContentRectangle;protected Rectangle WorkAreaRectangle;protected Timer timer = new Timer();protected TaskbarStates taskbarState = TaskbarStates.hidden;protected string titleText;protected string contentText;protected Color normalTitleColor = Color.FromArgb(255,0,0);protected Color hoverTitleColor = Color.FromArgb(255,0,0);protected Color normalContentColor = Color.FromArgb(0,0,0);protected Color hoverContentColor = Color.FromArgb(0,0,0x66);protected Font normalTitleFont = new Font("Arial",12,FontStyle.Regular,GraphicsUnit.Pixel);protected Font hoverTitleFont = new Font("Arial",12,FontStyle.Bold,GraphicsUnit.Pixel);protected Font normalContentFont = new Font("Arial",11,FontStyle.Regular,GraphicsUnit.Pixel);protected Font hoverContentFont = new Font("Arial",11,FontStyle.Regular,GraphicsUnit.Pixel);protected int nShowEvents;protected int nHideEvents;protected int nVisibleEvents;protected int nIncrementShow;protected int nIncrementHide;protected bool bIsMouseOverPopup = false;protected bool bIsMouseOverClose = false;protected bool bIsMouseOverContent = false;protected bool bIsMouseOverTitle = false;protected bool bIsMouseDown = false;protected bool bKeepVisibleOnMouseOver = true; // Added Rev 002protected bool bReShowOnMouseOver = false; // Added Rev 002#endregion#region TaskbarNotifier Public Memberspublic Rectangle TitleRectangle;public Rectangle ContentRectangle;public bool TitleClickable = false;public bool ContentClickable = true;public bool CloseClickable = true;public bool EnableSelectionRectangle = true;public event EventHandler CloseClick = null;public event EventHandler TitleClick = null;public event EventHandler ContentClick = null;#endregion#region TaskbarNotifier Enums/// <summary>/// List of the different popup animation status/// </summary>public enum TaskbarStates{hidden = 0,appearing = 1,visible = 2,disappearing = 3}#endregion#region TaskbarNotifier Constructor/// <summary>/// The Constructor for TaskbarNotifier/// </summary>public TaskbarNotifier(){// Window StyleFormBorderStyle = FormBorderStyle.None;WindowState = FormWindowState.Minimized;base.Show();base.Hide();WindowState = FormWindowState.Normal;ShowInTaskbar = false;TopMost = true;MaximizeBox = false;MinimizeBox = false;ControlBox = false;timer.Enabled = true;timer.Tick += new EventHandler(OnTimer);}#endregion#region TaskbarNotifier Properties/// <summary>/// Get the current TaskbarState (hidden, showing, visible, hiding)/// </summary>public TaskbarStates TaskbarState{get{return taskbarState;}}/// <summary>/// Get/Set the popup Title Text/// </summary>public string TitleText{get{return titleText;}set{titleText=value;Refresh();}}/// <summary>/// Get/Set the popup Content Text/// </summary>public string ContentText{get{return contentText;}set{contentText=value;Refresh();}}/// <summary>/// Get/Set the Normal Title Color/// </summary>public Color NormalTitleColor{get{return normalTitleColor;}set{normalTitleColor = value;Refresh();}}/// <summary>/// Get/Set the Hover Title Color/// </summary>public Color HoverTitleColor{get{return hoverTitleColor;}set{hoverTitleColor = value;Refresh();}}/// <summary>/// Get/Set the Normal Content Color/// </summary>public Color NormalContentColor{get{return normalContentColor;}set{normalContentColor = value;Refresh();}}/// <summary>/// Get/Set the Hover Content Color/// </summary>public Color HoverContentColor{get{return hoverContentColor;}set{hoverContentColor = value;Refresh();}}/// <summary>/// Get/Set the Normal Title Font/// </summary>public Font NormalTitleFont{get{return normalTitleFont;}set{normalTitleFont = value;Refresh();}}/// <summary>/// Get/Set the Hover Title Font/// </summary>public Font HoverTitleFont{get{return hoverTitleFont;}set{hoverTitleFont = value;Refresh();}}/// <summary>/// Get/Set the Normal Content Font/// </summary>public Font NormalContentFont{get{return normalContentFont;}set{normalContentFont = value;Refresh();}}/// <summary>/// Get/Set the Hover Content Font/// </summary>public Font HoverContentFont{get{return hoverContentFont;}set{hoverContentFont = value;Refresh();}}/// <summary>/// Indicates if the popup should remain visible when the mouse pointer is over it./// Added Rev 002/// </summary>public bool KeepVisibleOnMousOver{get{return bKeepVisibleOnMouseOver;}set{bKeepVisibleOnMouseOver=value;}}/// <summary>/// Indicates if the popup should appear again when mouse moves over it while it's disappearing./// Added Rev 002/// </summary>public bool ReShowOnMouseOver{get{return bReShowOnMouseOver;}set{bReShowOnMouseOver=value;}}#endregion#region TaskbarNotifier Public Methods[DllImport("user32.dll")]private static extern Boolean ShowWindow(IntPtr hWnd,Int32 nCmdShow);/// <summary>/// Displays the popup for a certain amount of time/// </summary>/// <param name="strTitle">The string which will be shown as the title of the popup</param>/// <param name="strContent">The string which will be shown as the content of the popup</param>/// <param name="nTimeToShow">Duration of the showing animation (in milliseconds)</param>/// <param name="nTimeToStay">Duration of the visible state before collapsing (in milliseconds)</param>/// <param name="nTimeToHide">Duration of the hiding animation (in milliseconds)</param>/// <returns>Nothing</returns>public void Show(string strTitle, string strContent, int nTimeToShow, int nTimeToStay, int nTimeToHide){WorkAreaRectangle = Screen.GetWorkingArea(WorkAreaRectangle);titleText = strTitle;contentText = strContent;nVisibleEvents = nTimeToStay;CalculateMouseRectangles();// We calculate the pixel increment and the timer value for the showing animationint nEvents;if (nTimeToShow > 10){nEvents = Math.Min((nTimeToShow / 10), BackgroundBitmap.Height);nShowEvents = nTimeToShow / nEvents;nIncrementShow = BackgroundBitmap.Height / nEvents;}else{nShowEvents = 10;nIncrementShow = BackgroundBitmap.Height;}// We calculate the pixel increment and the timer value for the hiding animationif( nTimeToHide > 10){nEvents = Math.Min((nTimeToHide / 10), BackgroundBitmap.Height);nHideEvents = nTimeToHide / nEvents;nIncrementHide = BackgroundBitmap.Height / nEvents;}else{nHideEvents = 10;nIncrementHide = BackgroundBitmap.Height;}switch (taskbarState){case TaskbarStates.hidden:taskbarState = TaskbarStates.appearing;SetBounds(WorkAreaRectangle.Right-BackgroundBitmap.Width-17, WorkAreaRectangle.Bottom-1, BackgroundBitmap.Width, 0);timer.Interval = nShowEvents;timer.Start();// We Show the popup without stealing focusShowWindow(this.Handle, 4);break;case TaskbarStates.appearing:Refresh();break;case TaskbarStates.visible:timer.Stop();timer.Interval = nVisibleEvents;timer.Start();Refresh();break;case TaskbarStates.disappearing:timer.Stop();taskbarState = TaskbarStates.visible;SetBounds(WorkAreaRectangle.Right-BackgroundBitmap.Width-17, WorkAreaRectangle.Bottom-BackgroundBitmap.Height-1, BackgroundBitmap.Width, BackgroundBitmap.Height);timer.Interval = nVisibleEvents;timer.Start();Refresh();break;}}/// <summary>/// Hides the popup/// </summary>/// <returns>Nothing</returns>public new void Hide(){if (taskbarState != TaskbarStates.hidden){timer.Stop();taskbarState = TaskbarStates.hidden;base.Hide();}}/// <summary>/// Sets the background bitmap and its transparency color/// </summary>/// <param name="strFilename">Path of the Background Bitmap on the disk</param>/// <param name="transparencyColor">Color of the Bitmap which won't be visible</param>/// <returns>Nothing</returns>public void SetBackgroundBitmap(string strFilename, Color transparencyColor){BackgroundBitmap = new Bitmap(strFilename);Width = BackgroundBitmap.Width;Height = BackgroundBitmap.Height;Region = BitmapToRegion(BackgroundBitmap, transparencyColor);}/// <summary>/// Sets the background bitmap and its transparency color/// </summary>/// <param name="image">Image/Bitmap object which represents the Background Bitmap</param>/// <param name="transparencyColor">Color of the Bitmap which won't be visible</param>/// <returns>Nothing</returns>public void SetBackgroundBitmap(Image image, Color transparencyColor){BackgroundBitmap = new Bitmap(image);Width = BackgroundBitmap.Width;Height = BackgroundBitmap.Height;Region = BitmapToRegion(BackgroundBitmap, transparencyColor);}/// <summary>/// Sets the 3-State Close Button bitmap, its transparency color and its coordinates/// </summary>/// <param name="strFilename">Path of the 3-state Close button Bitmap on the disk (width must a multiple of 3)</param>/// <param name="transparencyColor">Color of the Bitmap which won't be visible</param>/// <param name="position">Location of the close button on the popup</param>/// <returns>Nothing</returns>public void SetCloseBitmap(string strFilename, Color transparencyColor, Point position){CloseBitmap = new Bitmap(strFilename);CloseBitmap.MakeTransparent(transparencyColor);CloseBitmapSize = new Size(CloseBitmap.Width/3, CloseBitmap.Height);CloseBitmapLocation = position;}/// <summary>/// Sets the 3-State Close Button bitmap, its transparency color and its coordinates/// </summary>/// <param name="image">Image/Bitmap object which represents the 3-state Close button Bitmap (width must be a multiple of 3)</param>/// <param name="transparencyColor">Color of the Bitmap which won't be visible</param>/// /// <param name="position">Location of the close button on the popup</param>/// <returns>Nothing</returns>public void SetCloseBitmap(Image image, Color transparencyColor, Point position){CloseBitmap = new Bitmap(image);CloseBitmap.MakeTransparent(transparencyColor);CloseBitmapSize = new Size(CloseBitmap.Width/3, CloseBitmap.Height);CloseBitmapLocation = position;}#endregion#region TaskbarNotifier Protected Methodsprotected void DrawCloseButton(Graphics grfx){if (CloseBitmap != null){ Rectangle rectDest = new Rectangle(CloseBitmapLocation, CloseBitmapSize);Rectangle rectSrc;if (bIsMouseOverClose){if (bIsMouseDown)rectSrc = new Rectangle(new Point(CloseBitmapSize.Width*2, 0), CloseBitmapSize);elserectSrc = new Rectangle(new Point(CloseBitmapSize.Width, 0), CloseBitmapSize);} elserectSrc = new Rectangle(new Point(0, 0), CloseBitmapSize);grfx.DrawImage(CloseBitmap, rectDest, rectSrc, GraphicsUnit.Pixel);}}protected void DrawText(Graphics grfx){if (titleText != null && titleText.Length != 0){StringFormat sf = new StringFormat();sf.Alignment = StringAlignment.Near;sf.LineAlignment = StringAlignment.Center;sf.FormatFlags = StringFormatFlags.NoWrap;sf.Trimming = StringTrimming.EllipsisCharacter; // Added Rev 002if (bIsMouseOverTitle)grfx.DrawString(titleText, hoverTitleFont, new SolidBrush(hoverTitleColor), TitleRectangle, sf);elsegrfx.DrawString(titleText, normalTitleFont, new SolidBrush(normalTitleColor), TitleRectangle, sf);}if (contentText != null && contentText.Length != 0){StringFormat sf = new StringFormat();sf.Alignment = StringAlignment.Center;sf.LineAlignment = StringAlignment.Center;sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;sf.Trimming = StringTrimming.Word; // Added Rev 002if (bIsMouseOverContent){grfx.DrawString(contentText, hoverContentFont, new SolidBrush(hoverContentColor), ContentRectangle, sf);if (EnableSelectionRectangle)ControlPaint.DrawBorder3D(grfx, RealContentRectangle, Border3DStyle.Etched, Border3DSide.Top | Border3DSide.Bottom | Border3DSide.Left | Border3DSide.Right);}elsegrfx.DrawString(contentText, normalContentFont, new SolidBrush(normalContentColor), ContentRectangle, sf);}}protected void CalculateMouseRectangles(){Graphics grfx = CreateGraphics();StringFormat sf = new StringFormat();sf.Alignment = StringAlignment.Center;sf.LineAlignment = StringAlignment.Center;sf.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;SizeF sizefTitle = grfx.MeasureString(titleText, hoverTitleFont, TitleRectangle.Width, sf);SizeF sizefContent = grfx.MeasureString(contentText, hoverContentFont, ContentRectangle.Width, sf);grfx.Dispose();// Added Rev 002//We should check if the title size really fits inside the pre-defined title rectangleif (sizefTitle.Height > TitleRectangle.Height){RealTitleRectangle = new Rectangle(TitleRectangle.Left, TitleRectangle.Top, TitleRectangle.Width , TitleRectangle.Height );} else{RealTitleRectangle = new Rectangle(TitleRectangle.Left, TitleRectangle.Top, (int)sizefTitle.Width, (int)sizefTitle.Height);}RealTitleRectangle.Inflate(0,2);// Added Rev 002//We should check if the Content size really fits inside the pre-defined Content rectangleif (sizefContent.Height > ContentRectangle.Height){RealContentRectangle = new Rectangle((ContentRectangle.Width-(int)sizefContent.Width)/2+ContentRectangle.Left, ContentRectangle.Top, (int)sizefContent.Width, ContentRectangle.Height );}else{RealContentRectangle = new Rectangle((ContentRectangle.Width-(int)sizefContent.Width)/2+ContentRectangle.Left, (ContentRectangle.Height-(int)sizefContent.Height)/2+ContentRectangle.Top, (int)sizefContent.Width, (int)sizefContent.Height);}RealContentRectangle.Inflate(0,2);}protected Region BitmapToRegion(Bitmap bitmap, Color transparencyColor){if (bitmap == null)throw new ArgumentNullException("Bitmap", "Bitmap cannot be null!");int height = bitmap.Height;int width = bitmap.Width;GraphicsPath path = new GraphicsPath();for (int j=0; j<height; j++ )for (int i=0; i<width; i++){if (bitmap.GetPixel(i, j) == transparencyColor)continue;int x0 = i;while ((i < width) && (bitmap.GetPixel(i, j) != transparencyColor))i++;path.AddRectangle(new Rectangle(x0, j, i-x0, 1));}Region region = new Region(path);path.Dispose();return region;}#endregion#region TaskbarNotifier Events Overridesprotected void OnTimer(Object obj, EventArgs ea){switch (taskbarState){case TaskbarStates.appearing:if (Height < BackgroundBitmap.Height)SetBounds(Left, Top-nIncrementShow ,Width, Height + nIncrementShow);else{timer.Stop();Height = BackgroundBitmap.Height;timer.Interval = nVisibleEvents;taskbarState = TaskbarStates.visible;timer.Start();}break;case TaskbarStates.visible:timer.Stop();timer.Interval = nHideEvents;// Added Rev 002if ((bKeepVisibleOnMouseOver && !bIsMouseOverPopup ) || (!bKeepVisibleOnMouseOver)){taskbarState = TaskbarStates.disappearing;} //taskbarState = TaskbarStates.disappearing; // Rev 002timer.Start();break;case TaskbarStates.disappearing:// Added Rev 002if (bReShowOnMouseOver && bIsMouseOverPopup) {taskbarState = TaskbarStates.appearing;} else {if (Top < WorkAreaRectangle.Bottom)SetBounds(Left, Top + nIncrementHide, Width, Height - nIncrementHide);elseHide();}break;}}protected override void OnMouseEnter(EventArgs ea){base.OnMouseEnter(ea);bIsMouseOverPopup = true;Refresh();}protected override void OnMouseLeave(EventArgs ea){base.OnMouseLeave(ea);bIsMouseOverPopup = false;bIsMouseOverClose = false;bIsMouseOverTitle = false;bIsMouseOverContent = false;Refresh();}protected override void OnMouseMove(MouseEventArgs mea){base.OnMouseMove(mea);bool bContentModified = false;if ( (mea.X > CloseBitmapLocation.X) && (mea.X < CloseBitmapLocation.X + CloseBitmapSize.Width) && (mea.Y > CloseBitmapLocation.Y) && (mea.Y < CloseBitmapLocation.Y + CloseBitmapSize.Height) && CloseClickable ){if (!bIsMouseOverClose){bIsMouseOverClose = true;bIsMouseOverTitle = false;bIsMouseOverContent = false;Cursor = Cursors.Hand;bContentModified = true;}}else if (RealContentRectangle.Contains(new Point(mea.X, mea.Y)) && ContentClickable){if (!bIsMouseOverContent){bIsMouseOverClose = false;bIsMouseOverTitle = false;bIsMouseOverContent = true;Cursor = Cursors.Hand;bContentModified = true;}}else if (RealTitleRectangle.Contains(new Point(mea.X, mea.Y)) && TitleClickable){if (!bIsMouseOverTitle){bIsMouseOverClose = false;bIsMouseOverTitle = true;bIsMouseOverContent = false;Cursor = Cursors.Hand;bContentModified = true;}}else{if (bIsMouseOverClose || bIsMouseOverTitle || bIsMouseOverContent)bContentModified = true;bIsMouseOverClose = false;bIsMouseOverTitle = false;bIsMouseOverContent = false;Cursor = Cursors.Default;}if (bContentModified)Refresh();}protected override void OnMouseDown(MouseEventArgs mea){base.OnMouseDown(mea);bIsMouseDown = true;if (bIsMouseOverClose)Refresh();}protected override void OnMouseUp(MouseEventArgs mea){base.OnMouseUp(mea);bIsMouseDown = false;if (bIsMouseOverClose){Hide();if (CloseClick != null)CloseClick(this, new EventArgs());}else if (bIsMouseOverTitle){if (TitleClick != null)TitleClick(this, new EventArgs());}else if (bIsMouseOverContent){if (ContentClick != null)ContentClick(this, new EventArgs());}}protected override void OnPaintBackground(PaintEventArgs pea){Graphics grfx = pea.Graphics;grfx.PageUnit = GraphicsUnit.Pixel;Graphics offScreenGraphics;Bitmap offscreenBitmap;offscreenBitmap = new Bitmap(BackgroundBitmap.Width, BackgroundBitmap.Height);offScreenGraphics = Graphics.FromImage(offscreenBitmap);if (BackgroundBitmap != null){offScreenGraphics.DrawImage(BackgroundBitmap, 0, 0, BackgroundBitmap.Width, BackgroundBitmap.Height);}DrawCloseButton(offScreenGraphics);DrawText(offScreenGraphics);grfx.DrawImage(offscreenBitmap, 0, 0);}#endregionprivate void InitializeComponent(){this.SuspendLayout();// // TaskbarNotifier// this.BackColor = System.Drawing.Color.White;this.ClientSize = new System.Drawing.Size(284, 262);this.Name = "TaskbarNotifier";this.ResumeLayout(false);}} }第三步,調用:
? ? ? ?1,在您需要顯示的窗體里面添加一個定時器,
? ? ? 代碼如下:
? ? ?
private System.Windows.Forms.Timer timer1;this.timer1 = new System.Windows.Forms.Timer(this.components);this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 在構造函數里面添加代碼:
? ? ?
?
? ? 2,初始化TaskbarNotifier?
代碼如下:
#region 初始化彈窗 taskbarNotifier.SetBackgroundBitmap(MytaskbarNotifier.Properties.Resources.skin3, Color.FromArgb(255, 0, 255));taskbarNotifier.SetCloseBitmap(MytaskbarNotifier.Properties.Resources.close, Color.FromArgb(255, 0, 255), new Point(280, 57));taskbarNotifier.TitleRectangle = new Rectangle(150, 57, 125, 28);taskbarNotifier.ContentRectangle = new Rectangle(75, 92, 215, 55);taskbarNotifier.CloseClickable = true;taskbarNotifier.TitleClickable = false;taskbarNotifier.ContentClickable = true;taskbarNotifier.EnableSelectionRectangle = true;taskbarNotifier.KeepVisibleOnMousOver = true;taskbarNotifier.ReShowOnMouseOver = false;taskbarNotifier.ContentClick += new EventHandler(taskbarNotifier_ContentClick);#endregion? ? ? ? ? ? ? ? ? ?
void taskbarNotifier_ContentClick(object sender, EventArgs e) { return;//暫時不用此功能 }?
3
顯示代碼實習: /// <summary>/// 逐條顯示消息/// </summary>/// <param name="dsMessage"></param>private void DisplayMessage(DataRow dsMessage){try{Int32 msgID = Convert.ToInt32(dsMessage[0].ToString());string msgTitle = dsMessage[1].ToString();string msgContent = dsMessage[2].ToString();string msgPublisherCode = dsMessage[3].ToString();string msgPublisherName = dsMessage[4].ToString();DateTime msgPublishTime = Convert.ToDateTime(dsMessage[5].ToString());string msgLimitedArea = dsMessage[6].ToString();string msgIsValid = dsMessage[7].ToString();string msgExtend1 = dsMessage[8].ToString();string msgExtend2 = dsMessage[9].ToString();string msgExtend3 = dsMessage[10].ToString();string msgRoleArea = dsMessage[11].ToString();string displayTitle = msgTitle;string displayContent = msgContent + "\n\r" + msgPublisherName + "[" + msgPublisherCode + "]" + msgPublishTime;taskbarNotifier.Show(displayTitle, displayContent, 500, delayTime, 500);System.Threading.Thread.Sleep(500);this.timer1.Start();}catch{this.timer1.Stop();}}實現定時器事件代碼:
decimal validTime = 1m; //系統消息有效時間int refreshTime = 5000; //刷新數據庫時間int delayTime = 5000; //提示窗口停留時間int intervalTime = 10000; //間隔顯示時間DataSet dsMessage = new DataSet(); /// <summary>/// Timer/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timer1_Tick(object sender, EventArgs e){try{this.timer1.Stop();if (dsMessage == null || dsMessage.Tables.Count == 0 || dsMessage.Tables[0].Rows.Count == 0){ // 獲取系統消息按照權限獲取要顯示的消息table//todo sql實現 SELECT COM_SYS_MSG.MSG_ID,COM_SYS_MSG.MSG_TITLE,COM_SYS_MSG.MSG_CONTENT,COM_SYS_MSG.PUBLISHER,(SELECT COM_EMPLOYEE.EMPL_NAMEFROM COM_EMPLOYEEWHERE COM_EMPLOYEE.EMPL_CODE = COM_SYS_MSG.PUBLISHER) empl_name,COM_SYS_MSG.PUBLISH_TIME,COM_SYS_MSG.LIMITED_AREA,COM_SYS_MSG.IS_VALID,COM_SYS_MSG.EXTEND1,COM_SYS_MSG.EXTEND2,COM_SYS_MSG.EXTEND3,COM_SYS_MSG.ROLE_AREA FROM COM_SYS_MSG WHERE COM_SYS_MSG.LIMITED_AREA = 'ALL' AND (COM_SYS_MSG.ROLE_AREA = '{2}' or '{1}'='ALL') AND COM_SYS_MSG.IS_VALID = '1' and (COM_SYS_MSG.Extend2='{1}' or '{1}'='ALL') AND COM_SYS_MSG.PUBLISH_TIME>= ( SELECT COM_IP_MSG.LAST_VIEW_TIME FROM COM_IP_MSG WHERE COM_IP_MSG.IP_ADDRESS = '{0}') ORDER BY COM_SYS_MSG.PUBLISH_TIME?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
}if (dsMessage != null && dsMessage.Tables[0].Rows.Count > 0){if (dsMessage.Tables[0].Rows.Count == 1){//只剩最后一條時DateTime msgPublishTime = msgPublishTime = Convert.ToDateTime(dsMessage.Tables[0].Rows[0][5].ToString());this.UpdateViewTime(msgPublishTime);//更新時間
// //UPDATE com_ip_msg //SET com_ip_msg.LAST_VIEW_TIME = to_date('{1}','yyyy-mm-dd hh24:mi:ss') //WHERE com_ip_msg.IP_ADDRESS = '{0}'
this.timer1.Interval = refreshTime;
}
else
{
this.timer1.Interval = intervalTime;
}
this.DisplayMessage(dsMessage.Tables[0].Rows[0]);
dsMessage.Tables[0].Rows.RemoveAt(0); this.timer1.Start();
}
else
{
this.timer1.Start();
}
} catch {
this.timer1.Stop();
}
}
整理完畢。
?
轉載于:https://www.cnblogs.com/cegh/p/4123373.html
總結
以上是生活随笔為你收集整理的winform 消息通讯组件实习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DIV+CSS专题:十天学会DIV+CS
- 下一篇: 如何编写无法维护的代码 让自己稳拿铁饭