我正在使用Awesomium .NET Winforms网络浏览器控件,但在使用'select'关键字时遇到了一些问题。
演示行为的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>
任何帮助都会非常感激!谢谢!
答案 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
都可以使用预定义的下拉(弹出)菜单。