C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: テキストボックスの文字をスクロールさせるには?


(過去ログ 116 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■68362 / inTopicNo.1)  テキストボックスの文字をスクロールさせるには?
  
□投稿者/ たいち (1回)-(2013/10/16(Wed) 16:28:00)

分類:[C#] 

テキストボックスに文字を表示したいのですが、
テキストボックスの既存の大きさ内に入りきりません。
テキストボックスの大きさを変更する事が
難しいので、電光掲示板のように
右から左へ文字をスクロールして表示させてみたいのですが、
どうやっていいのか分かりません。
出来るのかどうかもよく分かりません。

分かる方、どうか教えて下さい。m(_ _)m

例:
Textbox1.Text="たいちですよろしくお願いします。"
と値を入れる。

Textbox1.Textは通常表示させると5文字しか入らない設定で
"たいちです"しか表示されないものを
右から左へ1文字ずつスクロールして、全部の文字が読めるようにしたいです。


説明が不十分でしたらすいません。
引用返信 編集キー/
■68363 / inTopicNo.2)  Re[1]: テキストボックスの文字をスクロールさせるには?
□投稿者/ 魔界の仮面弁士 (372回)-(2013/10/16(Wed) 17:22:41)
No68362 (たいち さん) に返信
> 右から左へ1文字ずつスクロールして、全部の文字が読めるようにしたいです。

Timer で、定期的に先頭文字を一文字ずつ削って、それっぽく見せるとか。
http://social.msdn.microsoft.com/Forums/vstudio/en-US/78bf83d7-e245-41d9-a871-e00cb4df9317/


> 右から左へ文字をスクロールして表示させてみたいのですが、
> どうやっていいのか分かりません。

表示だけの問題であれば、以前作成した Label コントロールがあります。参考になれば。
自前で描画している関係上、TextBox には向きませんが、文字単位のスクロールよりは滑らかに動くかと。

[MarqueeLabel]
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=11243
引用返信 編集キー/
■68372 / inTopicNo.3)  Re[1]: テキストボックスの文字をスクロールさせるには?
□投稿者/ ムドー (2回)-(2013/10/17(Thu) 09:01:28)
No68362 (たいち さん) に返信
> テキストボックスに文字を表示したいのですが、
> テキストボックスの既存の大きさ内に入りきりません。

別な視点からのアイデアですがToolTipを使用して文字を表示させてみてはいかがでしょうか?

ツールチップ(ツールヒント)を表示する
http://dobon.net/vb/dotnet/control/showtooltip.html

伝言掲示板のような表示でしたら魔界の仮面弁士さんの手法がいいかと思われます。
引用返信 編集キー/
■68374 / inTopicNo.4)  Re[2]: テキストボックスの文字をスクロールさせるには?
□投稿者/ たいち (2回)-(2013/10/17(Thu) 13:33:28)
No68372 (ムドー さん) に返信
> ■No68362 (たいち さん) に返信
>>テキストボックスに文字を表示したいのですが、
>>テキストボックスの既存の大きさ内に入りきりません。
>
> 別な視点からのアイデアですがToolTipを使用して文字を表示させてみてはいかがでしょうか?
>
> ツールチップ(ツールヒント)を表示する
> http://dobon.net/vb/dotnet/control/showtooltip.html
>
> 伝言掲示板のような表示でしたら魔界の仮面弁士さんの手法がいいかと思われます。

アドバイスありがとうございます。

すいませんm(_ _)m

VBが全く分かりません。
引用返信 編集キー/
■68375 / inTopicNo.5)  Re[2]: テキストボックスの文字をスクロールさせるには?
□投稿者/ たいち (3回)-(2013/10/17(Thu) 13:34:24)
No68363 (魔界の仮面弁士 さん) に返信
> ■No68362 (たいち さん) に返信
>>右から左へ1文字ずつスクロールして、全部の文字が読めるようにしたいです。
>
> Timer で、定期的に先頭文字を一文字ずつ削って、それっぽく見せるとか。
> http://social.msdn.microsoft.com/Forums/vstudio/en-US/78bf83d7-e245-41d9-a871-e00cb4df9317/
>
>
>>右から左へ文字をスクロールして表示させてみたいのですが、
>>どうやっていいのか分かりません。
>
> 表示だけの問題であれば、以前作成した Label コントロールがあります。参考になれば。
> 自前で描画している関係上、TextBox には向きませんが、文字単位のスクロールよりは滑らかに動くかと。
>
> [MarqueeLabel]
> http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=11243


アドバイスありがとうございます。

すいませんm(_ _)m

VBが全く分かりません。
引用返信 編集キー/
■68378 / inTopicNo.6)  Re[3]: テキストボックスの文字をスクロールさせるには?
□投稿者/ 魔界の仮面弁士 (376回)-(2013/10/17(Thu) 14:35:04)
No68375 (たいち さん) に返信
> VBが全く分かりません。

言語そのものは分からずとも、それ以外の部分について、たとえば
 ・Timer の使い方を把握しているか、あるいは全く分からないのか
 ・TextBox から先頭の文字を削りとる文字列操作をコーディングできるのか
 ・表示に Label を用いてみるのはどうか
 ・TextBox に ToolTip を使う代案が使えるかどうか
といった点に対して言及するぐらいの事はできるのでは…?
第一、ムドーさんの回答には、C# での説明も紹介されているのですし。(^_^;)


とりあえず、先の MarqueeLabel を C# 版に翻訳してみました。


using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Forms;

public sealed class MarqueeLabel : Label
{
    private IContainer components;
    private Timer timer;
    private float location = 0.0f;

    public MarqueeLabel()
    {
        base.UseCompatibleTextRendering = true;
        timer = new Timer(components = new Container());
        timer.Interval = 50;
        timer.Tick += delegate 
        {
            if (location > (float)Width)
            {
                location = -(float)Width;
            }
            else
            {
                location += speed / 10.0f;
            }
            Invalidate();
        };
        SetStyle(ControlStyles.UserPaint, true);
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        base.AutoSize = false;
        timer.Start();
    }

    [DefaultValue(false)]
    public override bool AutoSize
    {
        get { return base.AutoSize; }
        set { if (!DesignMode) base.AutoSize = value; }
    }

    /// <summary>流れるスピードを指定します。</summary>
    [Description("流れるスピードを指定します。")]
    [Category("Action"), DefaultValue(20.0f)]
    public float Speed
    {
        get { return Math.Max(0.0f, Math.Min((float)Width, speed)); }
        set
        {
            if (value < 0.0f)
            {
                throw new ArgumentOutOfRangeException("Speed", value, "0以上の値を指定してください。");
            }
            speed = Math.Min((float)Width, value);
            if (value == 0.0f)
            {
                timer.Stop();
                if (DesignMode) ResetPosition();
            }
            else
            {
                timer.Start();
            }
        }
    }
    private float speed = 20.0f;

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.TranslateTransform(-location, 0.0f);
        base.OnPaint(e);
    }

    public void ResetPosition()
    {
        location = 0.0f;
        Invalidate();
    }

    [DebuggerNonUserCode]
    protected override void Dispose(bool disposing)
    {
        try
        {
            if (disposing && components != null) { components.Dispose(); }
        }
        finally
        {
            base.Dispose(disposing);
        }
    }
}

引用返信 編集キー/
■68379 / inTopicNo.7)  Re[3]: テキストボックスの文字をスクロールさせるには?
□投稿者/ ムドー (3回)-(2013/10/17(Thu) 15:28:18)
No68374 (たいち さん) に返信
> すいませんm(_ _)m
>
> VBが全く分かりません。

先のURLには魔界の仮面弁士さんのおっしゃる通りC#版も記載されておりますのでよくお読みください。

>例:
>Textbox1.Text="たいちですよろしくお願いします。"
>と値を入れる。

であれば、

Textbox1.Text="たいちですよろしくお願いします。";
toolTip1.SetToolTip(Textbox1, Textbox1.Text);

でテキストボックスにマウスを載せるとツールチップが表示されるかと思います。

・前提としてhttp://dobon.net/vb/dotnet/control/showtooltip.htmlの「フォームデザイナを使用する方法」
 に書いてある1番まで終了していること


動的に使用したいのであればTextbox1のLeaveイベントやTextCangedイベント内に記述してもいいかもしれません。

引用返信 編集キー/
■68383 / inTopicNo.8)  Re[1]: テキストボックスの文字をスクロールさせるには?
□投稿者/ 魔界の仮面弁士 (378回)-(2013/10/17(Thu) 20:30:35)
No68362 (たいち さん) に返信
> 分類:[C#] 
この部分、返信時の本文部には引用されないんですよね…。

返信するまでは、C# として読み進めていたのですが、いざ回答する際に、
> 例:
> Textbox1.Text="たいちですよろしくお願いします。"
という内容を見て、VB 向けのコードを紹介してしまっていました。その点は失礼しました。

TextBox1.Text = "たいちですよろしくお願いします。"   ← Visual Basic の場合(コントロール名の先頭が大文字)
textBox1.Text = "たいちですよろしくお願いします。";  ← C# の場合 (末尾にセミコロン)


> Textbox1.Textは通常表示させると5文字しか入らない設定で
> "たいちです"しか表示されないものを
> 右から左へ1文字ずつスクロールして、全部の文字が読めるようにしたいです。

先の例は Label 案だったので、今度は TextBox 案。
Form1 上に、TextBox を 3 つと、Timer を 1 つ貼っておいてください。


private void Form1_Load(object sender, EventArgs e)
{
    textBox1.Text = "たいちですよろしくお願いします。";
    textBox2.Text = "たいちですよろしくお願いします。";
    textBox3.Text = "たいちですよろしくお願いします。";
    SetScrollableTextBox(textBox2, BorderStyle.Fixed3D);
    SetScrollableTextBox(textBox3, BorderStyle.FixedSingle);

    timer1.Interval = 50;
    timer1.Start();
}

private void SetScrollableTextBox(TextBox txt, BorderStyle border)
{
    Panel p = new Panel();
    p.Location = txt.Location;
    p.Size = txt.Size;
    p.BackColor = txt.BackColor;
    p.BorderStyle = border;
    txt.BorderStyle = BorderStyle.None;
    txt.Parent.Controls.Add(p);
    p.Controls.Add(txt);
    txt.SetBounds(0, 0, int.MaxValue, txt.Height);
    timer1.Tick += delegate
    {
        txt.Left -= 1;
        using (Graphics g = txt.CreateGraphics())
        {
            int w = (int)g.MeasureString(txt.Text, txt.Font).Width;
            if(w < -txt.Left)
            {
                txt.Left = p.Width;
            }
        }
    };
}

引用返信 編集キー/
■68401 / inTopicNo.9)  Re[2]: テキストボックスの文字をスクロールさせるには?
□投稿者/ たいち (4回)-(2013/10/18(Fri) 18:02:12)
No68383 (魔界の仮面弁士 さん) に返信
> ■No68362 (たいち さん) に返信
>>分類:[C#] 
> この部分、返信時の本文部には引用されないんですよね…。
>
> 返信するまでは、C# として読み進めていたのですが、いざ回答する際に、
>>例:
>>Textbox1.Text="たいちですよろしくお願いします。"
> という内容を見て、VB 向けのコードを紹介してしまっていました。その点は失礼しました。
>
> TextBox1.Text = "たいちですよろしくお願いします。" ← Visual Basic の場合(コントロール名の先頭が大文字)
> textBox1.Text = "たいちですよろしくお願いします。"; ← C# の場合 (末尾にセミコロン)
>
>
>>Textbox1.Textは通常表示させると5文字しか入らない設定で
>>"たいちです"しか表示されないものを
>>右から左へ1文字ずつスクロールして、全部の文字が読めるようにしたいです。
>
> 先の例は Label 案だったので、今度は TextBox 案。
> Form1 上に、TextBox を 3 つと、Timer を 1 つ貼っておいてください。
>
>
> private void Form1_Load(object sender, EventArgs e)
> {
> textBox1.Text = "たいちですよろしくお願いします。";
> textBox2.Text = "たいちですよろしくお願いします。";
> textBox3.Text = "たいちですよろしくお願いします。";
> SetScrollableTextBox(textBox2, BorderStyle.Fixed3D);
> SetScrollableTextBox(textBox3, BorderStyle.FixedSingle);
>
> timer1.Interval = 50;
> timer1.Start();
> }
>
> private void SetScrollableTextBox(TextBox txt, BorderStyle border)
> {
> Panel p = new Panel();
> p.Location = txt.Location;
> p.Size = txt.Size;
> p.BackColor = txt.BackColor;
> p.BorderStyle = border;
> txt.BorderStyle = BorderStyle.None;
> txt.Parent.Controls.Add(p);
> p.Controls.Add(txt);
> txt.SetBounds(0, 0, int.MaxValue, txt.Height);
> timer1.Tick += delegate
> {
> txt.Left -= 1;
> using (Graphics g = txt.CreateGraphics())
> {
> int w = (int)g.MeasureString(txt.Text, txt.Font).Width;
> if(w < -txt.Left)
> {
> txt.Left = p.Width;
> }
> }
> };
> }

丁寧な回等ありがとうございます。
参考にさせて頂きます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -