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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

3回答

6071閲覧

C# label ループさせる

C-shosinka

総合スコア32

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2017/06/23 15:11

###前提・実現したいこと
C#でラベルをスクロールするソフトを作成中です。しかし、ラベルをループさせる方法がわかりません。(webサイトから取得してスクロールさせる)
###発生している問題・エラーメッセージ
ラベルをループさせたいが、バグってしまう(動かない)

label1.Left = this.ClientSize.Width - label1.Width;

###該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.IO; 11using System.Net; 12using HtmlAgilityPack; 13 14namespace label 15{ 16 public partial class Form1 : Form 17 { 18 public Form1() 19 { 20 InitializeComponent(); 21 timer1.Start(); 22 timer2.Start(); 23 } 24 25 private void button2_Click_1(object sender, EventArgs e) 26 { 27 label1.Text = ""; 28 29 const string url = "xxxxxxxxxxxxxxxxxxxxxxx";//URLがはいります 30 WebClient web = new WebClient(); 31 web.Encoding = System.Text.Encoding.UTF8; 32 string html = web.DownloadString(url); 33 34 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 35 doc.LoadHtml(html); 36 37 HtmlNodeCollection nodes = 38 doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]"); 39 40 foreach (HtmlNode node in nodes) 41 42 { 43 label1.Text = node.InnerText; 44 } 45 46 timer1.Start(); 47 } 48 49 private void checkBox1_CheckedChanged(object sender, EventArgs e) 50 { 51 if (checkBox1.Checked) 52 { 53 timer2.Start(); 54 } 55 else 56 { 57 timer2.Stop(); 58 } 59 } 60 61 private void timer2_Tick(object sender, EventArgs e) 62 { 63 label1.Text = ""; 64 65 const string url = "xxxxxxxxxxxxxxxxxxxxxxx";//URLがはいります 66 WebClient web = new WebClient(); 67 web.Encoding = System.Text.Encoding.UTF8; 68 string html = web.DownloadString(url); 69 70 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 71 doc.LoadHtml(html); 72 73 HtmlNodeCollection nodes = 74 doc.DocumentNode.SelectNodes(@"/html[1]/body[1]/div[1]"); 75 76 foreach (HtmlNode node in nodes) 77 78 { 79 label1.Text = node.InnerText; 80 } 81 } 82 83 private void timer1_Tick(object sender, EventArgs e) 84 { 85 label1.Left -= 2; // 左に動かす 86 if (label1.Left < 0) 87 { 88 // 左がはみ出すので、右端に戻す 89 label1.Left = this.ClientSize.Width - label1.Width; 90 91 } 92 } 93 } 94} 95

###試したこと
this.label1.Location = new Point(10, 56);

###補足情報(言語/FW/ツール等のバージョンなど)
使用ツール:Html Agility Pack Tester
C# VisualStudio2017

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

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

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

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

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

Bongo

2017/06/24 00:13

timer1_Tick自体は実行されているでしょうか。たとえばtimer1_Tickの中でConsole.WriteLine("!");などと書けば、ずらずらとコンソールに文字が出力される状態でしょうか?
guest

回答3

0

みなさまご回答ありがとうございました!自分なりにいろいろ試していたらうまくいったのでコードを貼っておきます。みなさま本当にありがとうございました!

C#

1private void timer1_Tick(object sender, EventArgs e) 2 { 3 4 label1.Left -= 3; // 左に動かす 5 if (label1.Left + label1.Width < 0) 6 { 7 // 左がはみ出すので、右端に戻す 8 label1.Left = this.ClientSize.Width; 9 } 10 }

投稿2017/06/27 09:51

C-shosinka

総合スコア32

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

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

0

ラベルをループさせたいが、バグってしまう(動かない)

ラベルへ設定する文字列が充分に短ければ、ラベルが右から左へ動くと思います。

推測ですが、表示しようとしているページの該当DIVエレメント中のinnerTextの文字列が長すぎて横スクロールする余地がないのでは?と思いました。


ちなみに、timer2のインターバルはどのくらいでしょうか?もしデフォルトの100ミリ秒のままであるなら、アクセスしようとしているURLに対して0.1秒ごとにアクセスすることになるので、サイトによっては、それはあまりよろしくない行為になってしまう危険があると思います。

投稿2017/06/24 01:22

KSwordOfHaste

総合スコア18392

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

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

0

ベストアンサー

バグってしまう(動かない)とのことですが、正確にどのような動作を行うか書きましょう。

エラーが発生してプログラムが停止するのであれば、発生したエラーの情報も含めて書くべきですし
意図しない動作をするというのであれば、本来こうしたいということと現状こうなってしまうということを書くべきです。
動かないという表現も、正常に動かないという意味なのか、永久ループ等でプログラムが動作しているように見えなくなるという意味なのか
回答してもらう人に正確に伝わるようにしましょう。

C#

1 private void timer1_Tick(object sender, EventArgs e) 2 { 3 label1.Left -= 2; // 左に動かす 4 if (label1.Left < 0) 5 { 6 // 左がはみ出すので、右端に戻す 7 label1.Left = this.ClientSize.Width - label1.Width; 8 9 } 10 }

この部分ですが、form上にLabelを1つ置いて動作させましたが、エラーも出ず、見た目も停止せず
正常に動作しているように見えます。
(製作者の意図通りに動いているかは別です。プログラム通りに動作するという意味です。)

まず、最終的にどうしたいのかですが、
文字列|____|
となったら
___|___文|字列
したいのでしょうか?

文|字列___|
こうなったとき
_|字列__文|
したいというのでしょうか?

もし前者であれば、はみ出る判定をしなくてはいけないのは左ではなく「右がはみ出たら」という
条件になるかと思います。

後者であれば、1つのラベルではできません。
2つのラベルを使って
文|字列__文|字列
このような感じにするのが簡単かと思います。

投稿2017/06/24 00:10

編集2017/06/24 00:13
YAmaGNZ

総合スコア10222

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問