html'select'关键字在Awesomium中有效吗?

时间:2013-01-21 19:56:35

标签: awesomium

我正在使用Awesomium .NET Winforms网络浏览器控件,但在使用'select'关键字时遇到了一些问题。

演示行为的html如下所示,但首先是一些快照。

加载页面后,此图片显示初始状态。

When the page opens

点击箭头后,控件突出显示,但“下拉列表”未“打开”。

当控件突出显示时,我可以使用向上和向下箭头更改选择。

Changed with down arrow

正在测试的页面要复杂得多,除了简单选择功能之外的所有内容都能很好地运行。我们有很多JS继续没有任何问题。

我有什么遗失的吗?

以下是上面显示的简单页面的html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Select test</title>
</head>

<body>
    <p>
    <select id="test1">
        <option value="1">option1</option>
        <option value="2">option2</option>
        <option value="3">option3</option>
        <option value="4">option4</option>
    </select>
    </p>
</body>
</html>

任何帮助都会非常感激!谢谢!

3 个答案:

答案 0 :(得分:1)

这是一个众所周知的“功能”。弹出菜单留给开发人员实现。

“Ken Walker”提供了很好的代码来执行此操作here

编辑:很遗憾,该链接已被删除。也许这是因为新版本已经发布,现在支持这个html结构。我没有时间玩3/6/13版本,所以我会在这里发布我的代码,直到我看到更新是否有效。

我使用名为lbSelect的设计器创建了一个ListBox。我无法找到的一件事是如何调用Awesomium_Windows_Forms_WebControl_ShowPopupMenu。我没有钩子,我没有在控件的属性中看到一个,但是,它在设计器文件中并且已连接。

有一点需要注意,您必须在菜单中选择一个项目 - 您无法选择箭头并使该框消失。希望更新的Awesomium能够正常工作,所有这些代码都会消失。

    private void lbSelect_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            itemSelected = lbSelect.SelectedIndex;
        }
    }
    private void Awesomium_Windows_Forms_WebControl_ShowPopupMenu(object sender, PopupMenuEventArgs e)
    {
        int count;
        Rectangle lbb = new Rectangle();

        itemSelected = -1;
        lbSelect.Items.Clear();
        count = e.Info.Items.Count;
        lbb.X = e.Info.Bounds.X;
        lbb.Y = e.Info.Bounds.Y + e.Info.Bounds.Height;
        lbb.Height = e.Info.ItemHeight * count;
        lbb.Width = e.Info.Bounds.Width;

        lbSelect.Bounds = lbb;
        for (int i = 0; i < count; i++)
        {
            lbSelect.Items.Add(e.Info.Items[i].Label);
        }
        lbSelect.Visible = true;
        lbSelect.BringToFront();
        do
        {
            Application.DoEvents();
        } while (itemSelected == -1);
        e.Info.Select(itemSelected);
        lbSelect.Visible = false;
    }

答案 1 :(得分:1)

这是我的1.7版代码...感谢您的帮助...

    private ListBox lbSelect;
    private WebControl browser;

    private void CreateBrowser()
    {
        browser = new WebControl();
        this.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;
        browser.ShowPopupMenu += new ShowPopupMenuEventHandler(browser_ShowPopupMenu);

        lbSelect = new ListBox();
        this.Controls.Add(lbSelect);
        lbSelect.BringToFront();
        lbSelect.Visible=false;
        lbSelect.MouseClick += new MouseEventHandler(lbSelect_MouseClick);
        lbSelect.LostFocus += new EventHandler(lbSelect_LostFocus);
    }

    private PopupMenuEventArgs _MenuArgs;
    void browser_ShowPopupMenu(object sender, PopupMenuEventArgs e)
    {
        lbSelect.Items.Clear();
        uint count = e.Info.Count;
        for (uint i = 0; i < count; i++)
            lbSelect.Items.Add(e.Info[i].Label);

        Rectangle lbb = new Rectangle
        {
            X = e.Info.Bounds.X,
            Y = e.Info.Bounds.Y + e.Info.Bounds.Height,
            Height = (count <= 10 ? (int)(e.Info.ItemHeight * count) : e.Info.ItemHeight * 10),
            Width = e.Info.Bounds.Width
        };

        lbSelect.Bounds = lbb;
        lbSelect.Visible = true;
        lbSelect.SelectedIndex = e.Info.SelectedItem;
        lbSelect.Focus();

        _MenuArgs = e;
    }

    void lbSelect_MouseClick(object sender, MouseEventArgs e)
    {
        _MenuArgs.Info.Select(lbSelect.SelectedIndex);
        lbSelect.Visible = false;
    }

    void lbSelect_LostFocus(object sender, EventArgs e)
    {
        lbSelect.Visible = false;
    }

答案 2 :(得分:0)

在1.7版的最终版本中,WPF和WinForms WebControl都可以使用预定义的下拉(弹出)菜单。