[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 05/09 16:57 / Filesize : 48 KB / Number-of Response : 179
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっとC#,C♯,C#(初心者用) Part27



1 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 17:41:19 ]
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ

ふらっとC#,C♯,C#(初心者用) Part26
pc11.2ch.net/test/read.cgi/tech/1206238049/

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文使うなんて考えてませんでした。
ありがとうございます。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<48KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef