У меня возникла проблема с созданным пользователем событием. Я сделал UserControl, который выглядит следующим образом:Проблемы с событиями, вызываемыми Mousebuttonpressed 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.");
}
}
}
Теперь проблема заключается в следующем: С помощью следующего кода он работает, но этот класс не используя windowcontrols. Он вызывается другим классом, который обрабатывает все кнопки.
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);
}
}
Первая картинка показывает рабочее окно. Здесь не используется usercontrol. На самом деле это предыдущая проблема, с которой я работал, и получил помощь здесь в stackoverflow Help for thisissue. На втором рисунке показано следующее окно с помощью созданного пользовательского контроля. Событие кнопки работает и закрывает окно. Затем возникает вопрос, когда нажата клавиша listview. Он делает то же самое, что и на первой картинке (где она работает), но она дает мне нулевую ссылку, которая для меня не имеет никакого смысла. Я также проверил отправителя объекта, чтобы узнать, существует ли разница между отправителем этих двух разных окон.
Я просто не могу понять, почему это не работает.
поздравления darophi
Очевидно, что ваш отправитель на экране не имеет типа ListView. Вы можете проверить это, разделив преобразование и затем проверив, является ли результат нулевым. – sprinter252
Я просто оставлю [это] (http://stackoverflow.com/q/4660142/1997232) здесь. – Sinatr
Было бы неплохо увидеть, что такое 'sender', вы можете его почти увидеть, но вы закрыли его в окне исключения. Проблема в том, что 'as' cast не работает и возвращает null, вам нужно сообщить нам, что такое' sender', когда происходит исключение. –