08/04/25 12:20:54
>>147
JavaとC#の二束の草鞋です。
C#の場合はリスナそのものに該当する仕組みは無く、
delegateを使用してリスナ相当を実装する必要があるのかなと考えているのですが
159:デフォルトの名無しさん
08/04/25 13:10:50
フォーム操作可能にしたいマルチスレッドならdelegate()が一番簡単と思うけど
160:デフォルトの名無しさん
08/04/25 13:21:20
>>158
①FtpClassにOwnerプロパティを実装
public Form Owner{ get; set;}
②UploadMethodを呼ぶ前にOwnerにthis(つまりWinForm)をセット
ftpClass.Owner = this;
③UploadMethod内のイベントを通知したいタイミングでOwner.Invoke()を呼ぶ
if(Owner!=null && UploadFileCheckEventHandler != null)
Owner.Invoke(UploadFileCheckEventHandler(FtpEventArgs))
これでどうだろうか
161:158
08/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:デフォルトの名無しさん
08/04/25 14:37:12
>>160
C#のイベント処理に疎いので、少し教えていただきたいのですが、
この場合Ownerで示されるFormクラスのインスタンスに、UpFileCheckedイベントが通達
されるという認識でよろしいでしょうか?
その場合、Owner.Invokeでイベントを発行している形なので、FTPClassがイベントを
通達できるのはFormクラスのインスタンスに限られてしまい、FTPClassはFormクラスと
依存関係になってしまうのではと考えているのですが。
163:デフォルトの名無しさん
08/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
08/04/25 14:58:41
すいません今更ですが >>134
×(実際にはWinFormはSTAなのでBackgroundWorkerのメソッドを介してUI変更を行います)
○(実際にはWinFormはSTAなのでWinFormのInvokeメソッドを介してUI変更を行います)
165:デフォルトの名無しさん
08/04/25 15:12:27
>>164
FTP クラスが ProgressChanged みたいなイベント公開すればいい。
アップロード中に適当に状況が変わるなりすればイベントを起動する。
Form は その ProgressChanged イベントのイベントハンドラで Invoke して GUI に反映させる。
Owner はいらんな。SynchronzingObject ならあってもいいけど。
166:デフォルトの名無しさん
08/04/25 21:45:27
>>163
見た目を気にするなら諦めてWPFに乗り換えましょう
167:デフォルトの名無しさん
08/04/25 22:03:36
URLリンク(proxy.f3.ymdb.yahoofs.jp)
これを見た感想おしてください(しょぼすぎますがその辺はご了承ください)
168:デフォルトの名無しさん
08/04/25 22:06:55
>>158
二足のわらじって、君思いっきりJava脳じゃん?
まぁ>>161でもちらっと出てるけどeventを作ればいいよ
URLリンク(dobon.net)
169:デフォルトの名無しさん
08/04/25 22:10:55
>>167
たいへんよくできませんでした
170:167
08/04/25 22:12:08
それは自分でも自覚してる。
あとどんなものつけたら面白くなりますか?
171:デフォルトの名無しさん
08/04/25 22:28:51
はじめはこんなもんだとは思うけどとりあえずgotoは封印しましょう
同じような処理はメソッドにまとめましょう
どうでもいいけどhRandomっていう名前がキモい
参照型変数にhを付けることにしてるのか知らないけどそんなのあんまり意味無いし
付けるならslotにも付けないとおかしい
172:デフォルトの名無しさん
08/04/25 22:29:17
>>167
感想言っていいのか?本当にいいのか?
173:デフォルトの名無しさん
08/04/25 22:31:06
いいよ
174:167
08/04/25 22:36:02
この場合gotoつかわないとすれば何つかえばいいですか?
175:デフォルトの名無しさん
08/04/25 22:37:36
Hyoujiメソッドを呼び出せばいいんじゃないか?
176:デフォルトの名無しさん
08/04/25 22:40:27
>>160,165,168
教えていただいたことを参考にFTPClassにイベントを追加し
呼出元でイベントをハンドリングすることで希望通りの動作ができました。
ありがとうございました
177:デフォルトの名無しさん
08/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
08/04/25 23:25:09
177さん手直しありがとうございます。
プログラム初心者なんでそんなfor文使うなんて考えてませんでした。
ありがとうございます。