146 lines
4.4 KiB
C#
146 lines
4.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Project
|
|
{
|
|
public static class MessageWindow
|
|
{
|
|
public enum eWindowPosition
|
|
{
|
|
center = 0,
|
|
top = 1,
|
|
bottom = 2
|
|
}
|
|
public enum eWindowType
|
|
{
|
|
information,
|
|
error,
|
|
attention,
|
|
}
|
|
public enum eMsgNo : byte
|
|
{
|
|
Normal = 0,
|
|
RunMsg,
|
|
DemoMsg,
|
|
ErrorMsg,
|
|
EmgButton, //171214
|
|
RobotStop,//171214
|
|
RetryMsg,
|
|
RemoteMsg,
|
|
}
|
|
private static Dictionary<eMsgNo, Dialog.fMsgWindow> msgBuffer = new Dictionary<eMsgNo, Dialog.fMsgWindow>();
|
|
public static void ShowMsg(string m, eMsgNo id, int width = 1200, int height = 300, eWindowType msgtype = eWindowType.information, Boolean useClose = true, eWindowPosition position = eWindowPosition.center)
|
|
{
|
|
var pform = findForm(id);
|
|
if (pform == null)
|
|
{
|
|
var f = new Dialog.fMsgWindow(m);
|
|
f.TopMost = true;
|
|
f.ID = id;
|
|
f.Disposed += (s1, e1) => { CloseMsg(id); };
|
|
f.Width = width;
|
|
f.Height = height;
|
|
|
|
if (msgtype == eWindowType.attention)
|
|
{
|
|
f.BackColor = Color.Orange;
|
|
f.arLabel1.ForeColor = Color.Orange;
|
|
}
|
|
else if (msgtype == eWindowType.error)
|
|
{
|
|
f.BackColor = Color.Red;
|
|
f.arLabel1.ForeColor = Color.Red;
|
|
}
|
|
else
|
|
{
|
|
f.BackColor = Color.Blue;
|
|
f.arLabel1.ForeColor = Color.DeepSkyBlue;
|
|
}
|
|
|
|
if (!useClose) f.EnableUserClose = false;
|
|
if (position == eWindowPosition.center)
|
|
f.StartPosition = FormStartPosition.CenterScreen;
|
|
else if (position == eWindowPosition.top)
|
|
{
|
|
f.StartPosition = FormStartPosition.Manual;
|
|
f.Left = (Screen.PrimaryScreen.Bounds.Width - f.Width) / 2;
|
|
f.Top = 0;
|
|
}
|
|
else if (position == eWindowPosition.bottom)
|
|
{
|
|
f.StartPosition = FormStartPosition.Manual;
|
|
f.Left = (Screen.PrimaryScreen.Bounds.Width - f.Width) / 2;
|
|
f.Top = Screen.PrimaryScreen.Bounds.Height - f.Height;
|
|
}
|
|
|
|
msgBuffer.Add(id, f);
|
|
f.Show();
|
|
}
|
|
else
|
|
{
|
|
pform.SetText(m);
|
|
if (pform.WindowState == FormWindowState.Minimized) pform.WindowState = FormWindowState.Normal;
|
|
if (!pform.Visible) pform.Visible = true;
|
|
}
|
|
}
|
|
|
|
private static Dialog.fMsgWindow findForm(eMsgNo id)
|
|
{
|
|
var items = msgBuffer.Where(t => t.Key == id);
|
|
if (items.Count() < 1) return null;
|
|
return items.First().Value;
|
|
}
|
|
|
|
public static Boolean ExistForm(eMsgNo id)
|
|
{
|
|
var items = msgBuffer.Where(t => t.Key == id);
|
|
if (items.Count() < 1) return false;
|
|
else return true;
|
|
}
|
|
|
|
public delegate void VisibleHandler(Boolean value);
|
|
public static void VisibleAll(Boolean value)
|
|
{
|
|
if (msgBuffer.Count < 1) return;
|
|
|
|
#region "invoke"
|
|
if (msgBuffer.ElementAt(0).Value.InvokeRequired)
|
|
{
|
|
msgBuffer.ElementAt(0).Value.BeginInvoke(new VisibleHandler(VisibleAll), new object[] { value });
|
|
return;
|
|
}
|
|
#endregion
|
|
|
|
foreach (var form in msgBuffer)
|
|
{
|
|
form.Value.Visible = value;
|
|
}
|
|
}
|
|
|
|
public static void CloseAll()
|
|
{
|
|
|
|
for (int i = msgBuffer.Count; i > 0; i--)
|
|
{
|
|
var form = msgBuffer.ElementAt(i - 1);
|
|
form.Value.Close();
|
|
}
|
|
msgBuffer.Clear();
|
|
}
|
|
public static void CloseMsg(eMsgNo id)
|
|
{
|
|
var pform = findForm(id);
|
|
if (pform != null)
|
|
{
|
|
pform.Close();
|
|
msgBuffer.Remove(id);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|