1

我正在使用 Awesomium .NET Winforms Web 浏览器控件,但在使用“选择”关键字时遇到了一些问题。

下面是演示该行为的 html,但首先是几个快照。

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

页面打开时

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

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

用向下箭头更改

正在测试的页面要复杂得多,除了简单的选择功能外,其他所有功能都运行良好。我们有很多 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>

任何帮助将不胜感激!谢谢!

4

3 回答 3

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;
    }
于 2013-03-21T23:49:45.667 回答
1

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

“Ken Walker”在这里很好地提供了执行此操作的代码

编辑:不幸的是,链接已被删除。这可能是因为新版本已经发布,现在支持这个 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;
    }
于 2013-01-22T18:37:33.063 回答
0

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

于 2013-02-01T21:50:02.140 回答