0

私は、db からデータを取得し、それをラベルにバインドする Windows アプリケーションを使用しています。タイマーを使用してラベルをスクロールしています。これは、文字列が約 150 文字の場合は正常に機能しますが、約 30000 文字の文字列がある場合は、アプリケーションがハングアウトします。

       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);
            }
        }

これが文字列の長さに関連していて、アプリケーションがハングするのはなぜですか? 前もって感謝します。

4

2 に答える 2

1

Label の代わりに TextBox を使用し、必要に応じて ScrollBars、MultiLine、および WordWrap プロパティを設定します。TextBox の編集を無効にする (つまり、ラベルと同じように動作させる) には、ReadOnly プロパティを使用します。

于 2016-10-14T08:42:24.513 に答える
1

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

フォーム クラスで 2 つの変数を定義します。1 つはテキスト オフセットを保持し、もう 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;
}
于 2016-10-14T09:21:40.587 に答える