using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; namespace Project { public partial class MessageWindow { public enum eWindowPosition { center = 0, top = 1, bottom = 2 } public enum eWindowType { information, error, attention, } fMsgWindow msgwin; public MessageWindow() { msgwin = new fMsgWindow(""); msgwin.VisibleChanged += msgwin_VisibleChanged; } public bool needClose = false; public Boolean needShow = false; private CMessageData msgBuffer = new CMessageData(); public void setMessage(CMessageData msgData) { //마지막데잍와 동일하고 버퍼에 데이터가 있다면 처리하지 않는다. if (msgBuffer == msgData) return; //신규 메세지를 추가 msgBuffer = msgData; //화면이 표시되어야하므로 플래그 설정 needShow = true; } public void setMessage(string msg,string tag, eWindowType winType = eWindowType.error, int width = 900, int height = 500, Boolean enbClose = true, Font fontTitle = null, Font fontBody = null) { setMessage(new CMessageData() { Tag = tag, EnableClose = enbClose, FontContent = fontBody, FontTitle = fontTitle, Message = msg, WindowSize = new Size(width, height), WindowType = winType }); } public void setMessage(string msg, eWindowType winType = eWindowType.error, int width = 900, int height = 500, Boolean enbClose = true, Font fontTitle = null, Font fontBody = null) { setMessage(new CMessageData() { EnableClose = enbClose, FontContent = fontBody, FontTitle = fontTitle, Message = msg, WindowSize = new Size(width, height), WindowType = winType }); } /// /// 메세지 버퍼의 내용을 폼으로 표시합니다. /// UI 쓰레드를 사용하므로 invoke 를 이용해 호출 하거나 /// UI 쓰레드내에서 실행 하시기 바랍니다. /// public void showMessage() { //개체가 없어졌다면 새로생성해서 사용한다 if (msgwin == null || msgwin.Disposing || msgwin.IsDisposed) { msgwin = new fMsgWindow(""); msgwin.VisibleChanged += msgwin_VisibleChanged; } //등록된 메세지 버퍼의 내용을 화면에 표시한다. msgwin.TopMost = true; // msgwin.Disposed += (s1, e1) => { CloseMsg(item.Key); }; msgwin.Width = this.msgBuffer.WindowSize.Width; msgwin.Height = msgBuffer.WindowSize.Height; msgwin.BackColor = Color.FromArgb(200, 200, 200); msgwin.StartPosition = FormStartPosition.CenterScreen; msgwin.setMessage(msgBuffer.Message); //set font if (msgBuffer.FontTitle != null) msgwin.lbTitle.Font = msgBuffer.FontTitle; if (msgBuffer.FontContent != null) { msgwin.lb1.Font = msgBuffer.FontContent; msgwin.lb2.Font = msgBuffer.FontContent; msgwin.lb3.Font = msgBuffer.FontContent; msgwin.lb4.Font = msgBuffer.FontContent; msgwin.lb5.Font = msgBuffer.FontContent; msgwin.lb6.Font = msgBuffer.FontContent; msgwin.lb7.Font = msgBuffer.FontContent; } switch (msgBuffer.WindowType) { case eWindowType.attention: msgwin.lbTitle.BackColor = Color.Gold; msgwin.lbTitle.BackColor2 = Color.Khaki; msgwin.lbTitle.ShadowColor = Color.FromArgb(150, 150, 150); msgwin.lbTitle.ForeColor = Color.FromArgb(50, 50, 50); break; case eWindowType.error: msgwin.lbTitle.BackColor = Color.Tomato; msgwin.lbTitle.BackColor2 = Color.Red; msgwin.lbTitle.ShadowColor = Color.FromArgb(50, 50, 50); msgwin.lbTitle.ForeColor = Color.WhiteSmoke; break; default: msgwin.lbTitle.BackColor = Color.DarkTurquoise; msgwin.lbTitle.BackColor2 = Color.LightSkyBlue; msgwin.lbTitle.ShadowColor = Color.FromArgb(50, 50, 50); msgwin.lbTitle.ForeColor = Color.WhiteSmoke; break; } if (!msgBuffer.EnableClose) msgwin.EnableUserClose = false; if (msgwin.Visible == false) msgwin.Show(); else { msgwin.Visible = true; msgwin.Activate(); } needShow = false; needClose = false; //닫히게되어잇다면 그것을 off해줘야 다시 닫히지 않음 200923 } /// /// sende는 CMessageData /// public event EventHandler WindowClose; /// /// sender는 CMessageData /// public event EventHandler WindowOpen; void msgwin_VisibleChanged(object sender, EventArgs e) { var f = sender as Form; if (f.Visible == false) { if (WindowClose != null) WindowClose(msgBuffer, new EventArgs()); } else { if (WindowOpen != null) WindowOpen(msgBuffer, new EventArgs()); } } public Boolean Visible { get { if (msgwin == null || msgwin.Disposing || msgwin.IsDisposed) return false; return msgwin.Visible; } set { if (msgwin == null || msgwin.Disposing || msgwin.IsDisposed) { needShow = false; needClose = false; return; } if (value == true) { if (msgwin.Visible == false) { msgwin.Show(); msgwin.Activate(); } else { msgwin.Activate(); } needShow = false; } else { msgwin.Visible = false; needClose = false; } } } } }