2016-10-14 9 views
0

dbからデータを取得してラベルにバインドするWindowsアプリケーションがあります。私はタイマーを使用してラベルをスクロールしています。これは、文字列が約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が複数行のサポート、スクロールバー、および読み取り専用のプロパティが追加されたテキストボックスを挙げると、より良いコントロールが使用される可能性があります。テキストがDBに格納される方法でもあります。レコードが大きいほど、データベースからの取り出しに時間がかかります。この場合、テキストをバイナリとして保存すると役立ちます。この回答を見てください:http://stackoverflow.com/questions/26926818/best-way-to-store-large-string-in-sql-server-database –

答えて

1

ニュースティッカーを作成しようとしていますか? ラベルがそのような大きな文字列を保持するように設計されているかどうかはわかりません。 代わりにピクチャボックスを使用し、コードを更新します。

フォームクラスに2つの変数を定義します。 1つはテキストオフセットを保持し、もう1つはピクチャボックスのグラフィックオブジェクトを保持する。このように:フォームのonloadイベントで

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

次の操作を行います。

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

taken form http://stackoverflow.com/questions/2906581/scrollbar-on-a-label –

+0

テキストも同様にスクロールする必要があります。テキストボックスでスクロールできますか? –

+0

はい、もちろん可能です。http://stackoverflow.com/questions/898307/how-do-i-automatically-scroll-to-the-bottom-of-a-multiline-text-box –

関連する問題