none
Помогите найти ошибку WPF... RRS feed

  • Вопрос

  • Добрый вечер!

    //В коде события:
    
    TabItem tabItem = new TabItem();
    tabItem.Header = fileName;
    tabControl.Items.Add(tabItem);
    tabControl.SelectedIndex = tabControl.Items.Count - 1;
    Canvas canva = new Canvas();
    canva.Children.Add(FI.img); //Добавляю класс Image с указанным Image.source
    tabItem.Content = canva;
    canva.PreviewMouseDown += new   MouseButtonEventHandler(canva_PreviewMouseDown);
    canva.PreviewMouseMove += new MouseEventHandler(canva_PreviewMouseMove);
    canva.PreviewMouseUp += new MouseButtonEventHandler(canva_PreviewMouseUp);
    
    //В событиях мыши:
    
    private void canva_PreviewMouseDown(object sender, MouseButtonEventArgs e)
            {
                try
                {
                    Control c = sender as Control;
                    Mouse.Capture(c);
                    p = Mouse.GetPosition(c);
                    canmove = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    ErrorLogClass.Write(ex);
                }
            }
    
    private void canva_PreviewMouseMove(object sender, MouseEventArgs e)
            {
                try
                {
                    if (canmove)
                    {
                        Control c = sender as Control;
                        c.SetValue(Canvas.LeftProperty, e.GetPosition(null).X - p.X);
                        c.SetValue(Canvas.TopProperty, e.GetPosition(null).Y - p.Y);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    ErrorLogClass.Write(ex);
                }
    
    private void canva_PreviewMouseUp(object sender, MouseButtonEventArgs e)
            {
                try
                {
                    Mouse.Capture(null);
                    canmove = false;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    ErrorLogClass.Write(ex);
                }
            }

    Картинка подгружается и отображается нормально, а вот при щелчке мышью срабатывает исключение о том, что ссылка на объект не указывает на экземпляр объекта. Срабатывает при обработке подчеркнутой строки кода. Собственно в рабочем варианте картинка должна перемещаться мышью внутри динамически добавленного Canvas на tabpage. Канва и таб пэйдж добавляются динамически. 

    В чем может проблема? Спасибо

    18 февраля 2014 г. 18:52

Ответы

  • Canvas - не Control, поэтому и получается null в результате работы оператора as.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Alexander2106 21 февраля 2014 г. 15:50
    19 февраля 2014 г. 4:57

Все ответы

  • Canvas - не Control, поэтому и получается null в результате работы оператора as.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Alexander2106 21 февраля 2014 г. 15:50
    19 февраля 2014 г. 4:57
  • Поменял на tabItem и ошибка исчезла, но картинка внутри канвы по-прежнему не перемещается :(
    19 февраля 2014 г. 14:15
  • Что, куда, на что Вы поменяли? Выражайтесь точнее, поймите, здесь никто не "варится" в Вашей проблеме. Вы задали вопрос: почему ошибка? Я ответил, почему. У Вас возникла новая проблема? Опишите ее.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Помечено в качестве ответа Alexander2106 21 февраля 2014 г. 15:50
    • Снята пометка об ответе Alexander2106 21 февраля 2014 г. 15:50
    19 февраля 2014 г. 20:27
  • А я предъявляю какие-то претензии к Вашему ответу? Вы ответили, я отметил Ваш ответ.
    21 февраля 2014 г. 15:53
  • Да Вы не серчайте :) Я готов, чем смогу, помочь Вам в поиске и других багов. Информации от Вас просто нужно побольше. Приведите код, который не работает, разберемся :)

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 февраля 2014 г. 16:23