我正在管理各种联系信息 - 电话,地址,电子邮件,IM,其他我希望它看起来不错并节省空间,所以我想在WebBrowser控件中显示它。我可以动态地将标记和内容创建到流中,并以任何格式显示它,颜色和字体大小可以轻松调整。我还可以将按钮<input>
添加到“添加”,“编辑”和“删除”。我喜欢这种方法,因为它似乎比RichTextBox更容易和更好看(如果你不这么认为,请纠正我。)
问题是关于响应这些按钮。如果选择了一个,我想隐藏WebBrowser并取消隐藏Panel,其中包含允许输入新联系人或编辑现有联系人所需的TextBox控件。我听说这可以做到。我希望得到一些建议。所有我能想到的是一些代码来获取一个AJAX调用,这会引发一个Windows事件,但这看起来很奇怪。
任何想法,链接或建议都会受到赞赏..甚至是一个很好的理由,为什么不这样做,但它似乎是高质量信息呈现的好主意,我已经动态生成了大量的HTML。
答案 0 :(得分:11)
您可以使用JavaScript操纵Form
和Controls
或从WebBrowser
调用C#方法,还可以操纵WebBrowser
控件的内容或从C#调用JavaScript方法。
要操纵Form
来自WebBrowser
控件并调用C#方法并访问表单属性,您应该使用[ComVisibleAttribute(true)]
修饰表单,然后将表单设置为ObjectForScripting
WebBrowser
控件的属性。
[ComVisibleAttribute(true)]
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
this.webBrowser1.ObjectForScripting = this;
}
}
然后,您可以通过这种方式简单地调用方法和访问窗口元素:
从JavaScript调用C#方法:
window.external.SomeCSMethod('Method called from JavaScript');
从JavaScript设置WinForms控件的值:
通过使用desginer将textBox1
属性的值设置为Form
,使Modifier
上的public
控件公开。然后可以从JavaScript访问它:
window.external.textBox1.Text='Value set from JavaScript';
您可以使用C#代码处理Web浏览器控件的html内容,并使用WebBrowser
控件的Document
属性方法调用JavaScript方法或设置html元素的值:
从C#调用JavaScript方法:
this.webBrowser1.Document.InvokeScript("someJSMethod", new []{"Method called from C#"});
从C#设置Html控件的值:
this.webBrowser1.Document.GetElementById("text1")
.SetAttribute("Value set from C#", "Value From C#");
示例代码:
您可以创建一个Form1
课程,并将button1
和button2
以及textBox1
和webBrowser1
放在Form
上{{1} } Modifer
公开:
textBox1