WebBrowser控件和Windows窗体之间的交互

时间:2016-01-17 03:23:37

标签: c# .net winforms webbrowser-control

我正在管理各种联系信息 - 电话,地址,电子邮件,IM,其他我希望它看起来不错并节省空间,所以我想在WebBrowser控件中显示它。我可以动态地将标记和内容创建到流中,并以任何格式显示它,颜色和字体大小可以轻松调整。我还可以将按钮<input>添加到“添加”,“编辑”和“删除”。我喜欢这种方法,因为它似乎比RichTextBox更容易和更好看(如果你不这么认为,请纠正我。)
问题是关于响应这些按钮。如果选择了一个,我想隐藏WebBrowser并取消隐藏Panel,其中包含允许输入新联系人或编辑现有联系人所需的TextBox控件。我听说这可以做到。我希望得到一些建议。所有我能想到的是一些代码来获取一个AJAX调用,这会引发一个Windows事件,但这看起来很奇怪。 任何想法,链接或建议都会受到赞赏..甚至是一个很好的理由,为什么不这样做,但它似乎是高质量信息呈现的好主意,我已经动态生成了大量的HTML。

1 个答案:

答案 0 :(得分:11)

您可以使用JavaScript操纵FormControls或从WebBrowser调用C#方法,还可以操纵WebBrowser控件的内容或从C#调用JavaScript方法。

从Html操作WinForms

要操纵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';

从WinForms操作Html

您可以使用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课程,并将button1button2以及textBox1webBrowser1放在Form上{{1} } Modifer公开:

textBox1