2016-10-14 2 views
0

У меня есть приложение Windows, в котором я беру данные из db и привязываю их к метке. Я использую таймер и прокрутку метки, это отлично работает, когда строка содержит около 150 символов, но когда у меня есть строка около 30000 символов, она просто зависает с приложением.Большая строка в ярлыке, вызывающая зависание приложения (C# Windows)

 lblMsg1.AutoEllipsis = true; 
    private void timer1_Tick(object sender, EventArgs e) 
     { 
      try 
      { 
       if (lblMsg1.Right <= 0) 
       { 
        lblMsg1.Left = this.Width; 
       } 
       else 
        lblMsg1.Left = lblMsg1.Left - 5; 

       this.Refresh(); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

public void bindData() 
{ 
lblMsg.Text = "Some Large text"; 
} 

public void Start() 
     { 
      try 
      { 
       timer1.Interval = 150; 
       timer1.Start(); 
      } 
      catch (Exception ex) 
      { 
       Log.WriteException(ex); 
      } 
     } 

Почему это связано с длиной строки и вызывает зависание приложения? Заранее спасибо.

+0

Я не думаю, что ярлыки в C# были разработаны, чтобы содержать так много персонажи. Они предназначены для описания другого объекта, например. текстовое поле, радиокнопка и т. д. Скорее всего, около 250 символов не 30 000 –

+0

@ Kendo, так это причина моего приложения? –

+0

Возможно, есть более эффективные средства управления, в том числе, поскольку Visakh V A упомянул текстовое поле с добавленными свойствами для поддержки нескольких строк, полос прокрутки и только для чтения. Это также может быть способ хранения текста в вашей БД. Чем больше запись, тем дольше она требуется для извлечения из базы данных. В этом случае сохранение вашего текста в виде двоичного файла может помочь вам. Взгляните на этот ответ: http://stackoverflow.com/questions/26926818/best-way-to-store-large-string-in-sql-server-database –

ответ

1

Я думаю, вы пытаетесь создать тикер новостей? Я не уверен, что этикетки предназначены для хранения таких больших строк. Используйте вместо этого снимок и обновите свой код.

Определите две переменные в вашем классе формы. Один для удержания текста, а другой - для хранения графического объекта для окна изображения. Как это:

private float textoffset = 0; 
System.Drawing.Graphics graphics = null; 

в виде OnLoad сделать это:

private void Form1_Load(object sender, EventArgs e) 
{ 
    textoffset = (float)pictureBox1.Width; // Text starts off the right edge of the window 
    pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
    graphics = Graphics.FromImage(pictureBox1.Image); 
} 

Ваш таймер должен выглядеть следующим образом:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    graphics.Clear(BackColor); 
    graphics.DrawString(newstickertext, new Font(FontFamily.GenericMonospace, 10, FontStyle.Regular), new SolidBrush(Color.Black), new PointF(textoffset, 0)); 
    pictureBox1.Refresh(); 
    textoffset = textoffset-5; 
} 
+0

, используя это, не висит приложение, но я не могу видеть текст вообще (не прокрутка, а не статичная). Можете ли вы указать, где это может быть? –

+0

Он показывает прокрутку черной полосы ---------------------- –

+0

Пожалуйста, разместите свой источник, затем я могу помочь его исправить. – nivs1978

1

Вместо ярлыка используйте TextBox и установите свойства ScrollBars, MultiLine и WordWrap в соответствии с вашими потребностями. Чтобы отключить редактирование TextBox (и, таким образом, сделать его похожим на метку), используйте свойство ReadOnly.

+0

взят форму http://stackoverflow.com/questions/2906581/scrollbar-on-a-label –

+0

Мне также нужно прокрутить текст. можно прокручивать можно с помощью texttbox? –

+0

Да, конечно, вы можете http://stackoverflow.com/questions/898307/how-do-i-automatically-scroll-to-the-bottom-of-a-multiline-text-box –

 Смежные вопросы

  • Нет связанных вопросов^_^