C# 捕捉鼠标点击事件
我真的在谷歌上搜索到了这个,但是没有找到任何有用的东西。 我正在使用C#WPF cefsharp.WPF cefsharp:ChromiumWebBrowser 我想做的就是当用户在网页上点击任何东西时,我想用c#捕捉鼠标点击事件。原因是我在页面上运行javascript,它注册单击的内容并传回一个值。所以我需要从javascript中获取该值。一切都准备好了。我只是无法让C#注册浏览器被点击。C#不需要知道在页面上单击了什么元素,javascript为我处理这些C# 捕捉鼠标点击事件,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我真的在谷歌上搜索到了这个,但是没有找到任何有用的东西。 我正在使用C#WPF cefsharp.WPF cefsharp:ChromiumWebBrowser 我想做的就是当用户在网页上点击任何东西时,我想用c#捕捉鼠标点击事件。原因是我在页面上运行javascript,它注册单击的内容并传回一个值。所以我需要从javascript中获取该值。一切都准备好了。我只是无法让C#注册浏览器被点击。C#不需要知道在页面上单击了什么元素,javascript为我处理这些 任何帮助都将不胜感激。如果您要
任何帮助都将不胜感激。如果您要在JavaScript中捕获一个单击事件,以获取页面上选择的实际上是您的事件的内容。在JavaScript中,通过单击调用C#方法 例如,在我编写的一个应用程序中,我在CefSharp中呈现了一个D3页面,该页面显示了一个force布局图,当用户单击force布局中的一个项目时,JavaScript将该项目的id发送给C#,C#反过来将一段序列化的数据返回给JavaScript,然后显示出来(实际上,我有一个C#类,充当CefSharp和我的模型之间的一个层,处理JavaScript之间的序列化)。听起来你需要采取这样的方法来实现你想要实现的目标,而不是在浏览器控件本身上需要一个实际的点击事件 我在下面添加了一些示例代码,显示了CefSharp中屏幕上的一个按钮(如index.html中定义的)。单击按钮时,它会将一个值从页面传递到JsHandler类,该类会显示一个带有该值的消息框 main window.xaml index.html
您需要在鼠标向上移动事件中添加一个处理程序
<wpf:ChromiumWebBrowser Grid.Column="1" Grid.Row="0" x:Name="myBrowser" UseLayoutRounding="True"/>
myBrowser.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Browser_MouseUp), true);
private static void Browser_MouseUp(object sender, MouseButtonEventArgs e)
{//Check for button that was clicked and e.Source ...
}
myBrowser.AddHandler(UIElement.MouseUpEvent,新的MouseButtonEventHandler(Browser\u MouseUp),true);
专用静态无效浏览器_MouseUp(对象发送器,MouseButtonEventArgs e)
{//检查已单击的按钮和e。源。。。
}
您使用的是wpf还是winforms?用于注册您的处理程序并将handledEventsToo设置为trueHi不使用wpf非常感谢您的响应。这肯定是我没有考虑过的。您所描述的实际上正是我正在尝试做的。从javascript返回一个id,以便从我的数据库中为要处理的软件。因此您建议使用类似.Javascript:if(Javascriptcondition>0){}C#:受保护的void CsharpFunction(){//Notification.show();}我在我的答案中添加了一些示例代码,这些代码以一种简单的形式实现了我认为您想要的。在实际使用中,您可以将对象作为JSON传递到javascript,以允许您轻松地传递复杂的对象,但CefSharp确实可以处理许多标准类型的转换。@DaeDaLuS_015-对于很难找到一个好的平面图。谢谢:)
public partial class MainWindow : Window
{
JsHandler jsHandler = new JsHandler();
public MainWindow()
{
InitializeComponent();
Browser.Address = Environment.CurrentDirectory + "/index.html";
Browser.JavascriptObjectRepository.Register("jsHandler", jsHandler);
}
}
<html>
<head>
<script type="text/javascript">
CefSharp.BindObjectAsync("jsHandler", "jsHandler");
</script>
<title>Test Page</title>
</head>
<body>
<button onclick="window.jsHandler.handleJsCall(1)">button</button>
</body>
</html>
class JsHandler
{
public void HandleJsCall(int arg)
{
MessageBox.Show($"Value Provided From JavaScript: {arg.ToString()}", "C# Method Called");
}
}
<wpf:ChromiumWebBrowser Grid.Column="1" Grid.Row="0" x:Name="myBrowser" UseLayoutRounding="True"/>
myBrowser.AddHandler(UIElement.MouseUpEvent, new MouseButtonEventHandler(Browser_MouseUp), true);
private static void Browser_MouseUp(object sender, MouseButtonEventArgs e)
{//Check for button that was clicked and e.Source ...
}