none
Утечка памяти или что то другое. RRS feed

  • Вопрос

  • private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
          groupBox1.Text = "";
          int level = treeView1.SelectedNode.Level;
          if (level == 2)
          {
            string text = treeView1.SelectedNode.Text;
            groupBox1.Text = text;
            UserControls.DrawAllIntervals Frame;
            Frame = new UserControls.DrawAllIntervals();
            Frame.Dock = DockStyle.Fill;
            Frame.Parent = groupBox1;
            Frame.STARTDraw(text);
          }
        }

    Вот пример моего кода. Это обычная реация на нажатие листа отображаемого в TreeView дерева, кнопкой мыши и вызывает UserControl, на котором реализовано рисования по данным из базы данных вот тоже пример

    panel1.CreateGraphics().Clear(Color.WhiteSmoke);
          IntervalTA.FillByNumberWell(DT, NameWell);
          // float minHeigth = (float)DT.Min();//.ItemArray.ElementAt(1);
    
          float minHeigth = (float)IntervalTA.MinimalQuery(NameWell);
          float maxHeigth = (float)IntervalTA.MaximalQuery(NameWell);
          float koef = (panel1.Height - 30) / (maxHeigth - minHeigth);
          
          panel1.CreateGraphics().DrawLine(penBlack, 10, 0, 10, panel1.Height);
          for (int i = 0; i < DT.Count; i++)
          {
            float min = 0;
            float max = 0;
            Brush B = Brushes.Black;
    
            min = (float)(DT.Rows[i].ItemArray.ElementAt(1)) - minHeigth;
            max = (float)(DT.Rows[i].ItemArray.ElementAt(2)) - minHeigth;
            
            panel1.CreateGraphics().DrawLine(penBlack, 0, min * koef + 20, 20, min * koef + 20);
            panel1.CreateGraphics().DrawString(DT.Rows[i].ItemArray.ElementAt(1).ToString(), FontStr, B, 20, min * koef + 20);
            
            panel1.CreateGraphics().DrawLine(penBlack, 0, max * koef + 20, 20, max * koef + 20);
            panel1.CreateGraphics().DrawString(DT.Rows[i].ItemArray.ElementAt(2).ToString(), FontStr, B, 20, max * koef + 20);
    
    
            IntervalTA.FillByAll(BufDT, (int)DT.Rows[i].ItemArray.ElementAt(0));
            int sd = BufDT.Rows.Count;
            RectProperties(min, max, koef, "Test", Brushes.Red);
          }
    вот. Проблема состоит в том, что когда я второй и последующий раз нажимаю на этот лист, оно не только не перерисовывает, он вообще пропадает. Это связано с утечкой памяти? или утечкой указателей? подскажите что сделать чтобы они не пропадали!

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:48 MSDN Forums consolidation (От:Visual C#)
    21 июня 2010 г. 15:17

Ответы

  • Спасибо что откликнулись, но я нашел проблему. Получилось всего лишь то что на фрейм накладывался фрейм и получалось что не перерисовывался, и проблема решилась всего-лишь одной строчкой кода: Controls.Clear() и все заработало! Но все равно спасибо за ваши ответы!
    • Помечено в качестве ответа Super_draG 23 июня 2010 г. 14:40
    23 июня 2010 г. 14:40

Все ответы

  • Скорее всего это связано с тем, что AfterSelect срабатывает только один раз (когда ты первый раз выделяешь узел)
    21 июня 2010 г. 18:28
    Модератор
  • Нет, он срабатывает каждый раз, но почему то не перерисовывает. я думаю что это связано с указателями, но не знаю как это исправить
    21 июня 2010 г. 18:38
  • Выложи куда-нить запускабельный солюшен с проблемой - глянем!
    23 июня 2010 г. 13:07
  • Спасибо что откликнулись, но я нашел проблему. Получилось всего лишь то что на фрейм накладывался фрейм и получалось что не перерисовывался, и проблема решилась всего-лишь одной строчкой кода: Controls.Clear() и все заработало! Но все равно спасибо за ваши ответы!
    • Помечено в качестве ответа Super_draG 23 июня 2010 г. 14:40
    23 июня 2010 г. 14:40