[表示 : 全て 最新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/

66 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:56:50 ]
小学生のトキ、夏休みの宿題に昆虫採取をするコトにしました。
まぁ、毎日アミ持って野山を駆け回って遊んでただけなんだけど、ある日すごいのを捕まえました。

体長13.5cmのトノサマバッタ(足含まず)

まぁ、もちろん標本にして学校に提出したんだけど、次の日には学校中の噂が広がって展示場の理科室は昼休みなんかメチャ混みになっちゃったんだよね。
でも、2日ほどで撤去されちゃった上、学校が全校生徒にこんな内容のプリントを配った。

理科室にあった標本のバッタは、トノサマバッタではなく、外国のバッタである事がわかりました。
日本の生物では無いので、気にしないように。

その後、両親と共に校長室に呼ばれ、先生ではない数人の大人と話をし、両親はハンコを押したり、生活指導方針がどーとか難しいコトを言われてました。
子供心に「怒られてるんだ」ってのはわかりました。

それから十数年が経ち、なにげなく当時の事を思い出して両親に尋ねると・・・

  名前     大きさ     つかまえた場所
トノサマバッタ  13.5cm  浜○原子力発電所緑地公園
                  ↑
                コレが、まずかったらしい。

67 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:58:10 ]
コピペ君って馬鹿だな、まで読んだ。

68 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:14:15 ]
C#暦2週間ほどなのですが、ちょっと教えてください。

public class hoge{
・・・
}
と定義してあって、
hoge Vhoge = new hoge();
でインスタンスを生成し、Vhogeにはバイナリのデータが入ってるとします。
System.Io.File.WriteAllBytes を使ってバイナリを出力したいのですが、
そのような場合、第二引数としては、何を渡したらよいのでしょうか?

69 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:23:34 ]
出力したいバイナリを、byteの配列で渡す

70 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:36:21 ]
もっと真摯に回答しろよ。

71 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:38:59 ]
分からないなら答えないでください><

72 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:39:48 ]
ローカルルール
一、UCがセゾン傘下である事実を受け入れること
一、UCは流通系となった事実を受け入れること
一、クレディセゾンを誹謗中傷しないこと
一、セゾンUCを大切にすること

73 名前:68 mailto:sage [2008/04/22(火) 23:17:32 ]
>>69
やっぱり、Vhogeをbyte[]に変換しないとダメですか・・・。
変換する方向で考えてみます。

74 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:20:14 ]
>Vhogeにはバイナリのデータが入ってる
からbyte[]のメンバを持ってるんじゃないの?
何か別のかたちで持ってる?



75 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:21:23 ]
>>68
bytes
型 : System.Byte[]

ファイルに書き込むバイト。

76 名前:68 mailto:sage [2008/04/22(火) 23:43:11 ]
>>74
実際には、こんな定義になってます。
(とあるサンプルなので、中身は置いておいてもいいとは思いますが)
[StructLayout(LayoutKind.Explicit)]
public class hoge
{
[FieldOffset(0)]
public short type_a;
[FieldOffset(2)]
public short type_d;
[FieldOffset(4)]
public short datano_s;
[FieldOffset(6)]
public short datano_e;
[FieldOffset(8),
MarshalAs(UnmanagedType.ByValArray, SizeConst = 10000)]
public byte[] cdata;
}
これを、そのままのイメージでバイナリ出力したかったのですが・・・。
で、Vhogeのアドレスを渡したら、出力できるかと思ったのですが、
型の変換ができなかったので、いい方法はないかと思案中です。

77 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:32:19 ]
Marshal

78 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 06:47:30 ]
>>76
なんでそこまできっちり定義してるのに、>>68に略したのかわからん。
68の書き方じゃ求めていた答えが返ってくるわけがない。
P/Invokeで出来るんだから、何か方法があると思うのが普通。
初めて調べたけど正解は、Marshal.StructureToPtrかな?

79 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 07:13:49 ]
ってbyte[]にする必要があるんだった。コンパイルもしてないけど、こんな感じ?
2回コピーするのが気に入らん。

int size = Marshal.SizeOf(Vhoge);
byte[] data = new byte[size];
IntPtr pnt = Marshal.AllocHGlobal(size);
try{
Marshal.StructureToPtr(Vhoge, pnt, false);
Marshal.Copy(pnt, data, 0, size);
} finally {
Marshal.FreeHGlobal(pnt);
}

80 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 07:19:26 ]
AllocHGlobalなんて怖いことしなくてもfixedやGCHandle.Allocで十分ですよ

81 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 08:53:15 ]
マネージメモリに unsafe でアクセス != marshal レイアウト


82 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:17:47 ]
>>81
お前は何を言っているな

83 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:55:01 ]
あ一回はコピー生成してるのかごめん

84 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:01:28 ]
コンテキストメニューの項目数を設定で自由に変更できるプログラムを作成したいです。

とりあえず下記の様に通常コードを作成しましたが
headlineの項目をこの様に決め打ちするのでなくforループなどで動的に追加したいと思っています
どのようなに書けばいいでしょうか。ご助言願いたいです。

// コンテキストメニューの動的作成
public void ContextMenuCreate(int number)
{
// イベントハンドルを宣言
EventHandler eh = new EventHandler(MenuFactorOnClick);

MenuItem[] ItemMenu = {
new MenuItem("headline_" + 1, eh),
new MenuItem("headline_" + 2, eh),
new MenuItem("headline_" + 3, eh),
};

ContextMenu = new ContextMenu(ami);
}



85 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:04:08 ]
二つほど記述ミスがありました、申し訳ありません。

引数のintはforループに用いようと思っていたのを消し忘れました。

ContextMenuの宣言で[ami]となっていますが[ItemMenu]の間違いです。

86 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:19:44 ]
ContextMenu.MenuItems.Add()又は
MenuItem.MenuItems.Add()

87 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:09:37 ]
迅速なお返事ありがとうございます。
下記の用に書くことで目的の動作を果たせました。


// コンテキストメニューの動的作成
public void ContextMenuCreate(int number)
{
// イベントハンドルを宣言
EventHandler eh = new EventHandler(MenuFactorOnClick);

// コンテキストメニューを作成
ContextMenu = new ContextMenu();

// メニュー数を設定
ItemMenu = new MenuItem[number];

// メニューの追加
for (int i = 0; i < number; i++)
{
ItemMenu[i] = new MenuItem("headline_" + i, eh);
ContextMenu.MenuItems.Add(ItemMenu[i]);
}
}

88 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:15:33 ]
サーバー側で接続待ちをしていない状態で、
クライアント側からTcpClient.Connect();で接続しようとすると
「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」
ってエラーが発生します。
エラーになるまで20秒くらいかかってしまうのですが、
もっと早く接続できないと判断することはできないのでしょうか?

89 名前:62 [2008/04/23(水) 16:22:39 ]
ifを入れ子してやってみたのですが、できません。
どうすればいいですか?

90 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:25:03 ]
コードも出さずにどうすべきか聞くとはどういう事だ?
何故それで駄目かくらい書け。

91 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:32:33 ]
>>88
とりあえずMSDNみてみ

92 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:37:41 ]
>>90
いや、62はコード出す・出さない以前の問題じゃね?
if 文を break で抜けれるとか思ってる時点で何かおかしい。

93 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:55:00 ]
>>91
レスありがとう。
だがMSDNのどこを調べればいいのかわからない。
できたら場所を、教えてください。


94 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:56:16 ]
breakは括弧閉じまでジャンプするもんだと誤解してるのかも



95 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:57:46 ]
そこで括弧閉じればいいのにね

96 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:01:31 ]
目的:
Control.ModifierKeysを使ってモディファイアキーを判定したい。
詰まっている箇所:
複数のモディファイアを判定する方法がわからない(Shift + Alt + Vなど)

どなたかアドバイスいただけないでしょうか

97 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:06:01 ]
>>96
Keys構造体はただのビット値。

(Control.ModifierKeys & Keys.Shift) != Keys.None) & ((Control.ModifierKeys & Keys.Control) != Keys.None)
こんな感じでいけるはず

98 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:11:12 ]
(Control.ModifierKeys & (Keys.Shift | Keys.Control) != 0)

99 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:13:16 ]
Delphiの列挙値は比較が楽だったんだけどなあ。
なんでC#は似たような比較方式を採用しなかったんだろう

100 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:10:06 ]
ヘジたん的になにか気に入らないところがあったのでは

101 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:10:31 ]
TcpListener で質問なんですが
0.0.0.0 とやれば全指定なんですが

範囲指定したい場合、例えば
192.168.1.0とかやると
192.168.1.0〜192.168.1.255
とかできるんでしょうか?

102 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:24:02 ]
>>97
>>98
ありがとうございました。
うまく動作させることができました

103 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:25:10 ]
>>101
192.168.1.0であれば192.168.1.0のみになる。
0.0.0.0は特例でそういう使い方は普通ワイルドカードを利用する。

104 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 21:51:06 ]
>>103
ありがとうございました。



105 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:15:26 ]
>>95
do { } while(false)
とか?

>>99
((enumValue & flag) == flag)
を返す演算子があってもよさそうだよな

106 名前:68 mailto:sage [2008/04/23(水) 22:17:31 ]
いろいろヒントありがとうございました。C# Marshalでぐぐって、

MyStruct o = new MyStruct();
...
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(o));
try {
Marshal.StructureToPtr(o, ptr, false);
byte[] bytes = new byte[Marshal.SizeOf(o)];
Marshal.Copy(ptr, bytes, 0, Marshal.SizeOf(o));
...
} finally {
Marshal.FreeHGlobal(ptr);
}

に当たったので、>>79 さんのサンプルでいいみたいです。
助かりました。

107 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:38:29 ]
>>105
フラグはわざと便利にしてない感じがするなあ
分からないなら使わなくていい,使うにしても控えめに,っていうような意図を感じる

108 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:51:00 ]
>>107
間違いなくその通りだろうな、Win32APIのラッパーが避けられない以上、やむなく残した
としか思えないところがあるな。

109 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:53:43 ]
javaからc#に転向することになって本読んでます。
パッと見javaと似てるけど、なんじゃこれは?
というのもあります。

public xclass() : base(xclass.MethodA()) {
Console.WriterLine("XClass constructor");
}

xclass()メソッドの後ろにある、コロンとメソッド、
これは一体なんですか。
メソッドの直後にメソッドて・・・・??。

想像もつかんです。
しかもこの本には意味が書いてない。。

どういう動作になるんでしょう?

110 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:55:42 ]
なんとなく理由が分かった、ビットフィードが無くなったのもこれが理由だな
マルチスレッドだね、使用しないビットに対してもリードもライトもロックが必要になるが、どこまでロックが必要か訳わからんようになる。

111 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:56:14 ]
基底クラスのコンストラクタに引数を与える構文。

112 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:02:39 ]
>111
ありがとうございます。
他の本で読んだ記憶がうっすらよみがえってきました。。

113 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:06:04 ]
少し不思議なことがあるのですが・・・xclass.MethodA()
って何、コンパイルできないような気がしたので、自分の知識が不足しているのか、間違っているのか気になる。

114 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:12:42 ]
>>113
デリゲートが引数になっているメソッドには、そのデリゲートに合うメソッドを引数として渡せる。
実際には、デリゲートのインスタンスが生成されているんだけど。



115 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:18:03 ]
MethodA の後ろの () が、タイプミス?
MethodA の正体は static 関数?
ちょっと原文みてみたいですね、'WriterLine' だしw

116 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 07:02:10 ]
kakenai

117 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 07:05:22 ]
C#で
sakuratan.ddo.jp/uploader/source/date79504.png
上の画像のようなGUIを扱いたいのですがどうすればよいのでしょうか?

118 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 07:50:04 ]
そのPNG画像を読み込んで貼り付ければいんじゃね?

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に乗り換えましょう






[ 続きを読む ] / [ 携帯版 ]

前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