902 :
sage :2005/06/23(木) 10:53:22
InternetExplorerを操作したいのですが。。。 あるURLを1分おきにリロードして、ある文字列がHTMLの中にあった場合 メッセージボックスを出すというような小物アプリを作りたいのですが どしたらよかですか?
IE を使いたいなら System.Windows.Forms.WebBrowser でもつかってろよ 文字列の検索だけをしたいのなら WebClient の方が楽かもしれんが
要件を見ただけだとIEである必然性がどこにも感じられんな。
905 :
902 :2005/06/23(木) 13:34:27
そうですね、説明不足でした。 文字列がマッチしたらメッセージボックスを出すと同時に そのWebページを表示しているIEを前面に出すということもしたいです。
ie automation c# あたりで
907 :
898 :2005/06/23(木) 14:31:14
>900 ありがと!
スクリプト無効にされてるとアウトだと思うが 妙にそういう事に拘る厨房が多いし
はじめに断っておけばいいじゃん
別にオートメーションとスクリプトは関係ないが。 一番簡単なのは、WebClientでデータ受け取ってチェックしてヒットしたらIEを起動させる。
MSDNのリファレンスってこのオブジェクトはこれこれこうするためのものですって文章が抜けている気がする。 いきなりプロパティ語りだされてもわけわかんねーよ。 っていうのはここでいいのですか?
クラス名とメンバ名みりゃ分かるだろ
ていうか普通に書いてあると思うんだが。
例えばUriクラス、
>URI (Uniform Resource Identifier) のオブジェクト表現を可能にし、URI の一部へ簡単にアクセスできるようにします。
>URI は、アプリケーションが使用できるインターネット上のリソースを簡潔に表す記述方式です。
>Uri クラスは、URI の解析、比較、結合などの URI 処理のためのプロパティとメソッドを定義します。
>Uri クラスのプロパティは読み取り専用です。 Uri インスタンスを変更するには、 UriBuilder クラスを使用します。
>Uri クラスは、"
ttp://www.contoso.com/index.htm " などの絶対 URI だけを格納します。
>"/new/index.htm" などの相対 URI は、ベース URI を基準にして展開し、絶対 URI に変換する必要があります。
>MakeRelative メソッドは、必要に応じて絶対 URI を相対 URI に変換するメソッドです。
(以下略)
なにか足りない?
なんかすごくいい例をだしてない? 俺が今日会社で見たのはまさしくプロパティの説明から始まっていた。 ちなみにVS.NET2003付属の日本語版ね。
何を見たんだよ!
>>902 SHDocVW.ShellWindowsをforeachで
917 :
902 :2005/06/24(金) 15:05:20
>>916 どうやったらいいんでうか。。。?わかりまぜん。
分からないなら素直に910にしとけ。
919 :
902 :2005/06/24(金) 15:08:47
VBScriptでは Set Shell=Wscript.CreateObject("Shell.Application") Set ws=Shell.Windows For Each obj In ws でできたのですが。
920 :
902 :2005/06/24(金) 15:21:48
わかりました。WebClientというのを使ってみます。
921 :
デフォルトの名無しさん :2005/06/25(土) 00:23:37
Sendkeysでシステムに直接キー入力を渡せるようですが、 逆にフォームがアクティブじゃない時でもキー入力を受け取る方法は無いですか? 教えていただきたいです。
グローバルフック。 .NETではできないはずなんだがWH_KEYBOARD_LL/WH_MOUSE_LLは何故か有効だと聞いたことがある。 あとはホットキー。
IKeJIさんがここに出没していましたか。多分知り合い。俺も最近C#を。
五月蠅い
ノートン インターネットセキュリティ2005を使っています devenv.exeというスクリプトが検出されるのですがこれは認証しても問題ないのでしょうか?
普通にVSの実行ファイルじゃねぇか。
やはり.NET上で実行されるだけに起動時、ウィンドウやボタンなんかの生成が チラついたりもっさりしてるね。
>>927 CPUをもっと速いのに替えろ。
メモリを増やせ。デュアルチャンネル化しろ。
>>927 生成でチラつくなんて、いったいどんなマシン使ってるんだ?
>>927 まさか、Celeron 450MHz + 256MBなんて言わないだろうな?
家のクライアントアプリは画面遷移に5秒かかりますがなにか?
そんな糞マシンでCLR言語を使おうって気持ちがおこがましい。 逝ってヨシ!
メイン以外のFormインスタンスの生成だけは初めのApplication.Idleでやってそれを使い回すようにしてる。
>>931 それはおまいのプログラムの仕様だろw
>>927 はウィンドウやボタンなんかの生成だけでチラつくんだぞw
>>927 SuspendLayout使えばマシになるんじゃね?
936 :
デフォルトの名無しさん :2005/07/01(金) 15:06:08
C#.NETでmp3再生させようと思い、mciSendStringを使ってコーディングしてみたのですが 以下のエラーが出て先へ進めなくて困ってます。 引数 '4' : '<null>' から 'System.IntPtr' に変換できません。 'mp3_4.Form1.mciSendString(string, string, uint, System.IntPtr)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。 次のすれにコードを貼り付けるので、助言いただけるとうれしいです。
937 :
936 :2005/07/01(金) 15:08:02
[DllImport("winmm.dll", EntryPoint = "PlaySound")] static extern System.IntPtr mciSendString( string lpszCommand, string lpszReturnString, uint cchReturn, System.IntPtr hwndCallback ); private void button1_Click(object sender, System.EventArgs e) { mciSendString("open \"C:\\madonna.mp3\" type mpegvideo alias MP3", null, 0, null);//この行にエラーが出ます。 mciSendString("play MP3 notyfy", null, 0, null);//この行にもエラーが出ます }
IntPtrは構造体だから。 int a = null; とおなじぐらいおかしい。 NULLポインタを指すのはIntPtr.Zero。
939 :
デフォルトの名無しさん :2005/07/01(金) 15:22:59
System.IntPtr hwndCallback を String hwndCallback mciSendString("open \"C:\\madonna.mp3\" type mpegvideo alias MP3", null, 0, null); を mciSendString("open C://madonna.mp3 type mpegvideo alias MP3", null, 0, null); に変えてみたところ、ビルドは成功したのですが、ボタンを押してもmp3ファイルの音が鳴らないのですが 何か考えられる原因があれば教えていただけるとうれしいです。
もう@stringにしてよ〜見にくくて仕方ない。
941 :
936 :2005/07/01(金) 15:38:14
>>938 アドバイスありがとうございます。
IntPtr.Zero hwndCallback
これでビルドしてみたのですが、
型、または名前空間名 'Zero' は、クラスまたは名前空間 'System.IntPtr' に存在しません。アセンブリ参照があるか確認してください。
と出力されます。
名前空間は
using System;
using System.Runtime.InteropServices;
これらを指定してるので、問題ないと思うのですが。
>>940 アドバイスありがとうございます。
下の@string hwndCallbackの前に全角入れて右に寄るようでしたら入れて体裁整えます。
@string hwndCallback
でビルドすると通るのですが、音が鳴りません。なんででしょうか。
>>941 > IntPtr.Zero hwndCallback
あのな……。
IntPtrは型。
ZeroはIntPtr型の静的フィールド。
メソッドの宣言で値まで書いてどうする。
public void Does(Int32.MaxValue value);
なんて書かないだろう?
で、
> 音が鳴りません。なんででしょうか。
そりゃデバイス開いただけで開始しろいうコマンドを送ってないもの。
あと [DllImport("winmm.dll", EntryPoint = "PlaySound")] なんだこれ。PlaySound関数を呼んでどうする。 呼びたいのはmciSendStringだろ。
944 :
936 :2005/07/01(金) 15:57:05
>>942 アドバイスありがとうございます。
>そりゃデバイス開いただけで開始しろいうコマンドを送ってないもの。
mciSendString("play MP3 notyfy", null, 0, null);
これが再生させる命令だと思うのですが、違うのでしょうか(T T)
>ZeroはIntPtr型の静的フィールド。メソッドの宣言で値まで書いてどうする。
とりあえず、IntPtr mciSendStringに変えときました(T T)
>なんだこれ。PlaySound関数を呼んでどうする。
[DllImport("winmm.dll", EntryPoint = "mciSendString")]
ご指摘どおり上のように変えました。
しかし、音が鳴りません。また、いろいろいじってみます。
[DllImport("winmm.dll", EntryPoint="mciSendString")] extern static System.Int32 mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
947 :
デフォルトの名無しさん :2005/07/01(金) 16:02:52
DataGridのヘッダセルとセル内で改行ってできますか? 普通に"HELLO\r\nWORLD"では出来ませんでした。 Windowsアプリケーションです。
948 :
936 :2005/07/01(金) 16:13:26
>>945 アドバイスありがとうございます。
コードをそのまま張り替えてビルドしてみたのですが、
>>936 と同じエラーが表示されてしまいました。
とにかく、hwndCallbackの前の引数をstringにしないことにはビルドが通らないといった状態です。
>>946 ありがとうございます。印刷してよく読んでみようと思います。
949 :
936 :2005/07/01(金) 16:13:50
>>945 アドバイスありがとうございます。
コードをそのまま張り替えてビルドしてみたのですが、
>>936 と同じエラーが表示されてしまいました。
とにかく、hwndCallbackの前の引数をstringにしないことにはビルドが通らないといった状態です。
>>946 ありがとうございます。印刷してよく読んでみようと思います。
950 :
936 :2005/07/01(金) 16:14:42
>>945 アドバイスありがとうございます。
コードをそのまま張り替えてビルドしてみたのですが、
>>936 と同じエラーが表示されてしまいました。
とにかく、hwndCallbackの前の引数をstringにしないことにはビルドが通らないといった状態です。
>>946 ありがとうございます。印刷してよく読んでみようと思います。
951 :
936 :2005/07/01(金) 16:17:01
>>945 アドバイスありがとうございます。
コードをそのまま張り替えてビルドしてみたのですが、
>>936 と同じエラーが表示されてしまいました。
とにかく、hwndCallbackの前の引数をstringにしないことにはビルドが通らないといった状態です。
>>946 ありがとうございます。印刷してよく読んでみようと思います。
[DllImport("winmm.dll", EntryPoint="mciSendString")] public extern static System.Int32 mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); private void button2_Click(object sender, System.EventArgs e) { string FileName = @"C:\madonna.mp3"; mciSendStringA("open \""+FileName+"\"", null, 0, 0); mciSendStringA("Play \""+FileName+"\"", null, 0, 0); VCL.Netならuses MMSystem;でおわる。 いちいち 定義をインポートする必要なし。 Delphi2006 C++ つくので のりかえ検討しましょう。 ちゃんちゃん
[DllImport("winmm.dll", EntryPoint="mciSendString")] public extern static System.Int32 mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); private void button2_Click(object sender, System.EventArgs e) { string FileName = @"C:\madonna.mp3"; mciSendStringA("open \""+FileName+"\"", null, 0, 0); mciSendStringA("Play \""+FileName+"\"", null, 0, 0); VCL.Netならuses MMSystem;でおわる。 いちいち 定義をインポートする必要なし。 Delphi2006 C++ つくので のりかえ検討しましょう。 ちゃんちゃん
[DllImport("winmm.dll", EntryPoint="mciSendString")] public extern static System.Int32 mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); private void button2_Click(object sender, System.EventArgs e) { string FileName = @"C:\madonna.mp3"; mciSendStringA("open \""+FileName+"\"", null, 0, 0); mciSendStringA("Play \""+FileName+"\"", null, 0, 0); VCL.Netならuses MMSystem;でおわる。 いちいち 定義をインポートする必要なし。 Delphi2006 C++ つくので のりかえ検討しましょう。 ちゃんちゃん
955 :
936 :2005/07/01(金) 16:28:29
>>952 再生されましたヾ(*´∀`*)ノありがとうございます。
よーく見て勉強しようと思います。
DelphiやC++も検討しようかと思います。ありがとう。
mciSendText(コマンド);でうごきます。 mciSendTextの名前は好きな名前に変えてください。 stausの時は、戻り値に入ります。 こんな感じです。 textBox1.Text = ciSendText("Status \""+FileName+"\" mode"); 訂正のコード載せておきます。 // using System.Text; // を追加します。 // [DllImport("winmm.dll", EntryPoint="mciSendString")] public extern static System.Int32 mciSendStringA( string lpstrCommand, System.Text.StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback); public string mciSendText(string lpstrCommand) { StringBuilder buf = new StringBuilder(500); // サイズは適当に決めて下さい mciSendStringA(lpstrCommand, buf ,buf.Capacity ,0); return buf.ToString(); }
ハンドルにintを使うなと言うに。 EntryPointと定義する関数名が逆。 その.NETらしからぬネーミングどうにかなんない?
>>955 それから
[DllImport("winmm.dll", EntryPoint="mciSendString")]
を
[DllImport("winmm.dll")]
にしてください。
961 :
936 :2005/07/02(土) 21:53:26
>>956-960 たくさんのアドバイスありがとうございます。
皆さんのアドバイスを参考にいろいろいじって勉強しようと思います。
今まではC++を使おうかと思ったのですが、MFCやらC++.NETやらAPIやらややこしそうだったので
C#に決めたのですが、今度は型の変換がややこしいということですね。
その辺も、アプリを作りながら考えようかと思います。
どうもありがとうございました。
963 :
936 :2005/07/03(日) 20:25:44
>>962 とってもすてきなサイトをどうもありがとうございます。
すごく参考になりました。
Win32APIを使う際に、C#用に型変換しなくちゃいけないのは面倒だなと思っていたところなので
とっても助かります。
Win32API使う際にはぜひ活用しようと思います。
ありがとうございました。
964 :
デフォルトの名無しさん :2005/07/04(月) 08:36:43
指定時刻に、メッセージボックスが表示されるようにしようと思うのですが タイマーのコンポーネントを使って、1秒ごとに、アラーム時刻と現在時刻を比較して一致したら メッセージボックスを表示という仕組みにしようかなと思いついたのですが それだと、タイマーと現在時刻の同期がとれるのかという疑問がわいてきました。 C#でアラーム機能を盛り込むのに、もっとスマートな方法はないでしょうか。 タイマーのように、アラームのコンポーネントがあれば楽でいいのですが。 何か他にスマートな方法があれば助言いただけるとうれしいです。
965 :
964 :2005/07/04(月) 08:54:41
設定時刻を秒に変えて、タイマーにする方法を思いつきました。 とりあえずこの方法でやってみようと思います。 他にもっと簡単な方法があれば助言いただけるとうれしいです。
966 :
964 :2005/07/04(月) 09:23:00
やっぱり単純にタイマーで日付時刻を比較する方法にしようと思います。 簡単なコードで確認したところ、システム時計と、.NETのタイマーコンポーネントとは ちゃんと同期がとれているようです。 どうもお騒がせしました。
967 :
デフォルトの名無しさん :2005/07/04(月) 17:16:49
日付を選択できるDateTimePickerというコンポーネントがありますが 日付と時刻を選択できるコンポーネントってないでしょうか。 もしあれば教えてください。 なければテキストボックスとラベルの組み合わせを使うことにします、
DateTimePicker
969 :
967 :2005/07/04(月) 17:58:59
>>968 回答ありがとうございます。
どこか設定をいじったらDateTimePickerに時刻が現れるのかと思っていろいろ
いじってみましたが見つかりませんでした。
日付と時刻を同時に設定できるようなコンポーネントがあったらうれしいのですが。
日付しか扱えなかったらDate"Time"Pickerの名前に反するじゃないかw FormatプロパティとCustomFormatプロパティを使う。
DateTimePicker
972 :
967 :2005/07/04(月) 20:55:43
>>970-971 ご指摘のプロパティをいじったら時刻が表示されました。
どうもありがとう。CustomFormatプロパティとか調べていろいろいじってみようと
思います。
973 :
デフォルトの名無しさん :2005/07/06(水) 16:51:11
DateTime構造体を初期化するにはどのように書けばいいのでしょうか。 参考書で自作クラスのフィールドの各メンバ変数を初期化するというところで躓いてます。 参考書では using System; public class AlarmData //自作のAlarmDataクラスです。 { private DateTime date; private string title; public AlarmData() { this.date = DateTime(0); //この部分でエラーが出ます。 this.title = ""; } } このように記述されていますが、これをビルドすると 'System.DateTime' は 'クラス' を意味しますが、このコンテキストでは無効です。 と、出力されます グーグルで「DateTime 初期化 C#」とか「DateTime(0) 初期化 C#」とか「DateTime構造体 初期化」とか 入れて調べてみましたが、DateTime構造体を0に初期化する方法はわかりませんでした。 こういう場合、どのように記述すればDateTime構造体が初期化されるのでしょうか。
new
DateTime.〜
976 :
973 :2005/07/06(水) 17:04:36
>>974 this.date = new DateTime();
と書いたらビルド成功しました。ありがとうございます。
this.date = DateTime.Parse("");
と書いてみたこともあったのですが、ビルド成功しますが。はたしてこれが初期化の記述であるのか自信がありませんでした。
ParseはstringをDateTimeに変換する関数ですが、これを使って初期化したことになるのかという疑問がわいてきたんです。
>>975 アドバイスありがとうございます。
DateTime構造体のなんらかのメソッドを使って初期化する方法もあるよということでしょうか。
だとすると、上でかいたParseを使った方法でも初期化したことになるのでしょうか。
初期化というのが微妙な表現だ。 構造体は値型なんだから、値を持ってるということが事実。それがどんなものに因るにせよ。
978 :
973 :2005/07/06(水) 17:27:44
>>977 AlarmDataコンストラクタでフィールドを初期化するというところなので、初期化という表現を
使ったのですが、DateTime構造体の場合どう書けばいいのかと困ってしまいました。
とにかく、this.date = new DateTime(); でやってみようと思います。
これで何か問題があれば
>値を持ってるということが事実
ということろを参考に、何か適当に値を入れてやってみようと思います。
>>976 > this.date = DateTime.Parse("");
これって成功するの?
例外吐くような気がするけど。
980 :
973 :2005/07/06(水) 18:59:49
>>979 ビルドは成功しました。
実行してアプリを動かしてみても例外をはいたりはしてません。
が、おそらくそのコードは間違ってるのでしょうね。
981 :
979 :2005/07/06(水) 19:04:47
982 :
973 :2005/07/06(水) 19:14:19
>>981 情報ありがとうございます。
new使って今コード書いてます。たぶんこれでいけるような気がします。
どうもありがとう。
プロパティグリッドの各プロパティ表示ON/OFFの切り替えって 属性を直接書き換えないとできないのですか? 動的にbrowsable属性を切り替える感じです。 元クラスを書き換えたり継承したりはできない状況なのです。
984 :
デフォルトの名無しさん :2005/07/07(木) 13:38:58
トレイアイコンを状態によって切り替えるために以下のようなソースを作ってみましたが、 アイコンのリソースの設定をどうやったらいいか分かりません。 ヒントをいただけませんか? System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(TrayControllerForm)); if(~) { notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon1"))); } else { notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon2"))); }
985 :
984 :2005/07/07(木) 15:24:10
>984 自己レスです。 アイコンをEXEに埋め込む場合は、 RESXGEN.EXEでアイコンのイメージを.resx形式に変換して 埋め込むらしい。。。
986 :
デフォルトの名無しさん :2005/07/07(木) 15:32:46
DateTimePicker
987 :
898 :2005/07/07(木) 16:02:12
印刷プロパティのフリーのクラスライブラリー無いの?
988 :
Form1.cs :2005/07/08(金) 07:49:20
using System.Collections; public class Form1 : System.Windows.Forms.Form { private AlarmList report; public Form1() { this.report = new AlarmList(); } private void button1_Click(object sender, System.EventArgs e) { string title = textBox1.Text; this.report.Add(title); UpdateListBox(); } //リストボックスを更新するメソッド private void UpdateListBox() { ArrayList items = this.report.GetItems(); IEnumerator it = items.GetEnumerator(); listBox1.Items.Clear(); while(it.MoveNext()) { AlarmData item = (AlarmData)(it.Current); listBox1.Items.Add(item.ToString()); //.ToString()がないとListBoxに文字列が表示されない } } }
989 :
AlarmList.cs AlarmDataクラスを自作 :2005/07/08(金) 07:50:15
namespace AddList { using System; using System.Collections; public class AlarmData { private string title; public AlarmData() { this.title = ""; } public AlarmData(string title) { this.title = title; } //リストボックスに表示する用に文字列を整えるメソッド public string ToString() { string moji; moji = String.Format("{0}", title); return moji; } }
990 :
AlarmList.cs AlarmListクラスを自作 :2005/07/08(金) 07:50:48
public class AlarmList { private ArrayList items; public AlarmList() { this.items = new ArrayList(); } public void Add(string title) { AlarmData item = new AlarmData(title); this.items.Add(item); } public void Add(AlarmData item) { this.items.Add(item); } public ArrayList GetItems() { return this.items; } } }
991 :
988 :2005/07/08(金) 07:55:22
>>988 の
listBox1.Items.Add(item.ToString()); の部分を
listBox1.Items.Add(item);
にして、リストボックスにテキストボックスに入力した文字列を表示させたいのですが
listBox1.Items.Add(item); と書くとリストボックスに
AlarmList.AlarmData
と表示されてしまいます。
listBox1.Items.Add(item); と書いてリストボックスに文字列を表示させるにはどうすれば
いいのかで悩んでます。
同じコードを前にC++で書いたことがあるのですが、そのときはlistBox1.Items.Add(item);
と書いてもちゃんと文字列が表示されました。
なのでC#のなんらかの原因があるのかと思うのですが、何か助言いただけるとうれしいです。
992 :
988 :2005/07/08(金) 08:04:04
なんで listBox1.Items.Add(item); にしたいかというと 後々、リストボックスから一行を削除するのに this.report.Remove(item); と書いて、削除しようとするとアプリが固まってしまうからです。 listBox1.Items.Add(item) にすると固まらずに一行を削除可能なのですが そうすると今度は、リストボックスに表示されるはずの文字列の代わりにAlarmList.AlarmData という文字列が表示されてしまうので困ってます。
このコード、コンパイル時に警告が出ているはずだが。
994 :
988 :2005/07/08(金) 08:21:10
>>993 こちらでは、ちゃんとビルド成功しますし、アプリの実行もできてるのですが。
投稿するために極力けずりましたが、けずったものでもちゃんとビルド成功してますけどなんでだろう。
警告とエラーは別物なんだが
996 :
988 :2005/07/08(金) 08:33:30
>>995 アドバイスありがとうございます。
出力ウィンドウをよく見てみたら
ビルドの完了 -- エラー 0、警告 1
とありました。
'AddList.AlarmData.ToString()' は継承されたメンバ 'object.ToString() を隠します。
現在のメンバでそのインプリメンテーションをオーバーライドするには、override キーワードを追加してください。
オーバーライドしない場合は、new キーワードを追加してください。
と出ます。
しかし、listBox1.Items.Add(item.ToString()); とToStringをつけると警告が消えます。
ここに何かヒントがあるのでしょうか。
ちょっとAlarmData.ToString()をいじってみようかと思います。
997 :
988 :2005/07/08(金) 08:38:25
>>995 解決しました。
public override string ToString()
{
}
にしたところ、 listBox1.Items.Add(item) でちゃんと文字列が表示されました。
どうもありがとうございました。大変たすかりました。
結局問題の本質は理解しないというかしようとしないんだろうな……。
999 :
988 :2005/07/08(金) 08:49:49
>>998 'AddList.AlarmData.ToString()' は継承されたメンバ 'object.ToString() を隠します。
現在のメンバでそのインプリメンテーションをオーバーライドするには、override キーワードを追加してください。
オーバーライドしない場合は、new キーワードを追加してください。
の意味が残念ながらわかりません。
ご指摘のとおり、なんか知らないけどoverrideつけたら解決したよという段階にすぎません。
プログラミングの習得にかなりの時間使っちゃったので、今はもうとにかく動くものを作ろうという決意のもとやってます。
結局、ご指摘の問題の本質は理解できてませんが、時間があいたらその件はじっくり考えようと思います。
今、自分なりに考えた解釈は
クラスの設計時に、ToStringというメソッドを作ると、オブジェクトをToStringの返す文字列に整形してくれるんだけど
それにはoverrideって書かないとやってあげないよっていう意味かなとしか解釈できません。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。