Mousebuttonpressed 事件问题 C#

Mousebuttonpressed event Issues C#

我创建的自定义事件有问题。我制作了一个如下所示的用户控件:

    public partial class UCListView : UserControl {
    public UCListView() {
        InitializeComponent();
    }

    public event EventHandler SubmitClick;
    public event EventHandler MouseButtonUpEvent;
    private void SubmitButton_OnClick(object sender, RoutedEventArgs e) {
        if (SubmitClick != null)
            SubmitClick(this, e);
    }

    private void MouseButtonUp(object sender, RoutedEventArgs e) {
        if (MouseButtonUpEvent != null) {
            MouseButtonUpEvent(this, e);
        }
    }
}

这是我的 MouseButtonUp 事件。 以下是我收听活动的地方:

    public partial class RoundsteelWindow : WindowControls {

    private UCListView uc;
    public RoundsteelWindow() {

        InitializeComponent();
        uc = new UCListView();
        uc.SubmitClick += new EventHandler(ButtonPressed);
        uc.MouseButtonUpEvent += new EventHandler(MousePressed);
        stkTest.Children.Add(uc);
        base.Test<RoundSteel>(uc, "Roundsteel");
    }
}

这里是WindowControls,可以看到MousePressed方法。这与此代码下方的代码片段相同。真的看不出问题:

    public abstract class WindowControls : Window {

    public IMaterialWith14Elements _ReturnObject { get; set; }
    public double amount { get; set; }
    private UCListView _uc;

    public void Test<T>(UCListView uc, string type) where T: IMaterialWith14Elements, new() {
        _uc = uc;
        List<T> test = MaterialLogic.GetList(type) as List<T>;
        foreach (T material in test) {
            uc.listView.Items.Add(material.Name);
        }
    }
    private string str;
    public void MousePressed(object sender, EventArgs eventArgs) {
        var item = (sender as ListView).SelectedItem;
        if (item != null) {
            _ReturnObject = _uc.listView.SelectedItems as FlatSteel ;
            str = item.ToString();
            _uc.amountText.IsEnabled = true;
        }
    }

    public void ButtonPressed(object sender, EventArgs e) {
        if (!string.IsNullOrEmpty(_uc.amountText.Text)) {
            amount = _uc.amountText.Text.customParseToDouble();
            this.Close();
        }
        else {
            MessageBox.Show("Indtast venligst en værdi.");
        }
    }
}

现在的问题如下:使用以下代码可以正常工作,但是 class 没有使用 window 控件。它由另一个处理所有按钮的 class 调用。

        private void flatsteelListView_PreviewMouseLeftButtonUp(object sender, RoutedEventArgs e) {
        var item = (sender as ListView).SelectedItem;
        if (item != null) {
            _returnObject = flatsteelListView.SelectedItems as FlatSteel;
            str = item.ToString();
            amountTextbox.IsEnabled = true;
            FindObject(str);
        }
    }

第一张图片显示工作window。这是没有使用用户控件的地方。实际上,这是我以前处理过的一个问题,并在 Whosebug Help for thisissue 上获得了帮助。 第二张图片显示下一个 window 使用已创建的用户控件。按钮事件起作用并关闭 window。当按下列表视图项时,问题就来了。它做的事情与第一张图片(它工作的地方)相同,但它给了我一个空引用,这对我来说没有任何意义。我也检查了对象发件人,看看这两个不同的发件人之间是否存在差异windows。

我就是想不通为什么这不起作用。

问候 darophi

您的 senderUCListView class 的一个对象,它是从 UserControl 继承而来的,您正试图像 ListView 那样使用它。因此,作为操作的结果 (sender as ListView) 你得到 null 因为发件人不是 ListView class 的实例并且不继承它。