質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3174閲覧

c#で文字が縦にスクロールする書き方を教えてください。

lancelot.jr

総合スコア11

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/08/28 15:46

編集2018/08/29 02:18
class test01 : Form{ protected override void OnPaint (PaintEventArgs e){ Font f = new Font("MS ゴシック", 12); e.Graphice.DrawString ("文字1",f,new SolidBrush(Color. Black),0,0); ("文字2",f,new SolidBrush(Color. Black),0,20); ("文字3",f,new SolidBrush(Color. Black),0,40); } public static void Main(){ Application.Run(new test01); } } コード ```検索でc#の横によるスクロールする書き方は見つけたのですが、縦のスクロールが見つけられなくて、書き方を教えてください。出来るだけ簡潔にかける方法だと嬉しいです。 指摘を受け補足をさせて頂きます。 作りたいと思っていること RPGのプロローグ的な文字列を縦に流れるように 作りたいと思ってます。 今、Windows内にあるメモ帳を使って Application.RunでWindow表示をし、 DrawStringでプロローグ的な文を書いてる 程度です。 環境はc#5.0です。 検索で横テロップは見つけた程度で、 流れる方向が違うので参考にはしてません。 こんな感じの説明ですが、 補足になったでしょうか? よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/28 22:19

何を作っているか (Windows Froms? WPF?) と開発環境 (OS, .NET, VS のバージョン) ぐらいは書きましょう。あと、「横」で参考にした記事の url を書いてください。
Zuishin

2018/08/28 23:17

なぜメモ帳? Visual Studio を使いましょう。複数行の文章が下から現れて上に消えていくようなものを作っていますか? できているところまでソースを出してください。その際はコードブロックを必ず使ってください。
lancelot.jr

2018/08/29 02:27 編集

修正依頼ありがとう御座います。 コードを書いてみました。 Visual Studioはむずかしいく悪戦苦闘中なんです。 複数行の文章が下から現れて上に消えていくようなものをお願いします。
yukihisa

2018/08/29 02:31

とりあえず横移動のソースを移動の向き変えてやってみたら?試すだけならたぶんleftの値をタイマーで動かしてるだろうからtopに変更するだけだし。
guest

回答1

0

ベストアンサー

Visual Studio の使い方は、プログラミングを勉強できる人が勉強してわからないほど難しくはありません。
メモ帳でプログラミングを勉強しようとするのはかなりかなりものすごく効率が悪いので、今すぐに Visual Studio の使い方を学んでください。

C#

1using System; 2using System.Drawing; 3using System.Windows.Forms; 4 5namespace WindowsFormsApp1 6{ 7 static class Program 8 { 9 /// <summary> 10 /// アプリケーションのメイン エントリ ポイントです。 11 /// </summary> 12 [STAThread] 13 static void Main() 14 { 15 Application.EnableVisualStyles(); 16 Application.SetCompatibleTextRenderingDefault(false); 17 Application.Run(new MainForm()); 18 } 19 } 20 21 class MainForm : Form 22 { 23 public MainForm() 24 { 25 var telop = new Telop 26 { 27 Dock = DockStyle.Fill, 28 Font = new Font("MS ゴシック", 12), 29 Lines = new[] 30 { 31 "文字1", "文字2", "文字3" 32 } 33 }; 34 Controls.Add(telop); 35 telop.Run(); 36 } 37 } 38 39 class Telop : Control 40 { 41 public string[] Lines { get; set; } 42 public int Position { get; set; } 43 public int LineHeight { get; set; } = 20; 44 45 public void Run() 46 { 47 Position = 0; 48 Animator.Animate(1000, (frame, frequency) => 49 { 50 if (!Visible || IsDisposed) return false; 51 Position = frame * (Height + Lines.Length * LineHeight) / frequency; 52 Invalidate(); 53 return true; 54 }); 55 } 56 57 protected override void OnPaint(PaintEventArgs e) 58 { 59 base.OnPaint(e); 60 var brush = new SolidBrush(ForeColor); 61 for (int i = 0; i < Lines.Length; i++) 62 { 63 e.Graphics.DrawString(Lines[i], Font, brush, 0, Height - Position + i * LineHeight); 64 } 65 } 66 } 67 68 public static class Animator 69 { 70 /// <summary> 71 /// 1 フレームの時間とフレーム数を指定してアニメーション機能を提供します。 72 /// </summary> 73 /// <param name="interval">1 フレームの時間をミリ秒単位で指定します。</param> 74 /// <param name="frequency"> 75 /// frequency はコールバックが呼ばれる回数から 1 を引いたものです。例えば frequency が 10 の時には 11 回呼ばれます。 76 /// </param> 77 /// <param name="callback"> 78 /// bool callback(int frame, int frequency) の形でコールバックを指定します。 79 /// frame は 0 から frequency の値まで 1 ずつ増加します。 80 /// frequency は引数と同じものです。 81 /// </param> 82 public static void Animate(int interval, int frequency, Func<int, int, bool> callback) 83 { 84 var timer = new System.Windows.Forms.Timer(); 85 timer.Interval = interval; 86 int frame = 0; 87 timer.Tick += (sender, e) => 88 { 89 if (callback(frame, frequency) == false || frame >= frequency) 90 { 91 timer.Stop(); 92 } 93 frame++; 94 }; 95 timer.Start(); 96 } 97 98 /// <summary> 99 /// 持続時間を指定してアニメーション機能を提供します。 100 /// </summary> 101 /// <param name="duration">持続時間をミリ秒単位で指定します。</param> 102 /// <param name="callback"> 103 /// bool callback(int frame, int frequency) の形でコールバックを指定します。 104 /// frame は 0 から frequency の値まで 1 ずつ増加します。 105 /// frequency はコールバックが呼ばれる回数から 1 を引いたものです。例えば frequency が 10 の時には 11 回呼ばれます。 106 /// </param> 107 public static void Animate(int duration, Func<int, int, bool> callback) 108 { 109 const int interval = 25; 110 if (duration < interval) duration = interval; 111 Animate(25, duration / interval, callback); 112 } 113 } 114} 115

上記ソース中の Animator の使い方は Windows Forms でコントロールをアニメーションさせる を参照してください。

投稿2018/08/30 00:05

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lancelot.jr

2018/08/30 01:42

下手な説明に回答していただきありがとうございます。 Visual Studioは、ほぼ、放置でしたが トライし続けます。
Zuishin

2018/08/30 01:57

メモ帳はもう使わないでください。 全ソースを 1 ファイルに収めようとすることで、オブジェクト指向の良さを潰し、バグの元になって保守性を落とす変な癖がついています。 すりこぎでいくら素振りしても野球はうまくなりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問