- 1 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:41:19 ]
- このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 前スレ ふらっとC#,C♯,C#(初心者用) Part26 pc11.2ch.net/test/read.cgi/tech/1206238049/
- 119 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:22:53 ]
- >>117
ユーザコントロールを作る OnPaintBackgroundをオーバーライドして背景を描画しないようにする OnPaintをオーバーライドして各頂点およびエッジを描画する その他にも細々と設定しないといけないプロパティとかあるかも。 パフォーマンス?さぁ…
- 120 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:03:00 ]
- enum.first.tostring()で"first"は得られるのですが
enumに同期させてenum.firstならば"最初" enum.secondならば"二回目"とか任意の文字列を得るのに スマートな実装方法を教えて下さい
- 121 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:09:42 ]
- enum使わないでstructにする
- 122 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:16:13 ]
- TypeConverter 実装するとか
- 123 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:32:34 ]
- (int)enum.first
明示的にバラバラしてるんならできないけど
- 124 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:00:02 ]
- >>120
Dictionaryじゃダメな理由を聞こうか
- 125 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:27:06 ]
- >>88だけど
どなたか知ってたらヒントください。
- 126 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:57:38 ]
- >>125
ttp://bbs.wankuma.com/search.cgi?no=0&word=%94%F1%93%AF%8A%FATCP&andor=and&logs=17.txt&PAGE=50
- 127 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:57:58 ]
- >>125
Recieveにはタイムアウト設定できたと思うが、Connectには無理だったと思う
- 128 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 13:46:50 ]
- >>127
はい、できません。 最近のWindowsなら、レジストリいじればシステムグローバルな 値は変更できると思うけど。 TCP周りのいろんな設定値はユーザーランドではいじれない実装の OSがほとんどです。
- 129 名前:88 mailto:sage [2008/04/24(木) 18:30:05 ]
- >>126-128
ありがとうございます。
- 130 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 19:58:22 ]
- Equalsって何と発音するのでしょうか・・?
- 131 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:01:02 ]
- 辞書引けよ
- 132 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:16:01 ]
- コンテキストメニューにショートカットを設定したいです。
メニューの数が可変であるためにVSに頼らず動的に作成しているのですが 生成番号に対応したショートカットを動的に与えるにはどのようにすればいいでしょうか 下記の様なイメージです。 Item1(&Alt + 1) Item2(&Alt + 2) Item3(&Alt + 3)
- 133 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:17:18 ]
- >>130
無理矢理日本語で言うなら「いーくぉーる」かな。 ちなみに日本語で言う「イコール」のことな
- 134 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:42:20 ]
- C#でWindowsUI付きのFTPクライアントを作っているのですが、
UI(WinForm)をロックさせないためにBackgroundWorkerを使用しています。 BackgroundWorkerからはFTPコマンドを扱うクラス(FTPClass)のメソッド(UploadMethod)を呼び出しています。 この時、UploadMethodの進捗をUI(WinForm)に表示させたいのですが、 この場合UploadMethodの中でWinFormのコントロールを操作する処理をさせるしか ないのでしょうか? (実際にはWinFormはSTAなのでBackgroundWorkerのメソッドを介してUI変更を行います) というのも、その場合UploadMethod内のUI変更の処理は上位クラス(WinForm)の 実装を意識しないといけなくなるわけで、クラス間の結合が密になってしまうのは 好ましくないかなと感じまして。
- 135 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:43:02 ]
- >>130
いーくぁるず >>132 ちょっと↑の方のレス見ろ
- 136 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:48:12 ]
- >>132
ショートカットを設定することは出来るが、Altは使えないんじゃないかな。 Altを押した時点でコンテキストメニューは消えると思う。 ショートカットの設定は、ToolStripMenuItemなら .ShortcutKeys = (Keys)(Keys.D0 + i); でできる。
- 137 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:49:45 ]
- >>135
レスありがとうございます。 >>84-87のところでしょうか? 私が行いたいのは(&Alt + 1)の数字の部分を要素にあわせてインクリメントする(イメージ)なので コンテキストメニュー自体を動的生成している>>84-87とは問題が違ってしまいます。 説明不足申し訳ありません。
- 138 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:50:39 ]
- >>134
UploadMethodが進捗を返すのなら(返すか知らんけど)BackgroundWorker内で PeportProcessイベントを発生させればフォームに進捗を伝えられる
- 139 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:55:59 ]
- >>132
なんか発想が変な気がするよw 別にコンテキストメニューである必要もないし、メニュの数を動的に変える 必要も必ずしもないんじゃないの? ディセーブルにすれば十分に思うし、その方がユーザーにとっても明示的で わかりやすいよ。 もしコンテキストメニュー「も」必要なら、ポップアップするタイミングで メインメニューのメニューを丸ごと奪い取ればいいんだし。
- 140 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:00:15 ]
- >>137
括弧でアンダーラインが入ってるパターンのなら ToolStripMenuItem.Text = "背景色に設定(&1)"; みたいに前に&つけるだけだよ
- 141 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:02:55 ]
- ショートカットキーのこと言ってるのかただのアクセレーターキーのこと言ってるのか
判然としないねw いずれにせよちょっとピンボケした発想だと思う
- 142 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:08:29 ]
- >>136
レスありがとうございます。 ToolStripMenuItemでなくMenuItemで行ったのですが .ShortcutKeys = (Keys)(Keys.D0 + i);でキャストエラー .ShortcutKeys = (Shortcut)(Keys.D0 + i);でコンパイルは通りますが 実行時に「引数値'value'(50)は列挙型'Shortcut'に大して無効です。」とエラーになります。 >>139 ホットキーでコンテキストメニューを呼び出し全ての操作をメニュー上で行うという かなり変則的なプログラムを作っております。 通常の操作であればディセーブルで十分なのはご指摘の通りだと思います。 レスありがとうございます。 >>140 レスありがとうございます。 えと、それはItem1(1)の1の下にアンダーバーが表示されるだけで それだけでショートカットとして認識される訳ではありませんよね? >>141 申し訳ありません。 ショートカットキーとアクセレーターキーの違いを知りませんでした。 アクセレーターキーを実装したいと考えています。
- 143 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:11:09 ]
- >>142
ねえ、だからそれメインメニューじゃいかんの? なんでそんなウィンドウズの標準のお作法から外れたことをしたがるのか理解できんよ。
- 144 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:31:03 ]
- >>138
UploadMethod内では 1.アップロードファイルの確認 2.アップロードコマンドの発行 3.アップロードコマンドの終了 と3つのプロセスに分かれているのですが、それぞれのプロセスが終了するごとに UIに通知したいと考えています。各プロセスをさらにメソッド単位に分解し、 それぞれの完了ごとにReportProgressを呼ぶことも考えましたが、何かスマートな方法 は無いかものかと。 例えばWinForm側にリスナのようなものを追加し、それぞれのプロセスが終了するごとに イベントを発生させ、リスナからReportProgressを呼び出す。と言ったような事は 可能なものでしょうか?
- 145 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:34:26 ]
- >>142
デザイナで実際に設定してみればわかると思うけど、ショートカットにはCtrlかAltが必ず必要だったと思う。 それにデザイナで設定できることは、実際に設定してみてDesignet.csがどう生成されたか見るのが早い。 ToolStripMenuItem.ShortcutKeys = (Keys)(Keys.Alt | (Keys.D0+i)); 試してないけどみたいな感じで出来るんじゃないかな。
- 146 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 05:48:07 ]
- >>143
必ずそういうこと言う人がいるけど質問者の条件を変えようとするレスは書かなくていいです。
- 147 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 07:32:18 ]
- >>144
可能 Javaの人?
- 148 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 08:21:57 ]
- >>146
君のような思考を「フェティシズム」って言うんだよ
- 149 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:45:18 ]
- フェチのこと?
なんで?
- 150 名前:845 mailto:sage [2008/04/25(金) 09:46:50 ]
- 変な仕様を指摘すると「お前は言われたとおりに組んでればいいんだよ!」とかいう奴はいるなぁ
たいては後で直さなきゃいけなくなるんだけど
- 151 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 10:18:54 ]
- お前誰だよ↑
仕様にケチつけると話題がそっちに流れるだろ。 もうちょっと考えような。
- 152 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 10:38:38 ]
- 奇妙な仕様を指摘して何が悪いんだか。
- 153 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:00:52 ]
- ファシズムって言いたかったとエスパーw
- 154 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:17:48 ]
- むしろ悩んでる原因は変な仕様だってことが多いからな
- 155 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:20:40 ]
- 別にケチつけるわけじゃなく、スタンダードな方法を提示したレスをするならいいと思うけどね
- 156 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:21:45 ]
- まあ大体の初心者は変な思いつきと思い込みで阿呆な仕様にしてるよねw
- 157 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 12:11:42 ]
- >>155
それならいいよね。建設的だし。 でも批判するだけなら分かってない人でも出来ちゃうから厄介。
- 158 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 12:20:54 ]
- >>147
JavaとC#の二束の草鞋です。 C#の場合はリスナそのものに該当する仕組みは無く、 delegateを使用してリスナ相当を実装する必要があるのかなと考えているのですが
- 159 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 13:10:50 ]
- フォーム操作可能にしたいマルチスレッドならdelegate()が一番簡単と思うけど
- 160 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 13:21:20 ]
- >>158
@FtpClassにOwnerプロパティを実装 public Form Owner{ get; set;} AUploadMethodを呼ぶ前にOwnerにthis(つまりWinForm)をセット ftpClass.Owner = this; BUploadMethod内のイベントを通知したいタイミングでOwner.Invoke()を呼ぶ if(Owner!=null && UploadFileCheckEventHandler != null) Owner.Invoke(UploadFileCheckEventHandler(FtpEventArgs)) これでどうだろうか
- 161 名前:158 mailto:sage [2008/04/25(金) 13:28:19 ]
- ちと変だな
訂正 public event FtpUpLoadEventHandler UpFileChecked; public event FtpUpLoadEventHandler UpLoadStarted; public event FtpUpLoadEventHandler UpLoadFinished; こんなようなイベントを実装して、 if(Owner!=null && UpFileChecked != null) Owner.Invoke(UpFileChecked(FtpEventArgs)) とかで呼び出す
- 162 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 14:37:12 ]
- >>160
C#のイベント処理に疎いので、少し教えていただきたいのですが、 この場合Ownerで示されるFormクラスのインスタンスに、UpFileCheckedイベントが通達 されるという認識でよろしいでしょうか? その場合、Owner.Invokeでイベントを発行している形なので、FTPClassがイベントを 通達できるのはFormクラスのインスタンスに限られてしまい、FTPClassはFormクラスと 依存関係になってしまうのではと考えているのですが。
- 163 名前:デフォルトの名無しさん [2008/04/25(金) 14:49:02 ]
- C# (.NET) でコントロールを透明化したいんですけど、
obj.Parent 以外に対しても透明化というのは、無理なんでしょうか? もしくはレイヤードパネルみたいなものはないですか? やりたいのは // A,B 両方表示(A,B は完全に重なっているコントロール) A.Parent = parent; B.Parent = parent; // A だけ表示 A.Visible = true; B.Visible = false; // B だけ表示 A.Visible = false; B.Visible = true; みたいなことなんですが・・・
- 164 名前:134 mailto:sage [2008/04/25(金) 14:58:41 ]
- すいません今更ですが >>134
×(実際にはWinFormはSTAなのでBackgroundWorkerのメソッドを介してUI変更を行います) ○(実際にはWinFormはSTAなのでWinFormのInvokeメソッドを介してUI変更を行います)
- 165 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 15:12:27 ]
- >>164
FTP クラスが ProgressChanged みたいなイベント公開すればいい。 アップロード中に適当に状況が変わるなりすればイベントを起動する。 Form は その ProgressChanged イベントのイベントハンドラで Invoke して GUI に反映させる。 Owner はいらんな。SynchronzingObject ならあってもいいけど。
- 166 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:45:27 ]
- >>163
見た目を気にするなら諦めてWPFに乗り換えましょう
- 167 名前:デフォルトの名無しさん [2008/04/25(金) 22:03:36 ]
- proxy.f3.ymdb.yahoofs.jp/bc/4811d5fe_a9ed/bc/%a5%de%a5%a4%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8/slot.txt?bcIzdEIBwa.jLV2N
これを見た感想おしてください(しょぼすぎますがその辺はご了承ください)
- 168 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:06:55 ]
- >>158
二足のわらじって、君思いっきりJava脳じゃん? まぁ>>161でもちらっと出てるけどeventを作ればいいよ dobon.net/vb/dotnet/vb2cs/event.html
- 169 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:10:55 ]
- >>167
たいへんよくできませんでした
- 170 名前:167 [2008/04/25(金) 22:12:08 ]
- それは自分でも自覚してる。
あとどんなものつけたら面白くなりますか?
- 171 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:28:51 ]
- はじめはこんなもんだとは思うけどとりあえずgotoは封印しましょう
同じような処理はメソッドにまとめましょう どうでもいいけどhRandomっていう名前がキモい 参照型変数にhを付けることにしてるのか知らないけどそんなのあんまり意味無いし 付けるならslotにも付けないとおかしい
- 172 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:29:17 ]
- >>167
感想言っていいのか?本当にいいのか?
- 173 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:31:06 ]
- いいよ
- 174 名前:167 [2008/04/25(金) 22:36:02 ]
- この場合gotoつかわないとすれば何つかえばいいですか?
- 175 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:37:36 ]
- Hyoujiメソッドを呼び出せばいいんじゃないか?
- 176 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 22:40:27 ]
- >>160,165,168
教えていただいたことを参考にFTPClassにイベントを追加し 呼出元でイベントをハンドリングすることで希望通りの動作ができました。 ありがとうございました
- 177 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 23:08:55 ]
- >>167 とりあえずコメントは書こうな
using System; class slot{ static void Main(){ Console.Write("コインのもち数を入力してください"); int coin = int.Parse(Console.ReadLine()); int bell = 10,suika = 6,replay = 3; int[] slot = new int[9]; Random rand = new System.Random(); while (coin >= 3){ coin -= 3; int koyaku = rand.Next(1, 101); //スロットの値設定 for(int i = 0;i < slot.Length;i++){slot[i] = rand.Next(1,4);} //約100回に一回当たるよく分からないなにか if(koyaku == 1){ coin += 5; Console.Write("○ ○ ○\n○ 5 ○\n○ ○ ○\ncoin={0}\n\n",coin); } //通常処理 for(int i = 0;i < slot.Length;i+=3){ if(slot[i] == slot[i+1] && slot[i] == slot[i+2]){ coin += (slot[0] == 1) ? bell : (slot[0] == 2) ? suika :replay; } } //表示 for(int i = 0;i < slot.Length;i+=3){Console.Write("{0} {1} {2}\n",slot[i]+i, slot[i+1]+i, slot[i+2]+i);} Console.WriteLine("ncoin=" + coin); Console.ReadLine(); } } }
- 178 名前:167 [2008/04/25(金) 23:25:09 ]
- 177さん手直しありがとうございます。
プログラム初心者なんでそんなfor文使うなんて考えてませんでした。 ありがとうございます。
|

|