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
您的 sender
是 UCListView
class 的一个对象,它是从 UserControl
继承而来的,您正试图像 ListView
那样使用它。因此,作为操作的结果 (sender as ListView)
你得到 null
因为发件人不是 ListView
class 的实例并且不继承它。
我创建的自定义事件有问题。我制作了一个如下所示的用户控件:
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
您的 sender
是 UCListView
class 的一个对象,它是从 UserControl
继承而来的,您正试图像 ListView
那样使用它。因此,作为操作的结果 (sender as ListView)
你得到 null
因为发件人不是 ListView
class 的实例并且不继承它。