我想重建WinForms应用程序的MessageBox.Show()的“外观和感觉”。
使用“look& feel”我的意思是使用我已经实现的ShowMessage方法的逻辑来调用MessageBox.Show()命令。
我目前的代码隐藏:
public partial class Testpage : System.Web.UI.Page
{
public enum MessageBoxIcon { Information, Error, Warning }
protected void Page_Load(object sender, EventArgs e)
{
ShowMessage("Testmessage", MessageBoxIcon.Error, ex);
}
private void ShowMessage(string title, string message, MessageBoxIcon type, Exception ex)
{
if (type == MessageBoxIcon.Information)
{
pnlMsgBox.CssClass = "MessageBoxInformation";
imgMsgBox.ImageUrl = "Resources/img/icon/MessageBoxIcon.Information.png";
}
else if (type == MessageBoxIcon.Warning)
{
pnlMsgBox.CssClass = "MessageBoxWarning";
imgMsgBox.ImageUrl = "Resources/img/icon/MessageBoxIcon.Warning.png";
}
else if (type == MessageBoxIcon.Error)
{
pnlMsgBox.CssClass = "MessageBoxError";
imgMsgBox.ImageUrl = "Resources/img/icon/MessageBoxIcon.Error.png";
}
else
throw new NotImplementedException();
lblMsgBox.Text = "<span style=\"font-size: large;\">" + title + "</span><br /><br />" + message;
#if (DEBUG)
if (ex != null)
lblMsgBox.Text += "<br /><br /><b>Debug information:</b> " + ex.Message;
#endif
pnlMsgBox.Visible = true;
updPnl.Update();
}
}
我想打电话给这样的话:
protected void Page_Load(object sender, EventArgs e)
{
MessageBox.Show("Testmessage", MessageBoxIcon.Error, ex);
}
但是
public static class MessageBox : Testpage
{
public static void Show(string message)
{
// do stuff with the page controls.
}
}
无法正常工作,因为Testpage不是静态的。
有人对我有一些建议吗?
答案 0 :(得分:1)
将评论读到上一个答案,我想下一步:
很难从分离的静态类访问当前页面上下文。那么,我推荐做下一步:
定义下一个界面:
public interface IMessageBoxContainer
{
UpdatePanel UpdatePanel { get; }
Label Label { get; }
}
并按照您的页面实施他:
public partial class _Default : System.Web.UI.Page, IMessageBoxContainer
{
protected void Page_Load(object sender, EventArgs e)
{
}
public UpdatePanel UpdatePanel
{
get { return updatePanel1; }
}
public Label Label
{
get { return label1; }
}
}
此步骤可让您随时随地访问自己的网页。之后实现MessageBox非静态类:
public class MessageBox
{
private IMessageBoxContainer container = null;
public MessageBox(IMessageBoxContainer _container)
{
container = _container;
}
public void Show(string message)
{
container.Label.Text = message;
container.UpdatePanel.Update();
}
}
为什么要非静电?如果您将容器字段设置为静态并在页面中的任何位置设置值(例如在Page_Load中),当另一个页面将加载时,您的容器属性将重置。但如果没有此字段,指向当前页面的指针,则无法访问您的特定控件。
之后,您可以像这样使用您的课程:
protected void Button1_Click(object sender, EventArgs e)
{
var box = new MessageBox(this);
box.ShowMessage("hello world");
}
所以,你得到了MessageBox的独立实现逻辑,并且使用了他,是吗?但不合时宜,它是非静态的。
答案 1 :(得分:0)
试试这样:
public static class MessageBox
{
public static void Show(string message)
{
HttpContext.Current.Response.Write(string.Format("<script>alert('{0}');</script>", message));
}
}
当然,您需要实现自己正确的JavaScript以在客户端显示MessageBox。但我认为 - 你接近是错误的。对于方法编程,请尝试查看ASP.NET MVC,因为经典ASP.NET不完全支持JavaScript编码。