110,533
社区成员
发帖
与我相关
我的任务
分享
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>显示</title>
<script src="jquery-1.5.2.min.js" type="text/javascript"></script>
<style type="text/css">
.BarNow
{
font-size:26px;
color:Blue;
}
</style>
<script language="javascript" type="text/javascript">
function ShowCode(source) {
$("#message").html(source);
}
</script>
</head>
<body>
<div id="message"></div>
</body>
</html>
//订阅者
public interface Subscriber
{
void ShowMsg(string Msg);
}
public static class Message
{
static IList<Subscriber> Subscribers = new List<Subscriber>();
public static void Add(Subscriber sub)
{
Subscribers.Add(sub);
}
public static void Delete(Subscriber sub)
{
Subscribers.Remove(sub);
}
public static void AssignMessage(string Msg)
{
foreach (var sub in Subscribers)
{
sub.ShowMsg(Msg);
}
}
//调用Send发送消息给订阅者
public static void Send(string message)
{
AssignMessage(message);
}
}
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class Child : Form ,Subscriber
{
public Child(string name)
{
InitializeComponent();
test();
}
private void test()
{
webBrowser1.Navigate(HtmlPath+"Page.html");
webBrowser1.ObjectForScripting = this;
Message.Add(this);//订阅消息
}
//显示消息给html
public void ShowMsg(string Msg)
{
//检查消息是否接收到,得到接收的消息为;这是测试消息!
Label1.Text = Msg;
object[] objects = new object[10];
objects[0] = "<span class=\"BarNow\">" + Msg + "</span>";
webBrowser1.Document.InvokeScript("ShowCode", objects);
//通过订阅者的方式调用出现InvalidCastException异常。提示数字转换异常??
//通过button调用却是正常显示!!
}
private void Child_FormClosing(object sender, FormClosingEventArgs e)
{
Message.Delete(this);//取消订阅
Dispose();
}
//用窗体上button直接调用ShowMsg() 消息能正常显示消息
private void Button1_Click(object sender, EventArgs e)
{
//object[] objects = new object[1];
//objects[0] = "<span class=\"BarNow\">Adflsfjaslnlu</span>";
//webBrowser1.Document.InvokeScript("ShowCode", objects);
ShowMsg("这是测试消息!"); //直接用button调用成功。
}
foreach (string child in childs)
{
if (!string.IsNullOrEmpty(child))
{
Child childForm = new Child(child)
{
AccessibleName = child,
Text = child,
MdiParent = this ,
ShowInTaskbar=false,
ShowIcon=false
};
childForm.Show();
}
}
public delegate void CallBackMsg(string Msg);
#region
public CallBackMsg cbm;
public form1()
{
InitializeComponent();
cbm = SetMsg;
webBrowser1.Navigate(Common.HtmlPath + "Page.htm");
webBrowser1.ObjectForScripting = this;
}
private void SetMsg(string Msg)
{
webBrowser1.Document.InvokeScript("ShowMsg", new string[] { Msg });
}
#endregion
public void ShowMsg(string Msg)
{
webBrowser1.Invoke(cbm, Msg);
}