按下鼠标右键,WPF应用程序崩溃

时间:2017-11-18 15:31:04

标签: c# wpf windows

我实际上是想在c#wpf中制作一个Jarvis AI程序,但我在代码中遇到异常。实际上问题是当我在运行的应用程序上按下鼠标右键时,应用程序卡住并崩溃,任何人都可以帮助我解决这个问题。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace jarvis
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }



    }
}

3 个答案:

答案 0 :(得分:0)

我不确定你想要实现什么,但如果你想用鼠标左键移动窗口,只需添加条件:

private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
{
    if(e.LeftButton == MouseButtonState.Pressed)
        this.DragMove();
}

其他鼠标按钮在DragMove()方法中导致InvalidOperationException。 如果要使用鼠标右键进行窗口移动,则必须为其编写自定义方法。

答案 1 :(得分:0)

我已经使用过这些代码了,它确实有用

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();

在表单鼠标按下事件中使用ReleaseCapture方法,就像这样

if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            } 

答案 2 :(得分:0)

      private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
      {
        e.handled = true;  //in your case, prevent right click crash.    
        this.DragMove();
      }