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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
2デフォルトの名無しさん:2007/01/09(火) 00:53:05
前スレ
ふらっとC♯, C#(初心者用) Part11
http://pc10.2ch.net/test/read.cgi/tech/1166240484/

関連スレ
C♯, C#相談室 Part36
http://pc8.2ch.net/test/read.cgi/tech/1165656839/
3デフォルトの名無しさん:2007/01/09(火) 00:53:36
Visual C# Express Edition (無料)ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

.NET Framework SDK (2.0)
http://msdn2.microsoft.com/ja-jp/library/ms310244.aspx

MSDN Visual C# Express Edition フォーラム
http://forums.microsoft.com/msdn-ja/ShowForum.aspx?ForumID=187&SiteID=7
Visual Studio ユーザーグループ
http://vsug.jp/

@IT Insider.NET
http://www.atmarkit.co.jp/fdotnet/index.html
Insider.NET 会議室 ディレクトリ
http://www.atmarkit.co.jp/fdotnet/index/bbs/index.html

宇宙仮面の C# プログラミング / C# Programming
http://ukamen.hp.infoseek.co.jp/
WisdomSoft C#入門
http://wisdom.sakura.ne.jp/programming/cs/index.html
WisdomSoft Microsoft .NET入門
http://black.sakura.ne.jp/~third/system/msnet/msnet.html
どっとねっとふぁん
http://dotnetfan.org/
緑のバイク 初めてのC# 〜 覚え書き 〜
http://homepage3.nifty.com/midori_no_bike/CS/
どぼん!の .NET Tips
http://dobon.net/vb/dotnet/
.NET のつぼ
http://park16.wakwak.com/~mimi/dotnet/top.html
4デフォルトの名無しさん:2007/01/09(火) 00:54:08
5デフォルトの名無しさん:2007/01/09(火) 00:55:43
>>1
6デフォルトの名無しさん:2007/01/09(火) 00:56:38
スレ立て乙。次からはこれもテンプレに追加してください。

MSDNライブラリ 2006年6月版
http://www.microsoft.com/downloads/details.aspx?FamilyID=373930cb-a3d7-4ea5-b421-dd6818dc7c41&DisplayLang=ja

MSDNをローカルで見れる。
7デフォルトの名無しさん:2007/01/09(火) 01:05:59
スレ立て乙。次からはこれもテンプレに追加してください。

釣りは過疎ってる時に50レス程度に
8デフォルトの名無しさん:2007/01/09(火) 01:12:01
http://pc10.2ch.net/test/read.cgi/tech/1166240484/999

while(Checked==False) sleep(100);

とかすれば出来る
9デフォルトの名無しさん:2007/01/09(火) 01:13:44
ただ同期処理はC#にあるエレガントなやり方を使ったほうがいいだろうな
C#、同期とかでググって見るとか、前スレのキーワードをググって見るとか
10デフォルトの名無しさん:2007/01/09(火) 01:14:35
なあ別のスレッドの値て何よ?
Checkedじゃないわけ?
11デフォルトの名無しさん:2007/01/09(火) 01:16:03
マルチスレッドがよくわからんのだろう
スレッド間でどういうやり取りが出来るかが見えていないとみた
12デフォルトの名無しさん:2007/01/09(火) 01:17:36
Checkedがセットされるまではただ待つんだろ?
なんで値?を取得する必要があるわけ?
13デフォルトの名無しさん:2007/01/09(火) 01:18:04
checkedプロパティのSetで行いたい処理(メソッド)を実行すればいいじゃんと
いまだに思っている俺がいるんだがなんか間違っているのか?
14デフォルトの名無しさん:2007/01/09(火) 01:18:24
>>11
それは回答してる一部のやつらも同じ
15デフォルトの名無しさん:2007/01/09(火) 01:19:27
Thread1がwhile内でCheckedを使っているのに、他所のスレッドThread2からそれを更新できるのか?
がわかんないんじゃないの?
16デフォルトの名無しさん:2007/01/09(火) 01:19:50
推理

1)スレッド1でちょっと待っている間に、スレッド2がCheckedをtrueに変更したら即座に待ちを止めてtrue時の処理
2)待ち時間タイムオーバー時は(念のためCheckedを確認して)何らかの処理

ってことかな?
17デフォルトの名無しさん:2007/01/09(火) 01:20:18
実はマルチスレッドじゃなかったりしてな。
そう思い込んでるだけで。
そんなわけねーとは思うがこんなんでスレッドなんて扱えねーだろ
18デフォルトの名無しさん:2007/01/09(火) 01:21:12
初心者ってーのはそんなモンでソ
19デフォルトの名無しさん:2007/01/09(火) 01:22:33
スレッド間の協調動作を、片方のスレッドだけで確実にやるなんて不可能
20デフォルトの名無しさん:2007/01/09(火) 01:25:12
アクターがどっちかってのがわかってないのも問題だな
21デフォルトの名無しさん:2007/01/09(火) 01:25:28
>>15
逆の勘違いなら見るが…
22デフォルトの名無しさん:2007/01/09(火) 01:25:42
本当におまいら御飯5杯くらい食うのなww
23デフォルトの名無しさん:2007/01/09(火) 01:26:13
だいたいこんな感じです
thread2は変更不可
値の取得しかできません

thread1          thread2
.              .
bool msg;           .
msg=returnBoolMethod();    .
.              public void returnBoolMethod()
.              {
trueでないと↓を        .
実行しない            return (true);
.
次の処理            }
.              .
.              .
24デフォルトの名無しさん:2007/01/09(火) 01:28:13

なんだそれは…
25デフォルトの名無しさん:2007/01/09(火) 01:29:10
おれたちはおまえのお母さんじゃないんだから
おまえの考えてることなんて分からないんだよ。
悲しいことにね。
26デフォルトの名無しさん:2007/01/09(火) 01:30:17
>>16
そうです
27デフォルトの名無しさん:2007/01/09(火) 01:30:26
>>23
たのむから、
>>15>>16のようなわかりやすい処理の流れを説明してくれ
28デフォルトの名無しさん:2007/01/09(火) 01:30:33
returnBoolMethodを実行してるのはthread1なわけで
29デフォルトの名無しさん:2007/01/09(火) 01:30:41
Thread1

  while((msg=thread2.returnBoolMethod)==False) sleep(100);

  次の処理


じゃだめ?
30デフォルトの名無しさん:2007/01/09(火) 01:32:19
それでなんでwhileでできないと思う…
trueがかえるまで待つんじゃないのか?
31デフォルトの名無しさん:2007/01/09(火) 01:33:03
29はスレッドについてちょっとは勉強したほうがいい
32デフォルトの名無しさん:2007/01/09(火) 01:33:59
なあ、スレッドにメソッドがあるのは
どういう状態を表してるんだ?
33デフォルトの名無しさん:2007/01/09(火) 01:35:00
つーかスレッドってのは実効環境の事だろ?
Threadオブジェクトってのは単なるスレッドの状態を持ってるオブジェクトだろ?
34デフォルトの名無しさん:2007/01/09(火) 01:35:00
>>29
そのwhileの中にsleepが2秒たったら、諦めるというコードを入れればいけるかも!
ちょっと試して見ます
35デフォルトの名無しさん:2007/01/09(火) 01:35:15
36デフォルトの名無しさん:2007/01/09(火) 01:36:01
>>33
×実効
○実行
37デフォルトの名無しさん:2007/01/09(火) 01:36:57
>>29
あ、いや、だめだ。

returnBoolMethodは、それ自体が他の処理もやっていて
その処理が何度も実行されてしまうからwhileの中に入れるのはだめなんです

>>32
スレッドの意味もよくわかってないです。
スレッドというか、別のクラスと考えてください。
スレッドとかマルチスレッドとかそういうのはわかりません。
38デフォルトの名無しさん:2007/01/09(火) 01:37:35
ゴメン
C#ってThreadクラスとかってって無いの?
39デフォルトの名無しさん:2007/01/09(火) 01:38:19
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

40デフォルトの名無しさん:2007/01/09(火) 01:38:23
おいおい今までのダメですの嵐はなんだったんだよ
41デフォルトの名無しさん:2007/01/09(火) 01:38:33
>>37
じゃあ、処理をばらせばいいだろ
42デフォルトの名無しさん:2007/01/09(火) 01:40:13
理想的な釣技だなおい
43デフォルトの名無しさん:2007/01/09(火) 01:40:27
おーい、別のスレッド言ってたのはなんだったんだ?
まじで>>17か?
44デフォルトの名無しさん:2007/01/09(火) 01:41:10
メソッドは間違ってました。忘れてください

条件

1.Aクラスから、StaticなBクラスを呼び出して値を返してもらう
2.その値を返すタイミングはわからない。最大2秒待つ
3.そのBクラスは一切変更できない。呼び出しと値の返すことしかできない。
4.Bクラスは1度しか呼び出せない。
5.値はTrueかfalseを返してくる。どちらかが返ってくるまでAクラスの処理は待機する
45前スレ801:2007/01/09(火) 01:42:39
>>43
誰かがそういう風に言ったので
私がやろうとしてることはスレッドと呼ばれるものだと
思い込んでました。すみません。
46デフォルトの名無しさん:2007/01/09(火) 01:43:35
>>44
Bクラスのメソッドを呼ぶ。

返ってくるまでそのスレッドはブロックされる。

以上。終了。
47デフォルトの名無しさん:2007/01/09(火) 01:44:08
>>44
ただ値が帰ってくるのを待てば良い。
非同期呼び出しとかしなければ、何をするまでもなく待機してくれる。
48デフォルトの名無しさん:2007/01/09(火) 01:44:11
2秒待つって時点で既に非同期になってるわけだが・・・
49デフォルトの名無しさん:2007/01/09(火) 01:44:52
>>37
その1回の呼び出しは誰が…
1回て…
ただよんでtrueなら処理するだけ?



なわけねーよな…
50前スレ801:2007/01/09(火) 01:46:33
>>41
ばらすということは、Aクラスを別のとこから呼び出すということになりますよね?
じゃあ、その呼び出し元はやっぱり、値が返ってくるまで待たなければならず
値が返ったかどうかもわかりません

親の親のそのまた親のって感じで処理が↑へと遺伝していくだけじゃないですか?
51デフォルトの名無しさん:2007/01/09(火) 01:46:54
え、まじで呼ぶだけですむ事やろうとしてたわけか?
52前スレ801:2007/01/09(火) 01:48:25
>>47
それはごもっともですが
問題なのは。Bクラスは、非同期であるということなんです
同期型なら、値が返ってきたら、次の処理という風に
自然に自動でやってくれますが

AクラスとBクラスは非同期で、それぞれが勝手に動いてます
53デフォルトの名無しさん:2007/01/09(火) 01:49:34
最大で2秒しか待たないのに
値が返るまで待たないといけないと。






さてさて
54デフォルトの名無しさん:2007/01/09(火) 01:50:41
>>50
その前に>>44の条件がよくわからんのだが、
>1.Aクラスから、StaticなBクラスを呼び出して値を返してもらう
>2.その値を返すタイミングはわからない。最大2秒待つ
っていうのはどういう意味なんだよ
メソッドを呼べば値は帰ってくるだろ?
Aクラスの時なんかの状態とメソッドの返り値は同期していないってことだろ?
55デフォルトの名無しさん:2007/01/09(火) 01:50:45
>>52
同期メソッドの非同期呼び出し
http://msdn2.microsoft.com/ja-jp/library/2e08f6yc(VS.80).aspx

キーワード: デリゲート BeginInvoke WaitHandle

以上。
おやすみ。
56デフォルトの名無しさん:2007/01/09(火) 01:51:02
クラスが非同期??
57デフォルトの名無しさん:2007/01/09(火) 01:51:52
(´-ω-`)...zzzZZZ
58デフォルトの名無しさん:2007/01/09(火) 01:52:12
ブールを返すメソッドがいつ帰ってくるか分からん?
5947:2007/01/09(火) 01:52:13
>>52
俺が言っている 【非同期】 は IAsyncResult とかが出てくるほうだけど、その認識でOK?
もしそうなら IAsyncResult -> AsyncWaitHandle -> WaitOne(TimeSpan, Boolean) で解決するけど、これじゃ不満?
60前スレ801:2007/01/09(火) 01:53:21
>>54
Bクラスはユーザーからの入力待ちと考えてください。実際は違いますけど
なので、呼び出したからすぐ値が返ってくるわけではないです
61前スレ801:2007/01/09(火) 01:55:09
AクラスはBクラスの返り値待ちで
Bクラスはユーザーからの入力待ちです
62デフォルトの名無しさん:2007/01/09(火) 01:55:37
>>60
Bクラスで状態が変ったらAクラスに通知するんじゃダメな理由は何?
通常、UIはオブザーバーパターンの実装になるだろう?
63デフォルトの名無しさん:2007/01/09(火) 01:55:42
値は返ってこないがメソッドはすぐ帰ると
でその戻り値は普通にブールと






有り得るかそんなの!
64デフォルトの名無しさん:2007/01/09(火) 01:57:45
なぁどこまでスレ無駄使いするんだ?
65前スレ801:2007/01/09(火) 02:00:32
>>55
メソッドを呼び出したいわけじゃなく、クラスを呼び出したいんです
66デフォルトの名無しさん:2007/01/09(火) 02:01:09
「スレッドの無駄遣い」という言葉はよく使われるが、実態が無いがなw
実質的に誰も困る事はあるまいw
67デフォルトの名無しさん:2007/01/09(火) 02:02:13
>>65
1つの方法に固執するのはよくない
なんでそんなにヘンな前提を置きたがるのかがわからんからなんともいえんが
あまりいいつくりとはいえないだろうね
68前スレ801:2007/01/09(火) 02:03:59
単純に何かしらの値が返ってきたら処理をするってプログラムがしたいだけだったのに
どうやら相当難しいことみたいですね。
もしくは、初心者スレでは許容範囲超えてるのかな
とにかく、わたしもまだ風呂も入ってないので
今日はこの辺でお暇させていただきます

長々とお付き合いして頂いた方々
ほんとうにありがとうございました。
69デフォルトの名無しさん:2007/01/09(火) 02:04:07
>>65
先ず用語を覚えろ。話はそれからだ。
70デフォルトの名無しさん:2007/01/09(火) 02:06:08
>>68
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
>もしくは、初心者スレでは許容範囲超えてるのかな
71デフォルトの名無しさん:2007/01/09(火) 02:07:38
>>68
お前が問題を難しくしているだけだ
72デフォルトの名無しさん:2007/01/09(火) 02:07:50
ニセモンだろ
73デフォルトの名無しさん:2007/01/09(火) 02:09:09
クラスを呼び出すとはコレイカに?
74前スレ801:2007/01/09(火) 02:09:56
dllです。それ以上は言えません
75デフォルトの名無しさん:2007/01/09(火) 02:10:03
おりももう寝なきゃナー
今日はJavaの宿題スレで宿題してやっちゃったり
ここでヘンなやつの相手しちゃったり
無駄な体力使っちゃったなーwww
76デフォルトの名無しさん:2007/01/09(火) 02:11:40
なんでマ板ってIDねーの?
77デフォルトの名無しさん:2007/01/09(火) 02:11:48
で、結局 801 が何をやりたかったのか、正確に理解した奴はいるか?
78デフォルトの名無しさん:2007/01/09(火) 02:13:12
正解が出そうになると、意味がわからないと逃げ
また、新しい条件を設けてのらりくらり
楽しかったお^^
79デフォルトの名無しさん:2007/01/09(火) 02:13:45
いるわけねー
80デフォルトの名無しさん:2007/01/09(火) 02:16:03
はいここまで無駄レス
81デフォルトの名無しさん:2007/01/09(火) 02:16:26
いや、おれは釣りじゃなくて本物のあほと見たい
82デフォルトの名無しさん:2007/01/09(火) 02:19:52
あほで確定
83デフォルトの名無しさん:2007/01/09(火) 02:22:44
あほっつうか、ホントに何も分かってない本物のど素人だろ
84デフォルトの名無しさん:2007/01/09(火) 02:24:21
> 63
だから、Aから呼んだ先Bでは別スレッド開始してすぐ戻ってくるんだろ...


1)呼び元AでスレッドCを開始、スレッドCはタイマーをはってBを呼び戻りを待つ
 AはスレッドCが終わるのを待つ
2)スレッドCはタイムアウトもしくはBからの戻りでAに制御を戻す

ってことかな(´д`)どうかな
85デフォルトの名無しさん:2007/01/09(火) 02:29:26
だったらなんで戻り値がブールなんだよ。
値を返すメソッドだって言ってるじゃねーか
86デフォルトの名無しさん:2007/01/09(火) 02:31:40
そんならただの非同期呼び出しでいいだろ
87前スレ801:2007/01/09(火) 02:36:00
いい例を思いついたので最後書きます
もう少し調べてわからなければ、また質問させていただきます

string msg =Str.SubString(initA)

MessageBox.Show(msg)

SubStringの反応が悪く、値を返してくれるかわからない
そういう場合どうしますか?
値がもどらなければ、msgはnullのままです。
通常は、値が返ってくるまでmessageboxの処理はやらないのが自然ですけど
値が返ってくる来ないに関係なく次のmessageboxの処理まで行ってしまうということです
8884:2007/01/09(火) 02:39:39
>85

> 問題なのは。Bクラスは、非同期であるということなんです
> 同期型なら、値が返ってきたら、次の処理という風に
> 自然に自動でやってくれますが
>
> AクラスとBクラスは非同期で、それぞれが勝手に動いてます

って書いてあるからなぁ
AクラスからBクラスのメソッドを呼び出したら、Bクラスのメソッドが終わるまでAには制御が戻らないよね?
...あきらめて寝るw
8984:2007/01/09(火) 02:41:29
>87

> 返ってくる来ないに関係なく次のmessageboxの処理まで行ってしまう
マジ?
90前スレ801:2007/01/09(火) 02:41:50
>>88
戻らないのは同期型の場合です。
戻る戻らないに依存しないのが非同期の関係です
91デフォルトの名無しさん:2007/01/09(火) 02:45:17
だからその場合最終結果はどうやって取得する仕様なんだよ
9284:2007/01/09(火) 02:45:26
>90

んじゃ >84 でどぉ?
93デフォルトの名無しさん:2007/01/09(火) 02:47:32
最終結果を取得する方法が元々ないなら
そんなこと出来るわけないのは分かるだろ
94前スレ801:2007/01/09(火) 02:47:37
>>91
値は1回だけ返ってくるので、それが正解です。
95デフォルトの名無しさん:2007/01/09(火) 02:48:39
>94
日本語でおk
96デフォルトの名無しさん:2007/01/09(火) 02:50:16
だったらメソッドが戻ればもう結果は分かってんじゃねーのか
どこに待機の必要があるわけ?
97前スレ801:2007/01/09(火) 02:55:39
>>84
これなら、AがBをタイマーで張って待ってるのと変わらないんです


>>96
Bメソッドは、そのまたCメソッドを呼び出すので
そのCメソッドが値を返す返さないに関係なく
Bメソッドは結果を出してしまうためです。
98前スレ801:2007/01/09(火) 02:57:02
なので、厳密にいうと、AクラスのAメソッドは、実は、Cメソッドを監視しているわけです。
BはAにもCにも依存せずに、すぐに結果を出してしまうわけです。
99デフォルトの名無しさん:2007/01/09(火) 02:59:30
一回だけ返る結果はメソッドの戻り値じゃないのか?
その場合はどうにかして結果を調べる必要があるだろ?
メソッドの結果は最終結果じゃないんだから。
だったら調べる方法は用意しつあるだろ?
あとはまあそれをポーリングするだけだろ?

メソッドの戻り値が最終結果なら最初から何も考える必要ないだろ。
100デフォルトの名無しさん:2007/01/09(火) 03:00:48
HelloWorldからやりなおせ
101前スレ801:2007/01/09(火) 03:03:10
Aクラスの

A1メソッド


  Bメソッド();//すぐに値を返して次の処理(Cメソッド呼び出し)へ移る

  Cメソッド();//いくつかの処理をして値を返す



Bメソッドが呼び出さないで、Cメソッドを呼び出すとエラーになります。
また、Bメソッドと同期を取ると、Cメソッドは実行されません。
BとCは親子関係になります。Bが親、Cが子であり、
AクラスからはBもCも他人の家族です
102デフォルトの名無しさん:2007/01/09(火) 03:07:25
全然分からねーが、つまり最終結果は調べられないということかな?
つまりCメソッドの結果

調べる方法はないけど結果は取得する必要があるわけかな?








出来るかぼけ
103デフォルトの名無しさん:2007/01/09(火) 03:08:09
全然分からねーが、つまり最終結果は調べられないということかな?
つまりCメソッドの結果

調べる方法はないけど結果は取得する必要があるわけかな?








出来るかぼけ
104デフォルトの名無しさん:2007/01/09(火) 03:09:16
なんだ?
全然分からねー
105デフォルトの名無しさん:2007/01/09(火) 03:11:55
AがCを呼んでるように見えるんだがそうじゃないんだよな?
106デフォルトの名無しさん:2007/01/09(火) 03:12:54
親子ってなんだ?
家族ってなんだ?
107デフォルトの名無しさん:2007/01/09(火) 03:16:02
Bメソッドが呼び出さないで、Cメソッドを呼び出すとエラーになります。
また、Bメソッドと同期を取ると、Cメソッドは実行されません。
BとCは親子関係になります。Bが親、Cが子であり、
AクラスからはBもCも他人の家族です


えーっと...まぁなんだ
日本語でおk
108デフォルトの名無しさん:2007/01/09(火) 03:30:13
> 次のコード サンプルは、メソッドを非同期に呼び出して、メソッドが完了するまで最大 2 秒間待機する方法を示しています。

なんかそれらしいのがMSDNにありますけどぉ...
109前スレ801:2007/01/09(火) 04:09:32
Aクラス

A−1メソッド
{
      BクラスのBメソッド();//処理をする

      //ここで待機

      /*次の処理 ここもBの1の処理し終えてなければならない

      */

      CクラスのCメソッド();//Bが1の処理し終わってなければ呼び出してはならない


A-2メソッド:Bの1の処理が終わっていることを判断するメソッド


110前スレ801:2007/01/09(火) 04:11:45
A-2メソッドをwhileで繰り返し処理することで解決しました
ありがとうございました。
おやすみなさい
111デフォルトの名無しさん:2007/01/09(火) 05:24:08
解決したらしいw
何をどうやりたかったのか最後まで分からなかったが、
こんだけレス費やしてその解決方法はひでぇ。
>>55,>>59では駄目なのか?
112前スレ801:2007/01/09(火) 05:36:33
>>111
Bメソッドの処理が終わるまで待つのはダメなんです
Bメソッドの処理が終えるのはCメソッド(イベント)が終わるのが条件ですから
Bメソッドの処理が終わるまで待つと、Bメソッドのところで止まったままになり
CメソッドへもAクラスから終了するように命令できないのでダメなんです

↓わかり易くいうとこんな感じ

Bメソッド

   ・Cデリゲート
   ・Cイベントが終了したのでBメソッドも終了


Cイベント

  AクラスのAメソッドからCイベントを終了するように命令されるのを待つ


Cイベントを終了させるにはAクラスから処理しなければならない
113デフォルトの名無しさん:2007/01/09(火) 05:37:18
もういいよ。かえれ
114デフォルトの名無しさん:2007/01/09(火) 10:30:21
最後まで全然分かりやすくないのがワロス
115デフォルトの名無しさん:2007/01/09(火) 10:33:03
終了メソッドとか何の話だよw
ていうか、死ぬほど出てるポーリングとどう違うんだよ
116前スレ801:2007/01/09(火) 11:57:18
マルチスレッドっていうのは
負荷が高い処理が時間のかかる処理を並行してやらせるためのものですよね?
これだと、次の処理に行ってしまうのでダメ

ポーリングだと、処理が終えるまで待機してくれるのはいいですが
そのポーリングで呼び出した先のメソッドはどうやってかけばいいんでしょ?
実際、Cイベントがいつ終了するかはわからないので何度もスキャンしてやらないだめなんです


Cメソッド

  Scan();


↑をポーリングで待機したって、falseがすぐに帰ってくるだけです

答えはすぐ返ってきますが、それは真ではないです。
成功すれば1秒以内にtrueが返ってくるけど
そうでない場合はfalseが返ってきます
117デフォルトの名無しさん:2007/01/09(火) 12:11:15
> string msg =Str.SubString(initA) 
> MessageBox.Show(msg) 

結局はこれなんだろ?
んで、SubString はタイムアウト時に null を返す可能性があると。

ここまでは合ってるのか?
118前スレ801:2007/01/09(火) 12:14:26
>>117
実際にはnullじゃなくて何も返さないんですけどね
返さなかったというのはわかるので、同じことですけど
119デフォルトの名無しさん:2007/01/09(火) 12:19:42
>>118
何も返さないというのはありえない。
null ないし何らかの string インスタンスが返るという大前提がある。

1つ聞くが、本当に C# なんだよな?
120前スレ801:2007/01/09(火) 12:24:08
do
{
Thread.Sleep(ScanDelay);

int ExitsAnser=Scant();

if(ExitsAnser!=0) doWhileKeeped=false;
if(OverWorkTime> ScanningTime) doWhileKeeped=false;

OverWorkTime /= ScanDelay;
}
while(doWhileKeeped)
121前スレ801:2007/01/09(火) 12:27:50
>>119
C#ですが、相手は値を返さずにエラーを起こしてハングアップする可能性があります
ハングアップした場合は、処理を中断させるように促さなければなりません
122デフォルトの名無しさん:2007/01/09(火) 12:36:33
>>121
そんな糞な相手は使うなw

Thread 使って SubString を切り離し、元 Thread では Join をタイムアウト付きで実行、
んで Join から抜けても Thread 終了していなかったら Abort してやれ。
123デフォルトの名無しさん:2007/01/09(火) 12:37:11
最初に質問してたのと全然内容が違うのがバロスw
124前スレ801:2007/01/09(火) 12:44:20
>>122
それだと元Threadが生きたままになってしまうので
ユーザー側がハングアップしていると思い何度も
一連のプログラムを実行させようとする可能性があります
ユーザー側に暗黙的なルールを持たせたくはないのです
なので、この処理をしている間はGUIは入力イベントを受け付けない
設計でないといけません。
125デフォルトの名無しさん:2007/01/09(火) 12:46:11
>>124
この処理をしている間は GUI イベントを受け付けなければいいじゃないか。
Control.Enable で GUI の有効・無効が設定できるぜ。
126前スレ801:2007/01/09(火) 12:50:34
>>125
受け付けないなら、マルチスレッドにする意味がないとも言えます
127デフォルトの名無しさん:2007/01/09(火) 12:52:51
>>126
あるから! ちゃんと意味はあるから騙されたと思ってやってみろ。・゚・(ノД`)・゚・。
128前スレ801:2007/01/09(火) 12:55:31
>>127
確かに両方ともハングアップしてしまう可能性があるので強制終了というハメにならないためにマルチスレッドにして終了プロセスのみ受け付けるようにしたほうがいいかもしれませんが、だが、断る!
129デフォルトの名無しさん:2007/01/09(火) 13:09:21
撤回却下!
それから俺用語も使うな!
130デフォルトの名無しさん:2007/01/09(火) 13:17:24
妙なこだわりがあると何も出来ないっていう典型例だな……。
131デフォルトの名無しさん:2007/01/09(火) 13:18:34
どっかで聞いたそれらしい言葉を並べてt難しく見せようとしてるだけだな
132デフォルトの名無しさん:2007/01/09(火) 13:23:15
ま、解決したんだしいいじゃない
レスしているうちに問題点が見つかることはよくあること
初心者スレだしどんどん質問していこう
133デフォルトの名無しさん:2007/01/09(火) 13:24:15
MIDIキーボードの鍵盤を押したら、PC側で音を鳴るようにしたいです。

参考書籍として、.NET Framework プログラミングテクニック Vol.3
を購入しましたが、midiOut しか扱っていません。
C#でmidiInの参考になるようなサイトがあったら教えてください。
134デフォルトの名無しさん:2007/01/09(火) 13:26:22
せめて普通の人間に分かるように質問してほしい
135デフォルトの名無しさん:2007/01/09(火) 13:27:54
あのな、普通ポーリングって言ったら、
結果が得られるまで繰り返すんだよ
136デフォルトの名無しさん:2007/01/09(火) 13:29:20
>>134
それではおまえが801の変わりにわかりやすく質問してみろ
おれは結局何がしたかったのかがわからん
137デフォルトの名無しさん:2007/01/09(火) 13:30:59
>>121
それはCメソッドのことたろ
Bメソッドの話をしてたんじゃないのか?
138デフォルトの名無しさん:2007/01/09(火) 13:32:50
>>135
コード書いて教えてやれよ
139デフォルトの名無しさん:2007/01/09(火) 14:11:20
801は糞だけど、彼のおかげでいろいろ勉強になったw
ちょっと感謝w
140デフォルトの名無しさん:2007/01/09(火) 14:39:14
何いってんだ?
死ぬほど書かれてただろうが
141デフォルトの名無しさん:2007/01/09(火) 14:48:08
XmlSerializerでデシリアライズしてプロパティに配列をもったクラスに格納するとき、
その配列に対応するXMLの要素の繰り返しは、順番を保持したまま格納される?
142デフォルトの名無しさん:2007/01/09(火) 15:17:33
配列は大丈夫だったはず
143141:2007/01/09(火) 15:31:35
経験的には大丈夫そうなんだけど、確証がほしいのです
贅沢でスマソ
144デフォルトの名無しさん:2007/01/09(火) 15:38:21
オーバーライドとオーバーライトの違いを述べよ
145デフォルトの名無しさん:2007/01/09(火) 15:40:37
146デフォルトの名無しさん:2007/01/09(火) 17:17:10
上乗せと上書き
147デフォルトの名無しさん:2007/01/09(火) 17:25:20
>>143
そんなに心配ならインデックスとアイテムをセットにした構造体に入れとけば
148デフォルトの名無しさん:2007/01/09(火) 18:22:25
801の問題は前スレで解決していた。
149デフォルトの名無しさん:2007/01/09(火) 20:11:06
誰も目的がわからんから、雑談にしかなってないなw

早くエスパー現れてコード書いて解決してくれよ!
もうやってらんない
150デフォルトの名無しさん:2007/01/09(火) 20:22:35
while(true){
Console.Write("BABEL");
}
151デフォルトの名無しさん:2007/01/09(火) 21:53:59
Visual C# 2005のWebBrowser コントロールって、新しいウインドウで表示されるとき、
NewWindowでそれをキャンセルするか、それを許可して、IEで開かせるかしかできないの?

どこのURLを開こうとしているのかを取得して、WebBrowserコントロールで表示したいんだが…。
NewWindowの中では、今、表示しているページのURLしか取れないし…。
152デフォルトの名無しさん:2007/01/09(火) 21:59:15
153デフォルトの名無しさん:2007/01/09(火) 22:00:23
>>151
普通に考えてできないわけないだろ
154デフォルトの名無しさん:2007/01/09(火) 22:35:23
初心者ってスタートの時点であっちの方向むいてるから難しいんだな…て思った。
155デフォルトの名無しさん:2007/01/09(火) 22:43:11
>>154
はげどー
156デフォルトの名無しさん:2007/01/10(水) 00:09:34
ねぇどこら辺で釣り終わった?
157デフォルトの名無しさん:2007/01/10(水) 00:18:09
801で検索w
158デフォルトの名無しさん:2007/01/10(水) 00:37:18
148・・・無駄にしすぎだろ・・・
159デフォルトの名無しさん:2007/01/10(水) 00:38:15
801の人気に(ry
160デフォルトの名無しさん:2007/01/10(水) 01:13:07
XP sp2
C# 2005 Express Edition を使用しています。
下記のようにMDIフォームからフォームを子(以下、childForm)として呼び出しているのですが、

Form childForm = new Form();
TextBox txtBox = new TextBox();
childForm.Controls.Add(txtBox);
childForm.MdiParent = this;
childForm.Text = "子フォーム";
childForm.Show();

childFormのテキストボックスに対してCtrl+Vでの貼り付けができません。
同様にCtrl+Cでのコピーもできません。
テキストボックス内での右クリックメニューから選択すればできます。
childForm.MdiParent = this;
の部分をコメントにしてchildFormをMDIの子フォームとして呼び出さなければCtrl+VもCもできます。
MDIフォームの子フォームというのはそういうものなのですか?
161デフォルトの名無しさん:2007/01/10(水) 01:23:56
単純にそれだけのフォームなら問題なくコピー貼り付けできるので、それ以外の部分にも原因はありそうだな。

つか今時 MDI ?
162デフォルトの名無しさん:2007/01/10(水) 01:29:31
>>160
コピー・貼り付けボタン用意しちゃえ
163デフォルトの名無しさん:2007/01/10(水) 01:54:45
>>160
親フォームのメニューとかで Ctrl+C と Ctrl+V を喰ってないかチェックしたれ
164160:2007/01/10(水) 03:14:53
>>161 >>162 >>163
回答ありがとうございます。問題解決しましたので書いておきます。

MDIフォームを作るときに「新しい項目の追加」から「MDI親」を選択して
自動的に作成されたMDI親フォームをそのまま使用していたのですが、
その親フォームにはメニューバーやツールバーやステータスバーがはじめからついていて、
そのメニューバーの[編集]-[切り取り]に割り当たっていたショートカット(Ctrl+V)に
持って行かれていたようです。
割り当たっているショートカットを削除したら無事貼り付けできました。

ありがとうございましたヾ(*´∀`*)ノ キャッキャ

ところでMDIって流行っていないんですか??
165デフォルトの名無しさん:2007/01/10(水) 03:27:16
プログラミングするときどんなフォントがお勧めですか?
166デフォルトの名無しさん:2007/01/10(水) 03:32:17
漏れは「Osaka - 等幅」を10ポイントのアンチエイリアスかかった状態で。
お勧めかどうかは知らない。
167デフォルトの名無しさん:2007/01/10(水) 09:36:05
>>165
スレ違い

おまえらコーディングで使ってるフォントなんだ!!
ttp://pc10.2ch.net/test/read.cgi/tech/1032261438/
168デフォルトの名無しさん:2007/01/10(水) 11:38:04
すみません。質問させてください。

ハッシュの配列を作ろうとしているのですが

Hashtable[] ht = new Hashtable[10];
ht[0]["testkey"] = "testvalue"; ← ここでヌルポ参照エラー

になってしまいます。。。

ht["testkey"][0] = "testvalue";
ht[0].Add("testkey", "testvalue");
ht[0].Keys["testkey"] = "testvalue";

すべてだめでした。。。
もうどうしたらいいのか。。。
お願いします。
169デフォルトの名無しさん:2007/01/10(水) 11:43:16
参照型の配列を作っても配列の要素は全部 null だよ
170デフォルトの名無しさん:2007/01/10(水) 11:57:16
>>169
なるほど。。。
勘違いをしていたようです。ありがとうございます。
171デフォルトの名無しさん:2007/01/10(水) 12:01:33
>>168
Hashtable ht1 = new Hashtable[10];
Hashtable ht2 = new Hashtable[10];

hashの変数を二つ用意するのでは駄目なのかな
このほうが可読性が良いし、データとして扱い易い
んじゃないかな
172デフォルトの名無しさん:2007/01/10(水) 12:10:34
>>168
ガッ!
173デフォルトの名無しさん:2007/01/10(水) 12:54:11
>171
?…??
174デフォルトの名無しさん:2007/01/10(水) 13:01:05
>>171
型 'System.Collections.Hashtable[]' を型 'System.Collections.Hashtable' に暗黙的に変換できません。
175デフォルトの名無しさん:2007/01/10(水) 13:01:19
そっとしといて上げようよ ヌルポ
176デフォルトの名無しさん:2007/01/10(水) 13:02:21
ヒソヒソ (AA略
177デフォルトの名無しさん:2007/01/10(水) 18:55:13
>>175
ガッ!
178デフォルトの名無しさん:2007/01/10(水) 22:29:56
初心者に初心者が答えるスレはここですか?
179デフォルトの名無しさん:2007/01/10(水) 22:58:07
一応自称中級者もいるよ。
180デフォルトの名無しさん:2007/01/10(水) 23:05:06
自称中級者が初心者にしったかするスレです
181デフォルトの名無しさん:2007/01/10(水) 23:19:23
眠いんだけど寝たほうがいいですか?
182デフォルトの名無しさん:2007/01/10(水) 23:41:47
True
183181:2007/01/10(水) 23:45:37
>>182
ありがとうございました
仕事残ってるけど寝る事にします
184デフォルトの名無しさん:2007/01/10(水) 23:46:48
OnSleep
185デフォルトの名無しさん:2007/01/11(木) 00:15:29
OnSleep(SleepEventArgs e)
186デフォルトの名無しさん:2007/01/11(木) 00:29:05
protected override void OnSleep(SleepEventArgs e)
{
 //base.OnSleep( e );
 base.OnWakeUp( new WakeUpEventArgs( this.mother ) );
}
187デフォルトの名無しさん:2007/01/11(木) 00:33:33
protected override void OnSleep(SleepEventArgs e)
{
e.Dream.Add(new 気になるあの子());
}
188デフォルトの名無しさん:2007/01/11(木) 00:48:44
e.Cancel = true;
189デフォルトの名無しさん:2007/01/11(木) 01:34:09
こういうつまんない書き込みしかねーのかよ
190デフォルトの名無しさん:2007/01/11(木) 01:35:56
学生の宿題が終わったんだこんなもんだろ?
191デフォルトの名無しさん:2007/01/11(木) 15:50:49
クリップボードのデータが変更された場合に発生する通知は、どうやって得たらいいのでしょうか。
教えてエロい人!><
192デフォルトの名無しさん:2007/01/11(木) 17:54:17
ヒント: SetClipboardViewer
193デフォルトの名無しさん:2007/01/11(木) 20:40:55
ありがとう >>192 ( ^ω^)
APIでやるんですね☆
194デフォルトの名無しさん:2007/01/11(木) 21:20:10
クリップボードチェーン
195デフォルトの名無しさん:2007/01/12(金) 00:06:31
IEのアドレスバーに入力されているテキストはどうやったら取得できますか
196デフォルトの名無しさん:2007/01/12(金) 00:16:13
現在見ているアドレスじゃなくてアドレスバーのテキストか。
FindWindow / FindWindowEx でアドレスバー探して WM_GETTEXT を SendMessage かね。
197デフォルトの名無しさん:2007/01/12(金) 08:54:25
質問させて下さい。

DataSet(拡張子xsd)を継承して拡張する事は可能でしょうか?
198デフォルトの名無しさん:2007/01/12(金) 10:37:49
試してみたらどうかな?
199デフォルトの名無しさん:2007/01/12(金) 11:48:40
誰か!このコードを簡潔に直してください。おながいします。


private void button1_Click(object sender, System.EventArgs e)
{
DialogResult dr = folderBrowserDialog1.ShowDialog();
if(dr == DialogResult.OK)
list();
}

private void button2_Click(object sender, System.EventArgs e)
{
DialogResult dr = folderBrowserDialog1.ShowDialog();
if(dr == DialogResult.OK)
list2();
}

200199:2007/01/12(金) 11:49:17
つづき

private void list()
{
textBox1.Clear();
listBox1.Items.Clear();

textBox1.Text = folderBrowserDialog1.SelectedPath.ToString();

DirectoryInfo di = new DirectoryInfo(textBox1.Text) ;

foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
{
listBox1.Items.Add(dir.Name);
}

foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
{
listBox1.Items.Add(file.Name);
}
}
201199:2007/01/12(金) 11:50:35
つづき2

private void list2()
{
textBox2.Clear();
listBox2.Items.Clear();

textBox2.Text = folderBrowserDialog1.SelectedPath.ToString();

DirectoryInfo di = new DirectoryInfo(textBox2.Text) ;

foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
{
listBox2.Items.Add(dir.Name);
}

foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
{
listBox2.Items.Add(file.Name);
}
}
202デフォルトの名無しさん:2007/01/12(金) 12:00:24
何でそうしてほしいのかわからんが、
list()の引数でTextBoxを渡せればlist2はいらんわな。
203デフォルトの名無しさん:2007/01/12(金) 17:28:02
もっと簡潔になるかもね
private void button1_Click(object sender, System.EventArgs e)
{
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  list(textBox1, folderBrowserDialog1.SelectedPath.ToString());
}
private void button2_Click(object sender, System.EventArgs e)
{
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  list(textBox2, folderBrowserDialog1.SelectedPath.ToString());
}

private void list(TextBox textBox,ListBox listBox, string strPath)
{
 textBox.Clear();
 listBox.Items.Clear();
 textBox.Text = folderBrowserDialog1.SelectedPath.ToString();

 DirectoryInfo di = new DirectoryInfo(strPath);

 foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
 {
  listBox.Items.Add(dir.Name);
 }
 foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
 {
  listBox.Items.Add(file.Name);
 }
}
204デフォルトの名無しさん:2007/01/12(金) 17:29:54
>>203
SelectedPathをToString()してる意味が分からん。
205デフォルトの名無しさん:2007/01/12(金) 17:33:58
あー間違ってるし・・・
private void list(TextBox textBox,ListBox listBox, string strPath)
{
 textBox.Clear();
 listBox.Items.Clear();
× textBox.Text = folderBrowserDialog1.SelectedPath.ToString();
○ textBox.Text = strPath;
206デフォルトの名無しさん:2007/01/12(金) 17:35:13
>>204
ぬお、気づかれた・・・orz
207デフォルトの名無しさん:2007/01/12(金) 18:09:24
textBox.Clear();
も必要なし
208デフォルトの名無しさん:2007/01/12(金) 18:17:49
list呼び出すときにListBox渡してない
listの引数にstrPathはいらない
209203:2007/01/12(金) 18:26:07
あーもうだめだめだ・・・orz
すまん>>199
private void button1_Click(object sender, System.EventArgs e)
{
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  list(textBox1, listBox1);
}
private void button2_Click(object sender, System.EventArgs e)
{
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  list(textBox2, listBox2);
}

private void list(TextBox textBox,ListBox listBox)
{
 listBox.Items.Clear();
 textBox.Text = folderBrowserDialog1.SelectedPath.ToString();

 DirectoryInfo di = new DirectoryInfo(textBox.Text);

 foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
 {
  listBox.Items.Add(dir.Name);
 }
 foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
 {
  listBox.Items.Add(file.Name);
 }
}
210デフォルトの名無しさん:2007/01/12(金) 18:26:09
>>199 何ですか?この駄作は・・・
211デフォルトの名無しさん:2007/01/12(金) 18:31:53
だからSelectedPathにToStringはいらな(ry
212203:2007/01/12(金) 18:44:18
ぐへへへ

※listBoxEx:渡されたパスからフォルダ、ファイルリストを表示する
setPathメソッドを実装したカスタムコントロール

private void button1_Click(object sender, System.EventArgs e)
{
 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  textBox1.Text = folderBrowserDialog1.SelectedPath;
  listBoxEx1.setPath(textBox1.Text);
}
private void button2_Click(object sender, System.EventArgs e)
{
  textBox2.Text = folderBrowserDialog1.SelectedPath;
  listBoxEx2.setPath(textBox2.Text);
}
213デフォルトの名無しさん:2007/01/12(金) 19:28:07
>>196
できました。有難うございました
214デフォルトの名無しさん:2007/01/13(土) 19:49:01
画像を用紙に印刷したいのだが、スケーリング条件は、
1 印刷領域をできるだけ命一杯使う
2 用紙と画像の縦横比が異なる場合長いほうを印刷領域に合わせる
お願いします。
215デフォルトの名無しさん:2007/01/13(土) 20:46:44
いやです。
216デフォルトの名無しさん:2007/01/13(土) 21:34:54
サービスとして動くプログラムを作りたいのですが、
サービスについての知識が全くありません。
参考になるサイトがありましたら教えてくだ
217216:2007/01/13(土) 21:54:33
VB.NETスレでも訊いたのですが、
回答がなかったのでこちらで訊きます
218デフォルトの名無しさん:2007/01/13(土) 21:56:59
まるちいくない
219デフォルトの名無しさん:2007/01/13(土) 22:28:37
MSDN2
220デフォルトの名無しさん:2007/01/14(日) 00:03:06
>>216-217
ttp://www.itmedia.co.jp/enterprise/articles/0502/01/news083.html
コレで満足か?
あとコレだけはおぼえておけ





マルチは死ね
221デフォルトの名無しさん:2007/01/14(日) 00:35:32
まずはメイド服。話はそれから。
222デフォルトの名無しさん:2007/01/14(日) 00:41:14
223デフォルトの名無しさん:2007/01/14(日) 22:54:03
AボタンとBボタン、押されたときの処理をどちらも同じ事をさせたいのですが、
同じコードを両方に書けば簡単ですね。
他に方法はありますか?
224デフォルトの名無しさん:2007/01/14(日) 23:02:09
>>223
とりあえずここから
・A/Bに同じイベントを登録する
・A/Bで同じMethodを呼び出す
225デフォルトの名無しさん:2007/01/14(日) 23:06:27
>・A/Bに同じイベントを登録する

微妙にいってることが違う。
226223:2007/01/14(日) 23:07:42
>>224
AのイベントをBで呼び出すことは出来ますか?
227デフォルトの名無しさん:2007/01/14(日) 23:12:35
>>223
プロパティウインドウで呼び出すイベントハンドラをマウスで変えるだけ
228デフォルトの名無しさん:2007/01/14(日) 23:13:52
>>226
答えずに答えにあやつけるご意見番の>>225に聞いてwww
229デフォルトの名無しさん:2007/01/14(日) 23:13:57
buttonA.Click += new EventHandler( buttons_Click );
buttonB.Click += new EventHandler( buttons_Click );

ってことじゃなくて?
230デフォルトの名無しさん:2007/01/14(日) 23:17:17
>AのイベントをBで呼び出すことは出来ますか?

イベント呼び出すのとイベントハンドラ呼ぶのはべつ。
231223:2007/01/14(日) 23:17:46
>>224,227
あ、これで出来るんですか!
ありがとうございました。勉強になりました!

>>229
自分の知識では、まだ理解できないので調べてみようと思います。
232225:2007/01/14(日) 23:18:45
227が俺の回答
でもこの方法は勧めない。
233223:2007/01/14(日) 23:27:20
自分の知識不足でイベントハンドラというのがよくわかりませんが、
やりたいことはまさに>>227です。
この方法は勧めない、とありますが、どういった理由からなんでしょうか?
234225:2007/01/14(日) 23:28:32
>>233
名前の問題&ゴミの始末を自分でできるならよし。
235デフォルトの名無しさん:2007/01/14(日) 23:37:08
イベントハンドラとはイベントが発生したとき呼ばれるもんだな。

細かく書くと全然違うけどこんな感じ

ボタンクリック

OnClick

イベント発生

イベントハンドラ
236225:2007/01/14(日) 23:39:06
ふーん
237223:2007/01/14(日) 23:41:54
ボタンをクリックする、などがイベントで、
イベントによる処理がイベントハンドルという事であっていますか?

>>225
お手数かけますが、もう少し具体的に教えていただけますか?
238223:2007/01/14(日) 23:43:05
イベントハンドル → ×
イベントハンドラ → ○

失礼しました。
239デフォルトの名無しさん:2007/01/14(日) 23:57:03
>>237
225じゃないが
×A/Bに同じイベントを登録する
○A/B双方のClickイベントに対して同じイベントハンドラを登録する
てことかな
イベントハンドラはイベントが発生したときの処理
240223:2007/01/15(月) 00:06:48
>A/B双方のClickイベントに対して同じイベントハンドラを登録する
そういうことですね。

>イベントハンドラはイベントが発生したときの処理
なんとなく、イベントとイベントハンドラの違いがわかりました。
ありがとうございます。
241デフォルトの名無しさん:2007/01/15(月) 02:46:15
ボタンクリック程度なら、それぞれのイベントハンドラから
同じプロシージャ呼んだ方が初心者らしくて良いと思うのだが。
242デフォルトの名無しさん:2007/01/15(月) 04:36:47
TextBoxのReadOnlyをTrueにしたときのKeyDownイベントで
コントロール+E,R,J,L
が発生しくて困っています。
フォーカス移動のショートカットのようなのですが、
回避してイベントを受け取る方法はありませんか?
243デフォルトの名無しさん:2007/01/15(月) 11:40:12
ありません
244199:2007/01/15(月) 14:45:51
>>202->>212

遅くなりましたがありがとうございました。

>>212
>※listBoxEx:渡されたパスからフォルダ、ファイルリストを表示する
>setPathメソッドを実装したカスタムコントロール

↑の作り方が分からなくて・・結局こんな感じになりました。

private void list(TextBox textBox,ListBox listBox)
{
 listBox.Items.Clear();
 textBox.Text = folderBrowserDialog1.SelectedPath;

 DirectoryInfo di = new DirectoryInfo(textBox.Text);

 foreach (DirectoryInfo dir in di.GetDirectories()) // フォルダの一覧表示
 {
 listBox.Items.Add(dir.Name+"*");
 }
 foreach (FileInfo file in di.GetFiles()) // ファイルの一覧表示
 {
 listBox.Items.Add(file.Name);
 }
}

245199:2007/01/15(月) 14:46:50
上の続き

private void button1_Click(object sender, System.EventArgs e)
{
DialogResult dr = folderBrowserDialog1.ShowDialog();
if(dr == DialogResult.OK)
if ((sender as Button).Name == "button1")
{
list(textBox1,listBox1);
}
else
{
list(textBox2,listBox2);
}
}

で、ボタン1と2とでイベントハンドラを共有してます。
どうでしょうか。
246デフォルトの名無しさん:2007/01/15(月) 15:23:43
ハンドラを共有するこたないのでは
どうしても一緒にしたかったら
button_click(int nButton) でも作って両方のハンドラからこれを呼ぶとか
247デフォルトの名無しさん:2007/01/15(月) 19:10:29
普通メソッド呼ぶよな。
後でボタン変えるときも便利。
248デフォルトの名無しさん:2007/01/15(月) 19:14:31
コントロールの同一性の判別にNameを使うのは邪道。
せめて (sender == this.button1) とかにしとけ。
249デフォルトの名無しさん:2007/01/15(月) 19:27:08
ちゃんとソース読んでる人がいた!!
250デフォルトの名無しさん:2007/01/15(月) 19:31:56
プログラム始めたんですが、彼女が出来ません。
釣りなんでしょうか?
251デフォルトの名無しさん:2007/01/15(月) 19:32:07
あんまりからかってやるなw
252デフォルトの名無しさん:2007/01/15(月) 19:35:02
ハンドラの箱を開けてしまったようだ
253デフォルトの名無しさん:2007/01/15(月) 20:16:49
>>245
asを使うならnullチェックしろ
他の型が来ないとわかってるなら普通にキャストしろ
NullReferenceExceptionが出たら原因がわかりにくい
254デフォルトの名無しさん:2007/01/15(月) 21:06:41
あえて、thisをつける理由を教えてください
this.listBox1などなぜわざわざやってるのかがわからない
255デフォルトの名無しさん:2007/01/15(月) 21:08:26
ローカル変数とインスタンスメンバの区別をつけるため。
256デフォルトの名無しさん:2007/01/15(月) 21:10:57
旧バージョンのVisualStudioでインテリセンスのメンバ一覧を開くためによくthis.と打ったな
今は一文字目から開いてくれるけど
257デフォルトの名無しさん:2007/01/15(月) 21:14:43
>>255
ローカル変数ってメソッド内の変数のことですよね?
それぐらいわざわざ書かなくても区別できると思うんですけど
258デフォルトの名無しさん:2007/01/15(月) 21:16:43
public MyClass(string name){
this.name = name;
}
259デフォルトの名無しさん:2007/01/15(月) 21:17:32
>>257
区別できないときにはthisをつける必要があるだろ。

そこでインスタンスメンバにthisが付いてたり付いていなかったりすると紛らわしいから俺は全部につけることにしてる。
260デフォルトの名無しさん:2007/01/15(月) 21:18:36
一目ですぐ分かるし
大規模になってくればなおさら

以前this付けずに作ってた時期のソース見ると
見にくいこと限りなし。

インテリセンスでローカル変数を除外できるという利点もあるし
261デフォルトの名無しさん:2007/01/15(月) 21:23:44
public int Property{
 get{ return this.value; }
 set{ this.value = value; }
}

public int Property{
 get{ return value; }
 set{ @value = value; }
}
262デフォルトの名無しさん:2007/01/15(月) 21:29:33
public MyClass(string name){
this.name = name;
}
個人的にはこの名前の付け方は勧めない。
string nameの部分を
string nameeという風にミスタイプした場合に悲劇が起こる。

263デフォルトの名無しさん:2007/01/15(月) 21:31:03
>>262
MSDNにある命名方法に従えばそうせざるを得ない
264デフォルトの名無しさん:2007/01/15(月) 21:34:00
引数を変な名前にするな,とあるだけで,外から見えないメンバに関しての規定はないよ
265デフォルトの名無しさん:2007/01/15(月) 21:34:04
個人的にだよ。

言ってる意味分かってない人はいないよな?
266デフォルトの名無しさん:2007/01/15(月) 21:39:59
しかしprefixつけるのはなんか嫌だな
267デフォルトの名無しさん:2007/01/15(月) 21:41:09
こういうのprefixっていわない

268デフォルトの名無しさん:2007/01/15(月) 21:42:11
m_nameとかのことだろ
269デフォルトの名無しさん:2007/01/15(月) 21:42:21
>>267
m_nameのm_のことだと思うよ
270デフォルトの名無しさん:2007/01/15(月) 21:48:37
>>262のような場合でも
ちゃんとVSが警告してくれるよ
271デフォルトの名無しさん:2007/01/15(月) 21:53:09
普通のクラスはMSDNの命名方法にのっとってるが、Formクラスだけは別扱いにしてる。
Formクラスはそれ自体がデカイ上にポトペタでメンバが増えていくから全体の見通しが付きにくいので、
thisも付けまくるし各種プレフィックスもハンガリアン記法もためらわず使ってる。
272デフォルトの名無しさん:2007/01/15(月) 21:55:06
privateかinternalならプレフィックスもハンガリアンも使い放題
273デフォルトの名無しさん:2007/01/15(月) 23:10:36
this.name=Form2.Name;

Form1のプライベートメンバであるnameよりForm2.Nameの方が目立つから腹立つので
Form1のもNameと宣言してるんだけどダメ?
274デフォルトの名無しさん:2007/01/15(月) 23:11:43
意味不明
275デフォルトの名無しさん:2007/01/15(月) 23:20:39
メニュー作成して、そこの項目を追加しようとしてるんだけど
マニュアルには
MenuStrip.Itemsに追加できるのはToolStripMenuItem って書いてるのに
インテリセンスだと、menuStrip1.Items.Add(ってやるとToolStripItemsしか追加できないんだけど
どういうこと?
menuStrip1.Items[].と入力してもToolStripItemだから、.DropDownItems.Addができないんだけど・・
これってバグ?


c#EE
276デフォルトの名無しさん:2007/01/15(月) 23:24:09
>>275
1. ToolStripMenuItemはToolStripItemsの孫クラス
2. キャストしろ
277デフォルトの名無しさん:2007/01/15(月) 23:27:17
>>273
VBっぽくなるからやめれ
278デフォルトの名無しさん:2007/01/15(月) 23:32:28
>>276
なるほどそういうことか
ありがとう
279199:2007/01/16(火) 09:44:09
>>246->>248

ありがとう。コードを簡潔にするにはイベントハンドラ共有とか使った方がいいと思ってたけど、
こういう時はメソッド呼んだ方がいいんだね。勉強になりました。
280デフォルトの名無しさん:2007/01/16(火) 12:35:19
WINDOWSエクスプローラーのようにディレクトリをツリー表示できるコンポ−ネント無い?
281デフォルトの名無しさん:2007/01/16(火) 14:52:56
ListViewを2つ作成したのですが、それぞれのListViewのアイテムを独立して選択できません。
また1つのListViewで、1つのアイテムしか選択できないようにしたいのですが、どうしたら良いのでしょうか><

教えて下さい。エロい人
282デフォルトの名無しさん:2007/01/16(火) 15:04:38
>>281

ListViewのHideSelectionをFalseにしろ。
ただし、フォーカスがあたってない方はグレイで反転される。

2つ目はMultiSelectをFalseにしる。
283デフォルトの名無しさん:2007/01/16(火) 15:06:56
ID3タグを編集するソフトを作りたいです。
どうすれば編集できるのでしょうか?
既にそういうソフトがあるのは知ってるのですが、
ID3タグをどのような仕組みで取得するか知りたいです。
よろしくお願いします。
284デフォルトの名無しさん:2007/01/16(火) 15:21:52
285デフォルトの名無しさん:2007/01/16(火) 15:23:51
本当に、ありがとう☆ >>282

図々しくも、もう1つだけ教えて下さいエロい人!
デフォルトでアイテムを選択させるには、どうしたらイイディスカ??
ListBoxだと ListBox.SelectedIndex みたいなのが知りたいです ><
286デフォルトの名無しさん:2007/01/16(火) 15:51:22
>>285
listView.SelectItems.Add(listView.Items[0])
287デフォルトの名無しさん:2007/01/16(火) 18:19:25
詳しい方ちょっと教えてください。
コンパイラ・コンパイラに興味あるんですが、
C#にもJavaCCみたいなツールはありますか?
288デフォルトの名無しさん:2007/01/16(火) 18:20:59
>>287
ある
289デフォルトの名無しさん:2007/01/16(火) 18:25:38
>>288
早速のレスありがとうございます。
ツール名があれば教えていただきたいのですが・・・
290デフォルトの名無しさん:2007/01/16(火) 18:31:23
ツール名は多分あるだろう
291デフォルトの名無しさん:2007/01/16(火) 18:33:15
ツール名は何といいますか?
292デフォルトの名無しさん:2007/01/16(火) 18:33:52
いや、遊ぶのはそのくらいで良いやんww

ttp://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html
java 用のコンパイラコンパイラだけど、なぜか C# も吐ける
293デフォルトの名無しさん:2007/01/16(火) 18:40:01
ありがとう。jayですね。
聞いたことあったけどC#が使えるのは知らなかった。
面白そうなので早速使ってみます。
294デフォルトの名無しさん:2007/01/16(火) 22:40:18
295デフォルトの名無しさん:2007/01/16(火) 22:41:08
うあ、まちがって直リンしちまった・・・。
すまん。
296283:2007/01/16(火) 23:07:05
>>284
thx!
297デフォルトの名無しさん:2007/01/17(水) 00:10:09
質問です。
DeflatStreamを使って圧縮するのと、BWT+LZ78ってどっちが縮みますか?
298デフォルトの名無しさん:2007/01/17(水) 00:16:24
DeflatStreamは全然縮まん(むしろ増えることもある)ので、圧縮が目的なら自分で実装汁
299デフォルトの名無しさん:2007/01/17(水) 01:32:09
どんなデータを圧縮しようとしたんだよ。
300デフォルトの名無しさん:2007/01/18(木) 12:40:28
プロジェクト内のソースコードの参照についての質問です。

プロジェクトが存在するディレクトリ外にある共通のクラスを参照したいのですが、
既存の項目の追加を行っても、プロジェクト下にソースコードをコピーしてしまいます。

どのようにしたらいいのでしょうか?
301デフォルトの名無しさん:2007/01/18(木) 12:48:06
>>300
追加ボタンのドロップダウンでリンクとして追加
302デフォルトの名無しさん:2007/01/18(木) 13:00:54
>>301
Thx.

>追加ボタンのドロップダウンでリンクとして追加
追加ボタンというのはツールチップで
”新しい項目の追加”と表示されるボタンでOK?
そこには”リンク”という項目が見あたらない。
303デフォルトの名無しさん:2007/01/18(木) 13:06:55
>>302
既存項目の追加のダイアログ
304デフォルトの名無しさん:2007/01/18(木) 13:12:35
>>303
でけた〜
ありがとうございました。(ずーとなやんでたんだよ〜)
305デフォルトの名無しさん:2007/01/18(木) 18:24:31
プロジェクトを右クリックして「フォルダを追加」で
そのフォルダと同じ名前のフォルダを追加してからコードファイルを普通に追加でもおk
306デフォルトの名無しさん:2007/01/18(木) 18:50:35
フォームのクライアントエリアを、左クリック&マウス移動で
ウィンドウ自体を移動させたいのですが、上手くいきません。


protected override void WndProc(ref Message m) {

base.WndProc(ref m);

switch (m.Msg) {

case WM_LBUTTONDOWN:
PostMessage(this.Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, m.LParam);
break;

default:
break;
}
return;
}

PostMessageをインポートし、各必要な値(WM_LBUTTONDOWN, WM_NCLBUTTONDOWN, THCAPTION)は定義してあります。
ドコが悪いのでしょうか☆
307デフォルトの名無しさん:2007/01/18(木) 18:59:01
308デフォルトの名無しさん:2007/01/18(木) 19:11:31
えーっと上手くいきませんという書き方はダメです。
どのようになるのか書いたほうがいい。
309デフォルトの名無しさん:2007/01/18(木) 19:12:21
switch(m.Msg) {
case WM_NCLBUTTONDOWN:
 base.WndProc(ref m);
 if (m.wParam == HTCLIENT) m.wParam = HTCAPTION;
 break;
}

かな。脳内でしかビルドしてない。
310デフォルトの名無しさん:2007/01/18(木) 19:16:11
switch (m.Msg)
{
    case WM_NCHITTEST:
        if (m.Result == (IntPtr)HTCLIENT) m.Result = (IntPtr)HTCAPTION;
        break;
}

こうじゃね?試してないが
311デフォルトの名無しさん:2007/01/18(木) 19:38:50
試してないって言えば何でも許される
312デフォルトの名無しさん:2007/01/18(木) 19:43:41
☆つけりゃ何でも許されると思ってる奴もいるようだし
313デフォルトの名無しさん:2007/01/18(木) 19:54:27
>>308 どうなるのか → 動作しません。

>>310 出来ました。 ありがとう御座います。

>>302 許しを請うてはいませんが・・・?
314デフォルトの名無しさん:2007/01/18(木) 19:55:20
>>302 ではなく、>>312 でした。申し訳ない。
315デフォルトの名無しさん:2007/01/18(木) 19:55:57
馬鹿な質問ですが
パネルコントロールに2つリストボックスを乗せました。
で、Listbox1にはあるディレクトリ内のファイルリストを。
Listbox2にはそのファイル群の更新日時を入れました。
ファイルの数が多いと当然スクロールバーが現れますが
そのままではListbox1とListbox2が同期して動きませんよね
どうしたらよいのでしょうか?おねがいします
316デフォルトの名無しさん:2007/01/18(木) 20:00:51
ListViewやDataGrid(View)を使えばいいと思うよ
317デフォルトの名無しさん:2007/01/18(木) 20:03:18
>>316
ありがとうございます!!

・・・すみません。追加いいですか?

エクスプローラーみたいに更新日時でソート掛けたいんですけど
sortプロパティをどうつかっていいのやら・・

よかったら教えてください
318デフォルトの名無しさん:2007/01/18(木) 20:23:36
で、なんてクラスのsortプロパティなんですか?
319デフォルトの名無しさん:2007/01/18(木) 20:28:31
>>318
あ、すみません。しったかしてました・・
Listboxとかのsortプロパティを使うのかなぁ・・・って思ったのですが
320デフォルトの名無しさん:2007/01/18(木) 20:35:16
そんなプロパティあったか?
321デフォルトの名無しさん:2007/01/18(木) 20:43:23
322デフォルトの名無しさん:2007/01/18(木) 20:52:10
>>321
あ、はい!これは知りませんでしたがこんな感じのプロパティないかな?
って探してました。でもTips見ると結構難しそうですね。
コピペで作っても理解してないと意味がないと思うので
がんばって教えて頂いたサイトで勉強してみます!!

ありがとうございました
323デフォルトの名無しさん:2007/01/18(木) 21:50:13
NUnitというツールを導入して、単体テストをしてみたんですが、
オブジェクトの内部状態だけが変化するメソッド
(privateメンバを書き換える)
のテストの書き方がいまいちわかりません
テストクラスはテスト対象のクラスのprivateメンバにアクセスできないので、
意図通りにオブジェクトの状態が変化したかどうかをテストできないのです・・・

皆さん単体テストの時どうしてますか?
324デフォルトの名無しさん:2007/01/18(木) 21:54:28
リフレクション
325デフォルトの名無しさん:2007/01/18(木) 22:20:44
>>324
ありがとうございます

NUnitはprivateアクセッサが無いみたいなので、
(VisualStudioTSにはあるみたいですね)
リフレクションを使って頑張ってみます
326デフォルトの名無しさん:2007/01/18(木) 23:39:08
すいません。質問させて下さい。

ボタンの背景を透明にしたのですが、ボタンの枠(border?)のような線を
消したいのですが、どうしたら良いのでしょうか。

よろしくお願いします。
327デフォルトの名無しさん:2007/01/19(金) 02:31:22
プロパティ→FlatAppearance→BorderSite=0

328デフォルトの名無しさん:2007/01/19(金) 15:08:57
ReadProcessMemoryを使ってメモリの値を取得することができません。
以下のどこがおかしいのかご教示願います。
class Win32API {
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(
string lpClassName, // クラス名
string lpWindowName // ウィンドウ名
);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool ReadProcessMemory(
IntPtr hProcess, // プロセスのハンドル
IntPtr lpBaseAddress, // 読み取り開始アドレス
[Out] byte[] lpBuffer, // データを格納するバッファ
uint dwSize, // 読み取りたいバイト数
out uint lpNumberOfBytesRead // 読み取ったバイト数
);
}

private void button1_Click(object sender, EventArgs e) {
IntPtr hProcess;
bool CouldReadMemory = false;
byte[] lpBuffer = new byte[1];
int lpBaseAddress = 0x00400100;
uint dwSize = 1;
uint lpNumberOfBytesRead;

hProcess = Win32API.FindWindow("hoge", "hogehoge");
CouldReadMemory = Win32API.ReadProcessMemory(hProcess, (IntPtr)lpBaseAddress, lpBuffer, dwSize, out lpNumberOfBytesRead);
textBox1.Text = hProcess.ToString()+"+" + CouldReadMemory.ToString() + "+" + lpBuffer[0].ToString() + "+" + lpNumberOfBytesRead.ToString();
}
329デフォルトの名無しさん:2007/01/19(金) 15:24:52
どう取得できないんだ。エラーが出るのか。
330デフォルトの名無しさん:2007/01/19(金) 15:32:08
>>329
取得できない理由を書いてませんでした。失礼しました。
エラーは出ず、falseで返ってきます。
lpBuffer[0],lpNumberOfBytesRead共に、0で返ってきます。
331デフォルトの名無しさん:2007/01/19(金) 15:53:42
FindWindowで戻るのはウインドウハンドル。
プロセスハンドルじゃないぞ。
GetProcessHandleFromHwndでも使え
332デフォルトの名無しさん:2007/01/19(金) 16:00:03
Vistaでしかつかえないけどな
333デフォルトの名無しさん:2007/01/19(金) 16:17:14
>>331
そういうことでしたか。。。
ありがとうございました。
334デフォルトの名無しさん:2007/01/19(金) 16:21:10
つーか、これもいれとけ
[DllImport("Kernel32.dll")]
public static extern uint GetLastError();
335328:2007/01/19(金) 16:41:05
みなさんのおかげで取得できました。有り難うございました。
取得できたソース
private void button1_Click(object sender, EventArgs e) {
bool CouldReadMemory = false;
byte[] lpBuffer = new byte[1];
int lpBaseAddress = 0x016D1A64;
uint dwSize = 1;
uint lpNumberOfBytesRead;

Process[] hProcesses = Process.GetProcessesByName("GVOnline.bin");
CouldReadMemory = Win32API.ReadProcessMemory((IntPtr)hProcesses[0].Handle, (IntPtr)lpBaseAddress, lpBuffer, dwSize, out lpNumberOfBytesRead);
textBox1.Text = hProcesses[0].Handle.ToString()+"+" + CouldReadMemory.ToString() + "+" + lpBuffer[0].ToString() + "+" + lpNumberOfBytesRead.ToString();
}

これからエラー処理を書いていきます。
どうもありがとうございました。

>>334
書いておけと言われるので書きますが、正直はっきりとした内容がわかりません。。。
今からMSDN見ます。ご助言ありがとうございます。
336デフォルトの名無しさん:2007/01/19(金) 16:47:38
ReadProcessMemory()の直後にGetLastError()呼んで返ってくる数字を
↓あたりで見れば、どんなエラーだったかわかる。
ttp://onegland.hp.infoseek.co.jp/wincgi/help/winerror.txt

そしたらここで聞くまでも無く原因がわかることも多いだろう。
エラーコードをメッセージにするAPIもあるけどな。
337デフォルトの名無しさん:2007/01/19(金) 17:45:42
何で初心者ってWIN32APIに走るんだろう…
338デフォルトの名無しさん:2007/01/19(金) 18:04:39
オーバーロードとオーバーライド
どっちがどっちだったか分からなくなります。

エロイ方々はどうやって覚えているのか教えて下さい。
339デフォルトの名無しさん:2007/01/19(金) 18:07:11
overrideとタイプするのがオーバーライドで、タイプしなくていいのがオーバーロード
340デフォルトの名無しさん:2007/01/19(金) 18:24:18
辞書で両方の単語を調べるとわかりやすいヨ
341デフォルトの名無しさん:2007/01/19(金) 18:43:47
同じ名前のメソッドの複数定義でいいやん
なんでそんなしょうもないことにわざわざ用語を付けるのかと
342デフォルトの名無しさん:2007/01/19(金) 18:47:29
>>337
ソフトを作る動機として当然だろ
プロセス読み込んだり、他プロセスをフックしたり
ソフト固有のものは自分で作るしかな。
それ以外のものなら探せばいくらでもある
343デフォルトの名無しさん:2007/01/19(金) 19:02:07
>>341
二者をどうやって区別するのか知らんが勝手にそう呼んでろよ。
344デフォルトの名無しさん:2007/01/19(金) 19:59:20
>>342
APIを使うことが主な目的ならC++の方が楽じゃね?
345デフォルトの名無しさん:2007/01/19(金) 20:07:14
こんばんは。昨日Listviewを教えてもらった者ですが
ListboxのSelected.Itemみたいにアイテムを選択できないですよね
配列になっているというのは分かるんですが、どうやったらいいんでしょうか?

いつもすみません。
346デフォルトの名無しさん:2007/01/19(金) 20:27:20
ドキュメント読まないのはなんで?
347デフォルトの名無しさん:2007/01/19(金) 20:52:29
>>342
プロセスの取得やメモリの取得はもっと楽な方法あるのに何故?
348デフォルトの名無しさん:2007/01/19(金) 21:01:01
>>347
C#、というかプログラム初心者サンデープログラマーなんだが、
メモリの取得みたいな感じでググると、ReadProcessMemoryがいっぱいでてくるわけよ。
んで、win32APIってなんじゃ?という話になって、
それを使おうとする。だから俺も使ってるなあ、win32api。
俺はその、”もっと楽な方法”って知らない・・・
ヒントでも教えてくれればうれしいなあ。
349347:2007/01/19(金) 21:05:28
>>348
僕も古参サンデイ☆プログラマ!

c# プロセス 取得 でぐぐってね?
スタートはそこから。
後はがんばってね
350デフォルトの名無しさん:2007/01/19(金) 21:22:18
win32apiないと無理じゃないのか?
351デフォルトの名無しさん:2007/01/19(金) 21:23:27
ReadProcessMemoryのマネージドラッパは提供されてないだろ?
352347:2007/01/19(金) 21:41:12
ゴメ!勘違いだった。
353デフォルトの名無しさん:2007/01/19(金) 22:56:23
オダギリ見せ場少なかった。
354デフォルトの名無しさん:2007/01/19(金) 23:52:55
DllImport["testdll.dll"]をした後、
testdll.dll内のメソッドを使おうとしても
”エントリポイントが存在しません”といわれます。
そのメソッドは確かにあるのですが、なぜか存在しないと
言われます。
どのようなケースで上記エラーが起こることがあるのでしょうか?

355デフォルトの名無しさん:2007/01/19(金) 23:58:05
関数を公開できていない
356デフォルトの名無しさん:2007/01/20(土) 00:16:01
>355
関数を公開させるためにはどのようにすればいいのでしょうか?
C#ではできない?のでしょうか?ネットだけでしか調べて
いませんが、DllImport[]で、中身の関数を使えると思っていました。
よろしければ教えていただけたら幸いです
357337:2007/01/20(土) 00:26:08
>>342
>ソフトを作る動機として当然だろ

それ動機なんですか…?

>>348
なるほどね。


でも、なんでプロセスとかウィンドウハンドルがどうのとかって方向なんだろ。
要するに怪しいアプリが作りたいのかw
358デフォルトの名無しさん:2007/01/20(土) 00:30:03
>>356
関数を公開するのはtestdll.dllのほうでしょ?
つーかそのdllもC#で作ってたりする?
359デフォルトの名無しさん:2007/01/20(土) 03:28:39
どうしても必要になったからWin32API使うんだけど、駄目か?
360デフォルトの名無しさん:2007/01/20(土) 04:57:45
Win32API使わなくてもできるのに使う場合の話をしてるんだろ…
361デフォルトの名無しさん:2007/01/20(土) 05:31:58
win32apiってvistaではどうなってるの?健在?
362デフォルトの名無しさん:2007/01/20(土) 05:32:24
バリバリ健在ですがな
363デフォルトの名無しさん:2007/01/20(土) 05:47:52
Win32APIがなくなるんならもっと大騒ぎですよ
364デフォルトの名無しさん:2007/01/20(土) 06:44:10
2ちゃん自動アフィ貼りプログラムを書くには、
どうすればいいですかぁ?
365デフォルトの名無しさん:2007/01/20(土) 08:18:31
まず全裸になります
366デフォルトの名無しさん:2007/01/20(土) 12:24:15
なりました、さむいです
367デフォルトの名無しさん:2007/01/20(土) 13:47:36
>>356
DllImportはCのDLLを使うためのもの
C#で作ったDLLは参照設定するだけで通常と全く同じように使える
368デフォルトの名無しさん:2007/01/20(土) 20:50:38
byte[] bytes1 = new byte[8];
Random rnd = new Random();
rnd.NextBytes(bytes1);
byte[] bytes2 = (byte[])bytes1.Clone();
Console.WriteLine("bytes1:" + BitConverter.ToString(bytes1));
Console.WriteLine("bytes2:" + BitConverter.ToString(bytes2));
Console.WriteLine("hashofbytes1:" + bytes1.GetHashCode());
Console.WriteLine("hashofbytes2:" + bytes2.GetHashCode());

このコードで、bytes1とbytes2は内容的には同じですが違うハッシュが出力されます。
内容に応じたハッシュを算出する簡単な方法ありませんか?
CRC32あたりをC#に移植するしかないのでしょうか。
369デフォルトの名無しさん:2007/01/20(土) 21:04:40
単にハッシュを得たいならMD5とかSHAとかいろいろあるでしょ
370デフォルトの名無しさん:2007/01/20(土) 21:05:12
>>368
そこまで厳密なハッシュが欲しいの?

int GetHashCode(byte[] data) {
    int res = 0;
    foreach(byte d in data) res ^= d;
    return res;
}

これで良いやん。
371デフォルトの名無しさん:2007/01/20(土) 21:08:11
Crc クラスがないのはやっぱり時代遅れだからのかな。

>>368
そのハッシュはあくまで byte[] オブジェクトのハッシュだからね。
Hashtable に bytes1 と bytes2 をそれぞれキーとして使った時に上書きされちゃ困るでしょ。
372デフォルトの名無しさん:2007/01/20(土) 21:37:30
MSDN読んでね!
373デフォルトの名無しさん:2007/01/20(土) 21:55:16
>>370
8 ビットじゃコリジョン大杉
374デフォルトの名無しさん:2007/01/20(土) 22:01:32
int64のhashじゃだめなんかwwww
375デフォルトの名無しさん:2007/01/20(土) 22:12:06
>>373
おお。恥ずかしいw
んじゃこれで。

foreach(byte d in data) res = (res << 4) ^ d;
376デフォルトの名無しさん:2007/01/20(土) 23:37:07
>>374
ソレダ
377デフォルトの名無しさん:2007/01/21(日) 00:03:27
>>368
Console.WriteLine("MD5hashofbytes1:" + BitConverter.ToInt64(System.Security.Cryptography.MD5.Create().ComputeHash(bytes1), 0).ToString());
こんなんでどうよ?
378356:2007/01/21(日) 00:47:07
367さん
dllはC#で作ったものではなくC++で作ったものです。
子の場合はC#でImportできないのでしょうか?
379デフォルトの名無しさん:2007/01/21(日) 00:48:03
extern "C"
380デフォルトの名無しさん:2007/01/21(日) 00:49:40
export してるのか?
381デフォルトの名無しさん:2007/01/21(日) 01:00:51
DllImport できる関数はDllExportしたやつだけ。
C++の関数は名前が大きく変わるのでextern "C"で
C式の名前でエクスポートしたほうがいい

と、言ってます
382デフォルトの名無しさん:2007/01/21(日) 04:03:54
あとstdcallにしてるかとか
とりあえずDependency WalkerあたりでちゃんとしたDLLが
できてんのか確認汁。話はそれからだ
ただ、DLLの作り方とかはスレ違いだがな
383デフォルトの名無しさん:2007/01/21(日) 14:03:44
元のDLLを触れるならC++/CLIにすればいいのに
384デフォルトの名無しさん:2007/01/21(日) 14:04:59
C++/CLIはそのためにあるようなもんだしな
385デフォルトの名無しさん:2007/01/21(日) 18:18:26
コンソールで動くプログラムを作ったんですけど、
ウインドウズアプリケーションのボタンクリックで動くようにしたいんですが、
どのようにしたら良いのでしょう?
貼り付けるだけじゃだめでしたw
386デフォルトの名無しさん:2007/01/21(日) 18:19:25
Process.Start("ConsoleApplication.exe");
387デフォルトの名無しさん:2007/01/21(日) 18:23:44
パス指定とかはどうなるのでしょうか?
実行したいコンソールアプリケーションが2つあるのです。
388デフォルトの名無しさん:2007/01/21(日) 18:33:28
じゃあフルパスで書けよ
389デフォルトの名無しさん:2007/01/21(日) 18:41:10
やだよ
390デフォルトの名無しさん:2007/01/21(日) 19:07:16
なんでわざわざコンソールアプリケーションにするのかと
ちょっとしたユーキリティっぽいものを考えてるのならDLLにしといて
コンソールなりGUIなりでフロントを作れよ
391デフォルトの名無しさん:2007/01/21(日) 19:24:25
>>387
同じフォルダにおいて、そこからの相対パスで実行すればいいじゃん。
392デフォルトの名無しさん:2007/01/22(月) 00:03:25
>>390
誰にだって理由はあんだよ
393デフォルトの名無しさん:2007/01/22(月) 00:27:50
>>392
初心者スレの理由は怪しいってのが通説
394デフォルトの名無しさん:2007/01/22(月) 03:16:08
.net寄りの質問なのですが、.net板で回答が頂けなかったので、こちらに
質問します。板違いですいません。

PictureBoxの一列にフォントサイズの異なる文字を表示することは可能でしょうか?
可能ならその方法を教えていただけないでしょうか?(HTMLだと可能なのはわかるのですが。。。)
395デフォルトの名無しさん:2007/01/22(月) 03:27:32
>PictureBoxの一列

最初でもう意味がわからん
396デフォルトの名無しさん:2007/01/22(月) 03:27:43
普通にDrawStringに渡すFontオブジェクトで変えられるだろ
397デフォルトの名無しさん:2007/01/22(月) 03:29:59
>>394
PictureBoxならフォントサイズも糞もない。
Imageだろ・・・

ところで.net板ってどこ?
398デフォルトの名無しさん:2007/01/22(月) 03:30:05
>>394
.NET板って何だよ
399デフォルトの名無しさん:2007/01/22(月) 03:31:15
400デフォルトの名無しさん:2007/01/22(月) 03:35:05
■(((Microsoft.NET総合スレッド)))■
http://pc10.2ch.net/test/read.cgi/tech/1124784480/
401デフォルトの名無しさん:2007/01/22(月) 03:37:40
>>394
PictureBoxに文字を書こうとしているが、たぶんこの先行き詰ると思うぞ。
最終的になにがしたいのか言ってみ。
402デフォルトの名無しさん:2007/01/22(月) 11:47:50
しつもんです。
Point[] ps = {new Point(30, 500), new Point(70, 370),
new Point(290, 350), new Point(250, 190),
new Point(430, 170), new Point(330, 60), new Point(600, 70)};

こんな感じの配列を別の関数で使うためにはどうすれば良いのでしょうか?
Cでいうグローバル変数(static)みたいな機能を教えて頂けないでしょうか?
403デフォルトの名無しさん:2007/01/22(月) 11:57:24
クラスのメンバーにしておけばクラス内のメソッド(関数みたいなもの)で使えるよ。
404デフォルトの名無しさん:2007/01/22(月) 11:57:36
そのクラス内の関数(メソッド)と同レベルに
 private Point[] ps = {...};
と定義しろ。
そのクラス内の関数(メソッド)からは
 this.ps
でアクセスできる。

 private static Point[] ps =...
ならクラスフィールド。
 クラス.ps
でアクセスできる。
405デフォルトの名無しさん:2007/01/22(月) 12:17:59
>>403,404
どうもです。
解決しました。
Cしか分からないのに、なんとなくでC#が組める不思議さ。
IDEは使いやすいし、C#は良いですね。
406デフォルトの名無しさん:2007/01/22(月) 14:33:20
Form1がロードされたとき(画面に表示されたとき)に
絵を表示させたいのですが、上手くいきません。
private void Form1_Load(object sender, EventArgs e)
{
Graphics g = CreateGraphics();
SolidBrush hoge = new SolidBrush(Color.Blue);
g.FillRectangle(hoge, 100, 400, 30, 30);
g.FillRectangle(hoge, 200, 300, 30, 30);
g.FillEllipse(hoge, 10, 20, 100, 80);
}
現状、フォームが表示されても何も表示されないのですが、
どこが悪いのか分かりますでしょうか?
407デフォルトの名無しさん:2007/01/22(月) 14:54:19
Paintで書けばおk
408デフォルトの名無しさん:2007/01/22(月) 15:00:07
>>406
そりゃ再描画しないと消えるわな
もう少しWindowsのウィンドウに関する知識をつけといた方がいいよ

対処法は>>407の通り
409デフォルトの名無しさん:2007/01/22(月) 15:05:40
Shown に書いてみ、ちょっと仕組みがわかるかも
Load、Shown、Paintのどれか一つだけ書いてそれぞれ実行してみるといい
410デフォルトの名無しさん:2007/01/22(月) 16:39:23
アカウントとPASSをあらかじめ登録しておいて、
YahooとかmixiにC#プログラムで自動ログイン といった感じのプログラムを作りたいのですがアドバイスお願いします。
htmlで起動するものは見つけたのですが、"ログイン"という動作を実現したいのです。よろしくお願いします。
411デフォルトの名無しさん:2007/01/22(月) 16:43:22
>>407,408,409
昼寝しててお返事遅れました。
解決しました。
どうもありがとうございました。
412デフォルトの名無しさん:2007/01/22(月) 17:17:23
>>410
何がしたいかによる。
自分がブラウザと同じことをやるのかブラウザを操作したいのか。

自分で全部やるならhttpでどんな内容がやりとりされてるか調べて
それと同じように動作させればいい。

なんかよそでも聞いてるようだし、こんなもんで。
413デフォルトの名無しさん:2007/01/22(月) 19:17:08
アルゴリズムの質問です。
pictureBox1.Left=pictureBox1.Left+2;
if (pictureBox1.Left>Width){
pictureBox1.Left=-pictureBox1.Width;
      }
みたいにタイマを使ってpictureBox1を横に動かすことは出来るのですが、
これをナナメ(例えば画面の左上から右下まで)に動かすには、
pictureBox1.Left=pictureBox1.Left+2;をどうすれば良いでしょうか?
414デフォルトの名無しさん:2007/01/22(月) 19:35:23
わろた
どこがアルゴリズムだよw
415デフォルトの名無しさん:2007/01/22(月) 19:37:29


     }


の位置が気になる
416デフォルトの名無しさん:2007/01/22(月) 19:37:35
頭が痛くなってきた
417デフォルトの名無しさん:2007/01/22(月) 19:45:48
目標地点の位置ベクトルからスタート地点の位置ベクトルを引けば
速度ベクトルの向きが得られるから,それを適当に少数倍して速さを調整
それをフレーム毎に位置に足す
418413:2007/01/22(月) 20:04:56
?です。
何か参考になるサイト、有りますか?
なんとかして、ナナメに動かしたいんですけれども・・・
419デフォルトの名無しさん:2007/01/22(月) 20:07:10
>>413
LeftとTopを両方動かせば、斜めに動く。お前は頭を動かせ。
420デフォルトの名無しさん:2007/01/22(月) 20:08:28
いったい何作ってるの?
421413:2007/01/22(月) 20:14:10
プログラムを作っています!!
422デフォルトの名無しさん:2007/01/22(月) 20:28:31
int age = >>413.Age;

if( age > 70 || age < 13 )
 I.Allow( You );
else
 TakeAShit( shit );
423デフォルトの名無しさん:2007/01/22(月) 20:34:09
> if( age > 70 || age < 13 )

この記法、直感的じゃない希ガス。

if (age < 13 || 70 < age)
のほうが好きだよ、おにいちゃん。
424デフォルトの名無しさん:2007/01/22(月) 20:38:03
I.think(so, too);
425デフォルトの名無しさん:2007/01/22(月) 20:55:07
でもトマトの方がナスより好きだよ
426デフォルトの名無しさん:2007/01/22(月) 21:23:41

なんで

13 < age < 70

と書けないのはなぜ?

427デフォルトの名無しさん:2007/01/22(月) 21:25:04
なんでなぜ
428デフォルトの名無しさん:2007/01/22(月) 21:29:14
python でも使ってろ
429デフォルトの名無しさん:2007/01/22(月) 21:40:45
(< 13 age 70)
430394:2007/01/22(月) 23:49:27
すいません。意味わからない事言ってました。
PictureBoxではなくて、ListBoxです。
質問は以下の内容です。

ListBoxの一列にフォントサイズの異なる文字を表示することは可能でしょうか?
可能ならその方法を教えていただけないでしょうか?
431デフォルトの名無しさん:2007/01/22(月) 23:52:12
っ オーナードロー
432デフォルトの名無しさん:2007/01/23(火) 00:25:11
http://pc10.2ch.net/test/read.cgi/tech/1124784480/702


>間違いました。PictureBoxではなくて、ComboBoxです。

>PictureBox:× → ComboBox:○

433デフォルトの名無しさん:2007/01/23(火) 00:46:49
また釣られてんのかよw
暇だなお前等www
434デフォルトの名無しさん:2007/01/23(火) 01:07:38
>>430
Listitemのフォントを変えればいいじゃん
435デフォルトの名無しさん:2007/01/23(火) 17:00:34
なんだつりかよ・・・orz
436デフォルトの名無しさん:2007/01/23(火) 17:40:14
初心者スレだから、釣りの可能性があっても
はっきりしないうちは答えてもいいかと
437435:2007/01/23(火) 18:40:17
そ、そうだよな!
438デフォルトの名無しさん:2007/01/23(火) 19:18:10
フィールドとプロパティの違いがよくわからないんだけど
実装する上でどういう意図の違いで区別しているんですか?

フィールド
public string Title="";

プロパティ
public string Title{
   get{return _title;}
   set{_title=value;}
}

これらって同じように扱えますよね?
439デフォルトの名無しさん:2007/01/23(火) 19:20:57
>>438
プロパティにすると代入値をチェックしたり出来る。
440439:2007/01/23(火) 19:22:17
だからって「チェックするかしないか」で切り分けするのは間違い。
クラス外部に公開するなら、おとなしくプロパティにするのが○
441439:2007/01/23(火) 19:24:32
連投すまん。
プロパティにすると、getとsetでスコープを分けられる。
442デフォルトの名無しさん:2007/01/23(火) 19:25:59
区別するものじゃない
問答無用でpublicフィールドは使うな
443デフォルトの名無しさん:2007/01/23(火) 19:29:51
>>440
それがなぜかがわからないんです
プロパティに値を代入するクラスのほうで
たとえば、タイトルが空白であるかどうかのチェックを書けばいいだけではないでしょうか?
プロパティ側でチェックしたって、空白の場合どうすればいいかまでの記述なんてのは
書かないわけだし、プロパティ側でエラーが出たからってどうなの?って感じなんです

>>441
値を取得するだけで、値は設定させたくないって時に使うもの?
444デフォルトの名無しさん:2007/01/23(火) 19:31:24
>>442
static readonlyなフィールドぐらい使わせてくれ
445デフォルトの名無しさん:2007/01/23(火) 19:32:14
今はそういう風習になってるから従ってろという話で時代が変わると常識が逆転することはありえる。
値型はPublicフィールド直の例もみるね。
446439:2007/01/23(火) 19:35:31
>>443
「値をセットするほうがチェックする」って考え方がダメなのヨ。
そこにセットできる値の条件を知ってるのは、そのプロパティを持ったクラスだから。

>値を取得するだけで、値は設定させたくないって時に使うもの?

そうだヨ
447デフォルトの名無しさん:2007/01/23(火) 19:36:19
> プロパティに値を代入するクラスのほうで
> たとえば、タイトルが空白であるかどうかのチェックを書けばいいだけではないでしょうか?
その理屈で言えばクラスのメソッドは不要
もっと言えばクラス自体不要
448デフォルトの名無しさん:2007/01/23(火) 19:36:41
staticじゃないpublicフィールドは作るなって言うのがマイクロソフトからのお達し
449デフォルトの名無しさん:2007/01/23(火) 19:38:29
漏れはノーチェックで読み書きできるんならプロパティにはしないよ。
でもある程度の規模のクラスでそういうのが出てくるのは設計が悪いと思う。
450デフォルトの名無しさん:2007/01/23(火) 19:41:10
451438:2007/01/23(火) 19:43:14
たとえば、そのTitleがDictionary<>みたいなもののキーで利用する場合
必ず値が必要なわけですから、値は必ず必要ですよというのを
わかり易くするために、プロパティとそのチェックコードを記述するってことなんでしょうか?

>>446
> そこにセットできる値の条件を知ってるのは、そのプロパティを持ったクラスだから。
そのにセットできる値の条件を知っているのはプログラマである私だから。
って考えでやるのはダメってことなのかな?
わかるならそれでいいんじゃね?って返答がきそうですけど
後で見返した場合わかり易くするために、説明書きを長々と書いているってことなのかな?
それなら、コメント文つけておけば済む話だし・。。
いまいちよくわからない。

>>447
そう言われると設計自体おかしいのかな?と思ってきてしまいます
でも、プロパティとフィールドの違いがわからないと先に進めない気がするので
452デフォルトの名無しさん:2007/01/23(火) 19:47:00
>>451
人間は不注意な生き物であるが、コンパイラはミスを犯さない

コンパイラに理解できる形(ex. アクセス修飾子)で書いておけば、
人間が間違えたとしてもコンパイラが止めてくれる
453439:2007/01/23(火) 19:47:47
>そのにセットできる値の条件を知っているのはプログラマである私だから。

それは全ての変数を object 型にして「なにが入ってるのかは私がわかってる」なんて言うようなもんだヨ
454デフォルトの名無しさん:2007/01/23(火) 19:49:02
たとえば,
private string text;
public string Text{get{retrn text;}}
これを,
private string List<string> text;
private string Text{get{return text[0];
455438:2007/01/23(火) 19:49:16
>>450
問答無用でプロパティを使えってことですか
そういうもんだって理屈抜きに覚えろってことなのかな・・・
でも、パブリックな変数が増えてくると、何の意味もなく
プロパティをだらだら記述するのがすごく無駄な気がするんですよね
これって理由がほしい。
456454:2007/01/23(火) 19:50:46
途中書き込みスマン

>>454みたいに変更しても呼び出し側のコードまで変更しなくてもいいってことね
本来のプロパティの目的はそれ
457デフォルトの名無しさん:2007/01/23(火) 19:55:25
>>455
そのうちありがたみが身にしみて分かるようになるよ。
458438:2007/01/23(火) 20:01:08
>>452
コンパイラでも、Titleに代入されるのが空白かどうかまではわからないんじゃないでしょうか?
実行後に任意の値が代入されるわけだし、
stringにintを代入してエラーなんてのは、プロパティじゃなくてもフィールドでもコンパイラエラーが出るわけだし

>>453
そう言われると、オブジェクト指向についてまだ理解が足りてないと反省。
それぞれのクラスは他人みたいな感じでちゃんとそれぞれが独自に機能するように
作らないとだめってことなんですね。
で、自分でそれぞれのクラスを記述しているのに、自分の記憶にフィルタかけて
隠蔽化するなんて難しいな。中身を知ってしまっているんだから
長くプログラムやってないとこういう理屈は身につかないのかなぁ

>>456
なるほどーそういう使い方もあるんですね

一例がほしいんですけど、Titleというプロパティには
空白だけの文字列は代入されてはいけないって場合の記述を
みなさんならどうやって書きますか?
459デフォルトの名無しさん:2007/01/23(火) 20:02:12
>>455
>問答無用でプロパティを使えってことですか
必要性感じないなら、フィールドでいいじゃない?
MS提供のクラスを見ると、外部に公開する物は、プロパティを使用しているみたいだけど、
一切変更しないなら別にフィールドでいいとおもう。

プロパティは外部への見せ方と内部に保持しているものを変えるためのもの。
例えば、DateTime でTickとかあるけど、Tickに相当する物を内部で保持して、
それをもとに年月日時分秒を渡したり、同様に長さに対しては、内部保持は一つだけど、
外部には色々な単位の受渡をすることも出来る。

あとは、インターフェースと同様に、外へ公開する仕様と、内部での状態に、
壁を作っておいて、後々変更が可能にしておくって考えがある。

自分が理解してるのは上記2つ。
460439:2007/01/23(火) 20:02:26
>>455
理由が欲しいって感覚は正しいと思う。

メンバへのアクセス方法の統一化
→public変数では都合の悪い場合だけプロパティ化することの不統一感


自分一人で趣味のプログラムしてるんだったら、自分が不満を感じるまで
そのままやっててもいいかもしれない。
461デフォルトの名無しさん:2007/01/23(火) 20:05:24
脱初心者への一歩だな。
462デフォルトの名無しさん:2007/01/23(火) 20:08:33
初級者と中級者を分ける壁は何?
463デフォルトの名無しさん:2007/01/23(火) 20:09:42
セオリーの外しどころ
464438:2007/01/23(火) 20:22:02
>>459>>460
なんとなくわかってきたような気がする
今まではクラスの実装を変更したらそれに関連するクラスを
全て変更してたけど、代入する値と返す値だけは変更させなければ
それぞれ独立してバージョンアップできるわけですね

まとめ
・メンバへのアクセス方法の統一化
・あとは、インターフェースと同様に、外へ公開する仕様と、内部での状態に、
壁を作っておいて、後々変更が可能にしておくって考えがある。
・プロパティは外部への見せ方と内部に保持しているものを変えるためのもの
>>456
・「値をセットするほうがチェックする」って考え方がダメなのヨ。
そこにセットできる値の条件を知ってるのは、そのプロパティを持ったクラスだから

みなさまどうもありがとうございました。
今作ってるプログラムを大幅に変更することになりそうです
楽しくて仕方がありません
465デフォルトの名無しさん:2007/01/23(火) 20:40:34
そういえばVB6でCOMのDLLを作るとPublicなフィールドが内部的に
Get/Set付きのプロパティに変更されていたのを思い出した。
こうしないとリモート呼び出しやら、COM+やAOPのように呼び出しを
インフラがインターセプトする場合に都合が悪い。
466デフォルトの名無しさん:2007/01/23(火) 20:41:12
なんだか…
素直なやつだな…
467デフォルトの名無しさん:2007/01/23(火) 20:55:00
>>450 のマイクロソフトの説明だと
>パブリック フィールドとプロテクト フィールドは適切にバージョン管理されず、
>またコード アクセス セキュリティ要求によって保護されません。

だから >>465 のこの辺にかかわってくるわけだ。
>こうしないとリモート呼び出しやら、COM+やAOPのように呼び出しを 
>インフラがインターセプトする場合に都合が悪い。 
468デフォルトの名無しさん:2007/01/23(火) 21:07:44
こんな風にレスするヤツに変なのが出てこなければいいスレなんだけどなw
469デフォルトの名無しさん:2007/01/23(火) 21:14:43
>>468みたいなやつのこと?
470468:2007/01/23(火) 21:16:27
>>469
ちょっとこいよ
471デフォルトの名無しさん:2007/01/23(火) 21:33:35
>>465
それはCOMにフィールドって概念がないだけでしょ
472デフォルトの名無しさん:2007/01/24(水) 00:25:40
一人面白いのが紛れ込んだなwww
473デフォルトの名無しさん:2007/01/24(水) 01:01:48
スルーしてやれ
474デフォルトの名無しさん:2007/01/24(水) 01:58:22
煽るときにレス番つけないのは臆病者
475デフォルトの名無しさん:2007/01/24(水) 02:01:39
Cookieを有効にする というコードありますか?
476デフォルトの名無しさん:2007/01/24(水) 02:08:41
意味が分からん。
もう少し詳しく
477デフォルトの名無しさん:2007/01/24(水) 02:15:02
すみません。質問内容悪すぎました。さっきの無しで質問変更します。

プログラムで指定されたURLをIEで開くにはどうしたら良いですか?
478デフォルトの名無しさん:2007/01/24(水) 02:19:28
Process.Start
479デフォルトの名無しさん:2007/01/24(水) 02:22:24
>>474
ちょっとこいよ
480デフォルトの名無しさん:2007/01/24(水) 05:36:54
C#で作ったDLL(ManagedDLL?)を、Cpp等で書かれたアプリ上から利用できるのでしょうか?
具体的には、プラグイン機能に近い、外部DLL内の関数をCall出来るソフトウェアがあるので、
そのソフトウェア向けにC#で作ったDLLを呼ばせたいのですが、
.netの事やmanagedDLLの事は当然の如く想定してないと思われるので…。
ちなみに、DLLの仕様はextern "C" __declspec(dllexport) void Function();だそうです。
481デフォルトの名無しさん:2007/01/24(水) 07:26:31
分かりやすいのは COM 相互運用にして C++ の DLL でラップする事だが
482デフォルトの名無しさん:2007/01/24(水) 09:51:37
>>480
>>481
どこが初心者スレなんだよ
内容が難しすぎる

もっとわかり易い質問よろ
483デフォルトの名無しさん:2007/01/24(水) 11:02:54
文字列の前に指定した文字数になるよう「半角空白」を挿入したいとき、Stringの
PadLeftメソッドを使用しますが、所謂「全角文字」が入っている場合も1文字とし
て処理されてしまいますよね。(Unicodeが関係しているからだと思いますが…)

「全角文字」を「半角文字」2文字分として半角空白の挿入を処理したい場合どの
ようにするのでしょうか?
今考えているのは文字列を一度S-JISとしてbyte[]に変換し、指定した要素数
「半角空白」にあたる値を入れたの別のbyte[]に後ろから値をコピーしていく方法
なのですが、もっとすっきり実行できるよく使われる方法はあるでしょうか?
484デフォルトの名無しさん:2007/01/24(水) 12:00:36
GetByteCountで数えて不足バイト数分空白前に足せばいいじゃん
485デフォルトの名無しさん:2007/01/24(水) 12:47:08
>>480
C++/CLI
486デフォルトの名無しさん:2007/01/24(水) 13:04:30
すんません、教えてください
自分以外のアプリケーションウインドウのタイトル文字列を取得したいのですが
どうしたらいいのか分かりません。
お願いします
487デフォルトの名無しさん:2007/01/24(水) 13:25:05
>>486
.NETのクラスライブラリにはないから P/Invokeを使え。
Win32APIのEnumWindows、GetWindowText このあたり。
488デフォルトの名無しさん:2007/01/24(水) 14:19:09
>>487
ありがとうございます。ぐぐってみますね
489デフォルトの名無しさん:2007/01/24(水) 16:26:03
>>480
1. COM Interopを用いてラッパDLLを書く
2. CLRホスティングを用いてラッパDLLを書く
3. 逆P/Invoke
490デフォルトの名無しさん:2007/01/24(水) 16:41:19
プロジェクトA

namespace hoge
{
491490:2007/01/24(水) 16:49:38
途中で送信してしまいました、お恥ずかしい…

プロジェクトA

namespace hoge
{
class test1
{
private const string a = "2ch";
}
}

プロジェクトB

namespace huga
{
class test2
{
private const string a = "2ch";
}
}

となっていて、Visual C# 2005 Express Editionを用いてA・Bのプロジェクトをひとつのソリューションで管理しています。
それぞれ名前空間が異なるクラス、test1とtest2内にまったく同じconst string aがあります(どちらも必要)。現状では片方の文章のを変更するともう片方も変更しなくてはなりません。

どこかにconst string aをおいて、test1とtest2から参照する方法などありますか?どうにかして変更を1箇所で済ませたいのです。
492デフォルトの名無しさん:2007/01/24(水) 16:54:05
どっちかのプロジェクトの参照設定にもう一方を入れればおk
あと,そういうときはconstじゃなくてstatic readonlyを使え
493デフォルトの名無しさん:2007/01/24(水) 16:55:06
namespace hoge{
class test1{
public static readonly string a = "2ch";
//public const string a = "2ch";
}
}

普通にpublicにしておけばいいんじゃないの?

あとで変更される可能性のある定数はconstではなくstatic readonlyにする
http://msdn2.microsoft.com/ja-jp/library/ms229057(VS.80).aspx
494492:2007/01/24(水) 16:59:21
>492
できました!!
ありがとうございます。

>493
static readonlyですね、ありがとうございます。勉強になりました。
495デフォルトの名無しさん:2007/01/24(水) 19:59:27
お世話様です、C#でのデバッグの方法について教えてください。
よろしくお願いします。

通常はVS2005Proを VB主体モードで使っています。
そこであるサイトからダウンロードしたC#で作られた.NETコントロールを
使ってみていました。ところがそこでちょっとした不都合があり、その
コントロールの中のソースにブレークポイントを置いて調べないと
わからないことが出てきました。

そこで、いつもやっているように、そのソースの中にブレークポイントを
置いてデバッグを開始してみたところ、そのコントロールのコンストラクタ
の中にブレークポイントを置いても、ブレークせず、どうもこのロール内の
ブレークはすべて無視されているようでした。

VBとC#を両方で使うとC#でのブレークポイントは無視されるのか、
あるいは何かオプションの設定でどちらでもブレークポイントが有効になる
のか、などコントロールのC#ソースコードをデバッグする方法を知りたく
思います。すみませんが、これについて教えてください。よろしくお願いします。
496デフォルトの名無しさん:2007/01/24(水) 20:13:44
>>495
それで、今やってみてわかったことですが、、

C#だけのアプリケーションの状態でやっても、そのコントロールを使う方の側の
FormのコンストラクタやForm_Load()でもブレークポイントがヒットしませんでした。
なので、VBとの混用によるものではありませんでした。

で、そのブレークポイントのところにマウスを持っていくと、
 「このブレークポイントは現在の設定ではヒットしません。
  このドキュメントのシンボルが読み込まれていません。」
というメッセージが現われました。

これはどういった設定をしたら解決できるでしょうか?
VBですと、特にシンボルを読み込むとかといったことを意識しないでも
デバッグモードではどのソースにおいたブレークポイントもヒットしていました。
C#では条件が異なるのでしょうか?

よろしくお願いします。
497デフォルトの名無しさん:2007/01/24(水) 20:16:01
プロジェクトの設定はいじってない?
498デフォルトの名無しさん:2007/01/24(水) 20:38:23
>>497
さっそく助かります、どうもです。

それで今、この元々のC#のスタートアッププロジェクトのプロパティを見たところ、
なんと全項目がアクセス不能(ディスエイブル)になっていました。

これはこのコントロールの作者と異なる人は触れないようになっているということ
でしょうか、こういうのは初めて見る状況でした
499デフォルトの名無しさん:2007/01/24(水) 20:40:16
>>498
・・・と思ったら、すみません、あわててデバッグ途中のものを見ていました orz
すみません
500デフォルトの名無しさん:2007/01/24(水) 20:44:41
>>489
有り難う御座いましたー。そこらへんでやってみます。
501デフォルトの名無しさん:2007/01/24(水) 20:49:21
>>497
改めて見比べてみますと、プロジェクトのプロパティについては、
こちらで筆をいれたことはありませんでしたが、VBとは項目が
同じというわけではないのですね。

先の 「このドキュメントのシンボルが読み込まれていません」
ということの意味がわかりませんでした。どのあたりを見れば
わかるでしょう?
502デフォルトの名無しさん:2007/01/24(水) 21:00:40
>>501
ビルド→出力→詳細設定→出力→デバッグ情報→full
503デフォルトの名無しさん:2007/01/24(水) 21:03:23
どうも、ツールのオプションを見ますと、シンボルファイル( .pdb)がないと
いけない、という感じでしたが、ダウンロードしたC#のソースにはこの .pdbという
拡張子のファイルは含まれていませんでした。

もしかしてこの .pdb という拡張子のファイルは、VB専用のファイルなのでしょうか

だとすると、VS2005の環境をC#に最適化した状態にしないと、C#用のシンボルファイル
なるものが読み込まれない、といった感じなのでしょうか・・・・

VB用に最適化したVS2005を、C#用に最適化する方法はどこかにありましたっけ?
504デフォルトの名無しさん:2007/01/24(水) 21:04:31
>>502
あ、すいません、かぶりました。

その設定ですか、わかりました、今すぐやってみます。
505デフォルトの名無しさん:2007/01/24(水) 21:05:08
pdbはコンパイルするときにできるんだよ
506デフォルトの名無しさん:2007/01/24(水) 21:14:04
>>502
出ました、それでした、助かりました。
C#の開発環境はVBのそれとはだいぶ違うということが
これでわかりました。この次からはもう少しC#の関係を勉強して
からやってみます。

教えて頂いたおかげで、深い穴から脱却できました、
ありがとうございました!
507デフォルトの名無しさん:2007/01/24(水) 21:18:14
>>505
そうだったんですね、いま見ていたのが、bin\debugフォルダーでしたが、
こちらにはファイルが何もなく、bin\releaseフォルダーにはVB同様に
できていました

どうもC#ではbin\debugというフォルダーは使用されないかもしれないのですね、
それもわからずあわてていました、ありがとうございました。
508デフォルトの名無しさん:2007/01/24(水) 21:54:10
プロジェクトがリリース構成になってるんじゃないの??
あんまり短絡的に判断するな。
509デフォルトの名無しさん:2007/01/24(水) 22:11:57
勘違いしやすいほど隠れてるのも問題だよなdebugとrelease
インスト直後だと設定が隠れてるから
ツール→オプションで「すべての設定を表示」にチェックした後
プロジェクトおよびソリューションの「ビルド構成の詳細を表示」をチェック
それでやっとビルドの所に構成マネージャが出るからそれで
debugビルドとreleaseビルド選択できる
何でわざわざこんなにわかりずらい所にあるんだろうなw
510デフォルトの名無しさん:2007/01/24(水) 22:18:58
Proならはじめから選べる状態になってた気がするけど
511デフォルトの名無しさん:2007/01/24(水) 22:24:13
>>509
EE使いか?
512デフォルトの名無しさん:2007/01/24(水) 22:36:32
>>486
Process.GetProcesses () でプロセスとって、
Process.MainWindowTitle プロパティじゃだめかな?
513デフォルトの名無しさん:2007/01/24(水) 22:39:44
質問させてください。
とあるところで「BandObjects」というクラスライブラリを見つけ、
ツールバーを作ってみようと思ったのですが、
Visual C# 2005 Express Editionで開いた後、dllへのビルドが出来ません。
エラーには「アセンブリの生成に失敗しました」とあります。
C#はまだよくわからないのですが、Visual C# 2005 Express Editionではビルド出来ないのでしょうか。
514デフォルトの名無しさん:2007/01/24(水) 22:52:35
うん
515デフォルトの名無しさん:2007/01/24(水) 22:53:09
>>512
タスクマネージャのアプリケーションタブに表示されるものだけしか取れない
516デフォルトの名無しさん:2007/01/24(水) 23:28:21
フィールドとプロパティの違いを述べよ
517デフォルトの名無しさん:2007/01/24(水) 23:29:53
出た出たw
518デフォルトの名無しさん:2007/01/25(木) 00:11:54
MMO用のbotを作りたいんだけど
パケット情報取得したり、偽装したり、フックしたりすることって
C#でできるの?
519デフォルトの名無しさん:2007/01/25(木) 00:18:44
>>513
>Visual C# 2005 Express Editionではビルド出来ないのでしょうか
いいえ。
おれ作ってるよ
520デフォルトの名無しさん:2007/01/25(木) 00:55:09
>>518
お前には無理
521デフォルトの名無しさん:2007/01/25(木) 01:38:58
>>520
おれじゃなくてC#がやるの
522デフォルトの名無しさん:2007/01/25(木) 01:52:46
お前には無理だがC#ならできるだろ。
523デフォルトの名無しさん:2007/01/25(木) 02:03:07
c#でウィルスソフトを作った場合、M$なんかに誰が作ったかすぐわかりますか?
プロジェクトのプロパティでIDとか入れないといけないのが気になるんですけど
524デフォルトの名無しさん:2007/01/25(木) 02:04:56
ここで俺が「わかる」と答えれば、>>523 は過ちを犯さずにすむのだろうか。
525デフォルトの名無しさん:2007/01/25(木) 03:03:34
>>523
お前にはウィルスなんて作れないから気にするな
526486:2007/01/25(木) 03:40:37
486です。
度々スマンですがウィンドウタイトルは無事取得できました!
で、今度はウインドウのクラス?名を取得したいのですが
どなたかご存知?
お願いします
527デフォルトの名無しさん:2007/01/25(木) 03:44:08
>>512
ありがとうございます

一応私は

using System.Runtime.InteropServices ; // for DllImport
using System.Text ; // for StringBuilder
[DllImport("user32.dll")]
extern static IntPtr GetForegroundWindow() ;
[DllImport("user32.dll")]
extern static int GetWindowText(IntPtr hWnd, StringBuilder lpStr, int nMaxCount) ;
private void timer1_Tick(object sender, System.EventArgs e)
{
StringBuilder sb = new StringBuilder(200) ;
IntPtr hwnd = GetForegroundWindow() ;
GetWindowText(hwnd, sb, sb.Capacity) ;
textBox1.Text = sb.ToString() ;
}

でやりました
528デフォルトの名無しさん:2007/01/25(木) 03:54:42
GetClassNameじゃなかったか
529デフォルトの名無しさん:2007/01/25(木) 04:04:52
>>528
ありがとうございます!
さっそくぐぐってきます
530デフォルトの名無しさん:2007/01/25(木) 05:35:12
>>525
おれじゃなくてC#がやるの
531デフォルトの名無しさん:2007/01/25(木) 08:14:35
質問です。
→035
↓304
  540
のようなグラフが有って、
int[][] hoge = new int[3][3];
みたいな配列を作って、
hoge [0] [0] = 0
hoge [0] [1] = 3
hoge [0] [2] = 5
hoge [1] [0] = 3
hoge [1] [1] = 0
hoge [1] [2] = 4
hoge [2] [0] = 5
hoge [2] [1] = 4
hoge [2] [2] = 0
と代入した後、これを以下↓
hoge [0] [0] = 0
hoge [0] [1] = 5
hoge [1] [0] = 3
hoge [1] [1] = 4
hoge [2] [0] = 5
hoge [2] [1] = 0
のように変更させたい場合、どうすればよいのでしょうか。

532デフォルトの名無しさん:2007/01/25(木) 08:29:37
C#でゲームパッドの入力を受けることができますか?
マウスイベントとかキーボードイベントしかないんですけど
533デフォルトの名無しさん:2007/01/25(木) 08:31:28
Managed DirectX でも使えばいいじゃん
534デフォルトの名無しさん:2007/01/25(木) 09:31:06
>>532
ttp://kadankai.hp.infoseek.co.jp/html/shiraishiakira/csmdx_index.html

他にはSDL.NET使うとかすれば良いんじゃない?
535デフォルトの名無しさん:2007/01/25(木) 09:46:36
多分523はウィルスではなく、メモリやCPUをくうものを作ろうとして
ローカル実行であぼん!
536デフォルトの名無しさん:2007/01/25(木) 11:03:07
>>531
int[][] hoge = new int[3][];
hoge[0] = new int[]{ 0, 5, 3 };

ジャグ配列
でぐぐれ
537デフォルトの名無しさん:2007/01/25(木) 11:34:40
int[] hoge

hoge.AddRange()
ってやりたい
538デフォルトの名無しさん:2007/01/25(木) 14:45:40
>>536
トンクスです!
539デフォルトの名無しさん:2007/01/25(木) 17:52:28
>>519
おや…。自分のやり方が間違ってるんでしょうかね、
ちょっと調べてみます。
540デフォルトの名無しさん:2007/01/25(木) 17:56:20
>>537
List<>つかっとけ
541デフォルトの名無しさん:2007/01/25(木) 18:51:28
ある配列
a[0],a[1],a[2],a[3]
全てに一定の処理をしたいとき
for(i=0;i<4;i++){
何か a[i]
}
とするとして、
もし事情によりa[2]のときだけ処理をしたくないときは、
for文の条件式をどのように書けばスマートにいくでしょうか?
(a[0],a[1],a[3]に処理をしたい)
542デフォルトの名無しさん:2007/01/25(木) 19:00:12
>>541
if (i == 2) { continue; }
543デフォルトの名無しさん:2007/01/25(木) 19:12:11
いつiが2になるかわからないので使えません><


www
544デフォルトの名無しさん:2007/01/25(木) 21:41:14
配列のスライシングの様な事をして、関数に渡したいんですが、
C#でどう実現すればいいでしょうか

byte[] ar = new byte[100]; //これの50以降を使いたい
func(???);

C言語なら
char ar[100];
func(&ar[50]);
とか可能なんですが・・

部分的にコピーするか、参照開始のインデクスを一緒に関数に渡すしか無いですかね?
func(ar,50);みたいに
545デフォルトの名無しさん:2007/01/25(木) 21:44:55
>>544
そうするしかない。
546デフォルトの名無しさん:2007/01/25(木) 23:28:27
>>544
ジェネリックとインデクサを使って配列をラップするクラスを作れば?
547デフォルトの名無しさん:2007/01/25(木) 23:33:07
>>546
「作れば?」って質問わかってる?
548デフォルトの名無しさん:2007/01/25(木) 23:34:17
>>544
どうしてもコピーしたくなければポインタ使えよ
549デフォルトの名無しさん:2007/01/25(木) 23:58:01
まぁ静的変数にしてアンセーフにすりゃポインター使えるけど
C#の意味ないんだよな
550デフォルトの名無しさん:2007/01/26(金) 00:16:57
配列の引数の型は常にIListにするとか
IListの実装しだいでいくらでも対応できるよ
551デフォルトの名無しさん:2007/01/26(金) 02:14:24
foreach文でループさせているときに、
n=10のときは何もせず、n=11のときにn=10で取得するはずだった
dataViewを取得したいのですが、どのようにすればよいか教えてください。

int n = 0;
foreach(DataRowView dataRowView in dataView)
{
 n++;
 if(n == 10)
{
処理A
}
 処理B
}
552デフォルトの名無しさん:2007/01/26(金) 02:17:44
continue;
553デフォルトの名無しさん:2007/01/26(金) 02:41:58
>>551
質問とソースが微妙に意味不明…
n=10のときに何もせず…って処理Aしてるじゃないかw
n=11のときに「n=10で取得するはずだった」ってn++なんだから取得してるに決まってるだろw



DataRowView dataRowView10;
int n = 0;
foreach(DataRowView dataRowView in dataView)
{
if (n == 10)
{
dataRowView10 = dataRowView;
処理A
}
else if (n == 11)
{
MessageBox.Show(dataRowView10.ToString());
}
処理B
}

ホントにこんなのでいいのかよ・・・
554デフォルトの名無しさん:2007/01/26(金) 03:15:22
>>553
俺はそれを書こうとして吐き気がしたから止めた。
555デフォルトの名無しさん:2007/01/26(金) 05:48:03
ゲームを作っています。
とりあえずpictureBox1に画像を表示させたいのですが、
うまくいきません。
フォームに何も表示されない状態です。
コンパイルは通るのですが・・・
timer1はtrueになっています。
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
g = Graphics.FromImage(pictureBox1.Image);
Random rnd = new Random();
score = 0;
}
private void timer1_Tick(object sender, System.EventArgs e)
{
g.Clear(Color.FromArgb(0, 0, 0));
score = score + 1;
g.DrawString("SCORE:" + score, new Font("MS明朝", 12), new SolidBrush(Color.FromArgb(255, 255, 0)), 0, 0);
pictureBox1.Invalidate();

}
どなたか原因の分かる方、いらっしゃいますでしょうか?
556555:2007/01/26(金) 06:17:11
すみません。自己解決しますた
557デフォルトの名無しさん:2007/01/26(金) 06:25:39
>>556
してないです!
558デフォルトの名無しさん:2007/01/26(金) 07:32:05
>>555
意味分かってコード書いてる?

WindowsのGUI周りの仕組みについてちゃんと勉強してきてね
559デフォルトの名無しさん:2007/01/26(金) 07:34:13
突っ込みどころが多すぎてどこから指摘したものか
560デフォルトの名無しさん:2007/01/26(金) 09:38:02
では優しくヒントを出します。

Google
C#
画像表示

まずは、この検索結果サイトを見て理解してみては?
561デフォルトの名無しさん:2007/01/26(金) 10:05:49
一応絵は出るだろ、あれで。
562555:2007/01/26(金) 10:13:51
みなさんにはがっかりさせられました
もう来ません
563デフォルトの名無しさん:2007/01/26(金) 12:54:06
「全然やり方が判りません」って質問は良く見るけど、
ガンガン出鱈目を書いて、「動きません」ってのは始めて見た。
前者よりマシだけど、プログラムよりも先に勉強の仕方を勉強するべきだな。
564デフォルトの名無しさん:2007/01/26(金) 13:03:13
すみません、質問です。
C++とC#の違いは
後者はコンパイル後のEXEを実行するのに、Microsoft .NET Framework が
必要だけど、前者は必要ないって理解であっていますか?
565デフォルトの名無しさん:2007/01/26(金) 13:10:46
>C++とC#の違いは
文法からして違う 別言語でしょ
566デフォルトの名無しさん:2007/01/26(金) 13:14:38
>>565
あああ、すいません。
文法というより、実行環境の違いの1つということで。
567デフォルトの名無しさん:2007/01/26(金) 13:17:32
C++でもcl /clr hoge.cpp とやるだけで.net farameworkが必要になる。
C#のexeはmonoでも動く(GUI系は怪しいけど)
568デフォルトの名無しさん:2007/01/26(金) 14:14:07
なんでそんな捻くれた回答するんだよ
テストだと0点だな
569デフォルトの名無しさん:2007/01/26(金) 14:27:37
任意の文字を入力し、先頭文字は大文字、それ以外は小文字にして表示
するプログラムを作成せよ。ただし、アルファベット以外の文字はそのまま
表示すること。
570デフォルトの名無しさん:2007/01/26(金) 14:59:27
以前ヘルプかどっかでみかけたやつ

string text = "four score and seven years ago";
string result = System.Text.RegularExpressions.Regex.Replace(text, @"\w+",
new MatchEvaluator(this.CapText));

public string CapText(Match m)
{
string x = m.ToString();
if (char.IsLower(x[0]))
{
return char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
}
return x;
}
571デフォルトの名無しさん:2007/01/26(金) 15:09:21
C#ってどちらかと言うとC++っぽいVBみたいなもんだな

VBいらん気がするんだが
572デフォルトの名無しさん:2007/01/26(金) 15:12:41
C#からWin32 API関数を呼び出すことは出来ますか?
573デフォルトの名無しさん:2007/01/26(金) 15:13:33
if (String.IsNullorEmpty(s)) return s;

if (s.Length == 1)
 return Char.ToUpper(s[0]).ToString();

return String.Format("{0}{1}",
 Char.ToUpper(s[0]),
 s.SubString(1).ToLower());
574デフォルトの名無しさん:2007/01/26(金) 16:05:36
カルチャをつけれ。2.0ならなんか専用のToLowerなんちゃらがあった奇ガス
575デフォルトの名無しさん:2007/01/26(金) 16:46:56
>>572
できる
576デフォルトの名無しさん:2007/01/26(金) 17:10:10
Formなどをクリックされても、ListViewが常にアクティブにしておく方法教えてください
項目が選択された状態にしておきたいんです
もちろんフォーカスが別に移っても選択状態にしておくの方法はわかりますが
それだと、選択色が反転してしまうので
577デフォルトの名無しさん:2007/01/26(金) 18:17:14
>>576
つまりフォーカスを失っても選択部分が「強調表示の色」のままに
なるようにしたい、ってこと?
578576:2007/01/26(金) 18:22:29
>>577
そうです。見せかけでもいいので、選択色が変わらないようにしたいんです
よくソフトでコンボボックスとかに検索文字を
入力しててもリストの選択状態は変わらなかったりするじゃないですか
そういうことをしたいわけです
579デフォルトの名無しさん:2007/01/26(金) 18:24:52
フォーカスが無いことを明示しないのはいただけないが、
そういう設定ができないならオーナードローでいいじゃん
580デフォルトの名無しさん:2007/01/26(金) 18:26:37
フォーカスが移動したら、すぐさまフォーカスを取り戻せばいいと思うよ( ´ー`)y-~~
581576:2007/01/26(金) 18:28:43
>>579
>フォーカスが無いことを明示しないのはいただけない
そう言われればそうですね。
ユーザーが項目が選択されてるから削除しようとDelキーを押しても
実際のフォーカスはコンボボックスにあって、そっちが消えてしまうと
意図しない状況になるかもしれないですね。

ってことで、解決しました。
ありがとう
582デフォルトの名無しさん:2007/01/26(金) 20:30:59
>>562
そう言わずにちょっと聞いてくれ。

Winodwsアプリケーションの場合、別アプリのウィンドウが重なって
消えてしまった領域を再度描画するのは、その消えた方の仕事なわけだ。
ようは自分のウィンドウの描画は自分が描く。
基本的にはOSが再描画してくれるわけじゃない。

で、重なっていたウィンドウが移動したり、自分のアプリが最前面に出たり
するタイミングでOSが「今描いてね」って教えてくれる。
それが Paint イベントなんだわな。

だから普通はウィンドウに描画するロジックはココに書く。
で、OSの連絡に関係なく自分の思ったタイミングで描画する場合は、
自分のウィンドウに対して「今描いてね」ってメッセージを送ってもらうように
OSにお願いするわけ。
例えばInvalidate()メソッドとかで。


オレは昔、DOSからWindowsアプリへ移行する際に、コレを聞いて前が開けた。
がんばれ。


583デフォルトの名無しさん:2007/01/26(金) 21:04:27
ListView(Detail)で行がダブルクリックされるとその内容が表示されるようなものを作っています。

listView1.ItemActivate += new EventHandler(ListView1_ItemActivate);

private void ListView1_ItemActivate(object sender, EventArgs e)
{
ListView lv = (ListView) sender;
MessageBox.Show(???);
}

としたとき、???の部分にその行の情報に記載されている内容をぶちこみたいときは
どのようにしてやればよろしいでしょうか?
584デフォルトの名無しさん:2007/01/26(金) 21:16:10
>>583
それくらい自分で調べようぜ
MSDNのItemActivateの項目に書いてあるよ
585デフォルトの名無しさん:2007/01/26(金) 22:09:24
>>581
ListView.HideSelection プロパティ
586デフォルトの名無しさん:2007/01/26(金) 22:22:30
>>585
それは知ってるって >>575 に書いてあるように見えるが
587デフォルトの名無しさん:2007/01/26(金) 22:23:19
誤 >>575
>>576
588デフォルトの名無しさん:2007/01/27(土) 00:59:53
最近、@ITのC#入門と猫でもわかるのC#コンソール編で勉強を始めた初心者です。
C#の勉強で参考になるサイトや書籍が他にあったら教えて下さい。
589デフォルトの名無しさん:2007/01/27(土) 01:03:05
言語仕様は大して複雑じゃないから別にそんな色々見る必要もないよ
.NET のライブラリは膨大だけど
590デフォルトの名無しさん:2007/01/27(土) 01:06:38
>>588
>>3

本ならちょっとふるいけど↓
2.0対応の良書は知らない

C#によるプログラミングWindows 上・下 (本格的)
Visual C#.NET逆引き大全 500の極意 (初心者向きで手軽)
591デフォルトの名無しさん:2007/01/27(土) 01:13:54
書籍のパソコン教科書シリーズのVisualC#の解説書の付録CDでインストールしたんですが
framework2.0 はインストールされましたがSDKはされませんでした。(入っていない?)
それでも普通にビルドできるんですが、frameworkのSDKはどんなときに必要になるんでしょうか?
(ただのframeworkってランタイムみたいなものですよね?)
592デフォルトの名無しさん:2007/01/27(土) 01:21:39
>>591
エディタでコード書いて、厳密に署名されたキーを作ったり
タイプライブラリをインボートしたりするときに使う

VisualC#Expressインスコしたら入らないか?
593デフォルトの名無しさん:2007/01/27(土) 01:21:56
確かヘルプが不完全なんだっけ
594デフォルトの名無しさん:2007/01/27(土) 01:34:10
>>592
アプリケーションの追加と削除を見ると
.net framework2.0
.net framework2.0 日本語pack
VisualC# express

となっているので、SDKは無いようにみえるのですが、実は入っているのかな?
入っているか見分ける方法とかありますでしょうか?
595デフォルトの名無しさん:2007/01/27(土) 01:43:44
>>594
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0
ってフォルダない?

つーかVSあれば.net SDKいらないよ
むしろWindows SDKが必要
596デフォルトの名無しさん:2007/01/27(土) 01:46:06
一応 VC# で一通りは入るはず
%windir%\Microsoft.NET\SDK\v2.0\Bin に
sn.exe とか wsdl.exe とか sgen.exe とか ildasm.exe とか gacutil.exe とか AxImp.exe とか resgen.exe とか
597デフォルトの名無しさん:2007/01/27(土) 01:47:07
あ、%windir% じゃないな。Program files の方だった。
598デフォルトの名無しさん:2007/01/27(土) 01:48:17
C#は本当にGUIが楽でいいなあ
それでもライブラリが豊富で深い所まで踏み込めるし
599デフォルトの名無しさん:2007/01/27(土) 07:24:19
>>594
VC#Expressだけだとヘルプの.net Frameworkクラスライブラリの項目に
Microsoft.*、 System.Runtime.*がないから
.NET Framework SDKもインストしないとだめ
600デフォルトの名無しさん:2007/01/27(土) 10:20:13
>>588
ttp://ufcpp.net/study/csharp/
この辺とかかな。
601デフォルトの名無しさん:2007/01/27(土) 12:09:59
C++っぽい考え方なんすけど
Label labelA..Text
Label labelB..Text
Label labelC..Text

string[] DDD = new string[3]
なんて配列にポインター割り当てみたいな方法ありますか?

DDD[0]になんか書くと labelA..Textに値が入る
DDD[1]になんか書くと labelB..Textに値が入る
DDD[2]になんか書くと labelC..Textに値が入る

みたいな
602デフォルトの名無しさん:2007/01/27(土) 12:19:23
ないな
プロパティは一見フィールドだけど実体はメソッド呼び出しだし
603デフォルトの名無しさん:2007/01/27(土) 12:23:00
仮にフィールドでもStringは変更不可なクラスなのでLableオブジェクトそのものを配列にする必要がある。
Label [] DDD = new Label[] { labelA, labelB, labelC };
DDD[0].Text = "xxxxx";
604デフォルトの名無しさん:2007/01/27(土) 12:34:58
デリゲート配列にしとけば一般的に扱えないこともないかも
面倒だけど
605601:2007/01/27(土) 12:38:46
>>603
ありがと

ログみてたら違う方法もあるのね、同じ事思う人いると思うんでかいとくね

private List<Label> ddd = new List<Label>();

ddd.Add(labelA);
ddd.Add(labelB);
ddd.Add(labelC);

ddd[0].Text = "AAA"; //LabelA.Text = "AAA";
ddd[1].Text = "BBB"; //LabelB.Text = "BBB";
ddd[2].Text = "CCC"; //LabelC.Text = "CCC";
606デフォルトの名無しさん:2007/01/27(土) 12:52:17
DataBindでできんかったっけ?
607デフォルトの名無しさん:2007/01/27(土) 14:00:03
>>601
C++でも、その考えたはバグの温床なので改めたほうがいいよ。
メモリリークや開放された領域のアクセスしたり…

c#やJavaはそういう感じにならないように出来てる。
608601:2007/01/27(土) 14:48:02
>>607
そうでつね

目的としては配列として扱いたいだけで
なにが何でもポインターアドレスを配列変数にひっつけたい訳じゃないっす
609デフォルトの名無しさん:2007/01/27(土) 15:54:36
質問です。
Image中の絵を消すのに消しゴムツールを作りたいのですが、
どのように作成すればいいのでしょうか?
自前で白く塗りつぶしてColorMapとか使って透明にしないといけないのでしょうか?
610デフォルトの名無しさん:2007/01/27(土) 16:10:20
アルファで塗ればいいだろ
611デフォルトの名無しさん:2007/01/27(土) 16:17:33
Graphics.CompositingMode がポイント
612609:2007/01/27(土) 16:22:49
試しにアルファ値を0にして塗ってみましたが、全く変化がありませんでした orz
613デフォルトの名無しさん:2007/01/27(土) 16:27:04
あのね消しゴムってただの背景色で塗りつぶしてるだけなの。
透明色は関係ないよ。

レイヤー別にするなら別だけどな

あとアルファー0で塗りつぶしにしたら何もしてないのと同じだと思うが…
614609:2007/01/27(土) 16:28:15
>>610
CompositingMode.SourceCopyやCompositingMode.SourceOverを
指定してからアルファ値0で塗ってみましたがこれでもだめでした。
615デフォルトの名無しさん:2007/01/27(土) 16:29:20
アルファーはブレンドの割合のようなもんだ。
616609:2007/01/27(土) 16:32:16
>>613
マジすか orz

後ろが白なので白く塗りつぶすことにします。
ありがとうございました。
617デフォルトの名無しさん:2007/01/27(土) 17:04:48
テキストボックスコントロールのWidthの設定方法で質問です。
Maxlength×[1文字分の幅]によって設定したいと思っていますが、
テキストボックスの[1文字分の幅]はどのように取得できますか?

またはもっと一般的なWidthの設定方法があれば教えてほしいのです。
環境はVS2005です。おねがいします。
618デフォルトの名無しさん:2007/01/27(土) 17:05:15
>>616
それが普通だよw
619デフォルトの名無しさん:2007/01/27(土) 17:06:06
>>617
その前にプロポーショナルフォントって知ってる?
620デフォルトの名無しさん:2007/01/27(土) 17:08:48
一応文字列の描画サイズは TextRenderer.MeasureText で計測できるが
621デフォルトの名無しさん:2007/01/27(土) 17:13:10
>>617
そのWidthのつづりを見て幅は一様じゃないと気付かないのか?
622デフォルトの名無しさん:2007/01/27(土) 17:49:51
>またはもっと一般的なWidthの設定方法
固定値
623デフォルトの名無しさん:2007/01/27(土) 18:24:52
なんでこういう適当なこと言うヤツいるんだろ
>>610とか
624デフォルトの名無しさん:2007/01/27(土) 18:25:44
初心者が多いんだろ?
625デフォルトの名無しさん:2007/01/27(土) 18:34:54
つまらん
626デフォルトの名無しさん:2007/01/27(土) 22:41:37
アロンアルファ
627デフォルトの名無しさん:2007/01/28(日) 01:51:32
べつに>>617はMS ゴシックとか固定幅フォントを使ってるかも
知れないじゃん。そこまで書かない方が悪いと言うかも知れないが。
いまでもシフトJISで全角半角、っていうやり方から変わってない
のかも知れないし。
Graphics.MeasureStringとか。
628デフォルトの名無しさん:2007/01/28(日) 04:38:01
>>627
そういうことなら実際にテキストボックスに文字入れてみたらサイズくらい判るだろ。
今回の事でプロポーショナルを初めて知ったんだとすれば良いことじゃないか。
629デフォルトの名無しさん:2007/01/28(日) 10:27:28
文字の出力について質問です。

char[] array = { 'a', 'b', 'c', 'd' };
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}

とやればうまく改行されてコマンドプロンプトに文字が表示されるのですが、

char[] array = { 'a', 'b', 'c', 'd' };
string w;
 for(int i=0; i < array.Length; i++)
   {
    label1.Text = Convert.ToString(array[i]);
    }
とやっても文字が最後のdしかラベルに表示されません。
どのようにすれば文字が全部表示されるでしょうか?
630デフォルトの名無しさん:2007/01/28(日) 10:42:53
>>629
文字と文字列は違います。
ループなど使わずにこう書きます。

label1.Text = new string(array);

むしろまずchar配列を使う必要があるのかどうかから検討したほうがいいと思います。
631デフォルトの名無しさん:2007/01/28(日) 10:47:11
label1.Text += array[i].ToString();
632デフォルトの名無しさん:2007/01/28(日) 11:01:58
すばやい回答有難うございます。
>>630
添え字で指定して、文字を出力することが大事なんです。
>>631
うまくいきました。有難うございます。
633デフォルトの名無しさん:2007/01/28(日) 11:12:01
>>632
ちょっとまて
ループ中で文字列に追記し、しかも毎回label1.Textにアクセスするというのは効率が悪い。
どうしてもというならこう書け
StringBuilder sb = new StringBuilder();
for ( ... ) {
 sb.Append(array[i]);
}
label1.Text = sb.ToString();
634デフォルトの名無しさん:2007/01/28(日) 11:17:10
VSで作った、フォームだけでサイズ20KBのEXEファイルなんだけど
起動した時点でメモリを12MB食ってんのよ
こういうもんなの?

初心者で申し訳ない。
635デフォルトの名無しさん:2007/01/28(日) 11:20:18
>>634
.net のランタイムライブラリが読み込まれるからそんなもの。
636デフォルトの名無しさん:2007/01/28(日) 11:20:20
そんなもんだよ
637デフォルトの名無しさん:2007/01/28(日) 11:21:35
>>634
そういうもん。サイズがでかくなってもその数値はあまり増えん。
起動し終わったら自然に8〜10Mぐらいに減る。
それから最小化すると極端に減るが、元に戻して操作するとやっぱり8〜10Mぐらいにもどる。
638デフォルトの名無しさん:2007/01/28(日) 11:27:24
Vistaで起動するといいよ
639デフォルトの名無しさん:2007/01/28(日) 11:33:06
>>638
見た目が減るってかw
ワーキングセットのうちプライベート分だけが表示されるんだっけ?
640634:2007/01/28(日) 11:37:43

即レス ありがとう
641デフォルトの名無しさん:2007/01/28(日) 11:42:44
質問

・テキストファイルに1行1レコードでかかれたリストが処理対象。
・各レコードにはIDが割り当てられていて、同一内容のレコードは同一のIDを持つ。
・同一IDのレコードが複数のファイルに分散しているので、それが重複しないよう
 に1ファイルにまとめ、テキストファイルとして出力したい。

このようなファイルを読み込んで
[input_A.txt]
200
100
[input_B.txt]
300
100

次の出力をえる処理です。
[output.txt]
200
100
300

処理量は、出力の output.txt のデータサイズで数十万レコード、100Mオーダー
になります。

現在はIDをキーとしたハッシュに全入力レコードを読み込み重複レコードをぶい
たあと、順番に出力しているのですが、当然ながらメモリ消費がはげしく、
スワップが多発している状態です。

そこでより効率的な方法がないでしょうか、というのが質問です。

やはり SQLite などの DB に頼るのが無難でしょうか?
642デフォルトの名無しさん:2007/01/28(日) 11:47:04
>>641
> やはり SQLite などの DB に頼るのが無難でしょうか?
無難つーかそれしか無いような気がするが
643デフォルトの名無しさん:2007/01/28(日) 11:53:26
>>641
入力ファイルがともに辞書順にソートされていれば単なるマージロジックで
処理できるのでメモリ消費はほとんどない。
ただWindowsのソートユーティリティはたいていオンメモリでやってるから
こっちのメモリ消費が激しい;;
644デフォルトの名無しさん:2007/01/28(日) 12:09:44
みなさん、なんでそんなに詳しいんですか?
645デフォルトの名無しさん:2007/01/28(日) 12:41:32
>>641
以下ならほぼ、メモリはID分だけですむけど

List<ID型,> isexist = new List<ID型,>();
for ( int i=0; i<読み込み行数; i++){
Read一行(内容);
if ( isexist.IndexOf(ID)<0 )
{
isexist.Add(iD);
Write一行(内容);
}
}
646デフォルトの名無しさん:2007/01/28(日) 12:58:05
>>645
それだと計算量が多いね。
IDのリストじゃなくてIDをキーにしたマップの方がいいかと
つまり bool[] か Dictionary<ID, bool>
647デフォルトの名無しさん:2007/01/28(日) 13:14:06
>つまり bool[] か Dictionary<ID, bool>
Dictionaryって速いの?
内部的な動作がわかんないからなんともいえないけど

計算量を考えるなら、
ArrayクラスのBinarysearchを利用すればいいとおもうが、
Sortに要するコストはどうなんだろうと思った
まあ、IDが整数ならたいしたメモリくわないし
整数以外なら、ハッシュをもちいるとか(衝突に関しては別対策必要)
648デフォルトの名無しさん:2007/01/28(日) 13:21:39
速いいの?ってかさ
数十万レコードあるのを、1レコードごとに線形に検索したら
最後の方なんてどういうことになるかぐらい分かるだろ?
649デフォルトの名無しさん:2007/01/28(日) 13:22:36
>>647
Dictionaryはハッシュだよ。だから定数オーダーで検索ができる
(BinarySearchは対数オーダー)
キーが存在するかどうか保持するだけだから衝突も関係ないと思うが。
650デフォルトの名無しさん:2007/01/28(日) 13:23:08
>>647
Dictionaryはハッシュテーブルだからthis[]は定数オーダー
List.IndexOfは線形オーダー
Array#Binarysearchは対数オーダー
Array#Sortは最悪n^2オーダー

何を選ぶかなんて迷うことないだろ
651デフォルトの名無しさん:2007/01/28(日) 13:24:54
例えば4バイトかける数十万、200Mバイトくらいか?
コレクションなら動的拡張で下手すりゃその倍、しかもリニアに必要。

>IDが整数ならたいしたメモリくわないし
正気か?
652デフォルトの名無しさん:2007/01/28(日) 13:25:23
>>647
Hashtableはコリジョンの処理を勝手にやってくれます
653デフォルトの名無しさん:2007/01/28(日) 13:31:18
キーが数値でレンジが非常に狭いなら究極のやり方もあるぞ、制約が厳しすぎて使えないことも多いが。
654デフォルトの名無しさん:2007/01/28(日) 13:33:42
>>651
>例えば4バイトかける数十万、200Mバイトくらいか?
どういう計算?

IDを保持せずに処理するといいたいの?
原理的に不可能だと思うんだが。
655デフォルトの名無しさん:2007/01/28(日) 13:35:06
>>654
「IDが整数ならたいしたメモリくわない」に対する反論じゃねえの?
656デフォルトの名無しさん:2007/01/28(日) 13:35:50
つごい計算w
657デフォルトの名無しさん:2007/01/28(日) 13:37:25
200Manと言いたかったとエスパー
658デフォルトの名無しさん:2007/01/28(日) 13:37:45
たいしたことなかったなw
659デフォルトの名無しさん:2007/01/28(日) 14:05:44
なんかこのスレかっこいいな
660デフォルトの名無しさん:2007/01/28(日) 14:07:52
なんかコレクションとかのソートって、実装が再起型のクイックソートだった希ガス。
つまりデータが悪いとStackOverflowでアボン
661デフォルトの名無しさん:2007/01/28(日) 14:11:57
>>642-648
今後扱うレコード数が増えそうなので今回は DB 使うことにします。
また、 Dictionary に bool を入れる手は思いつかなかったで、他の場面で
使わせてもらいます。

いろいろなアイデアありがとうございました。
662デフォルトの名無しさん:2007/01/28(日) 14:16:13
順序がどうでもいいなら…
まず小さい方のファイルをそのままコピー
小さい方のファイルを一行ずつ読みながらDictionary<ID型, bool>とかにキーだけ格納。
あとはもう一方のファイルでキーが格納されてないものだけ追加書き込み。

663647:2007/01/28(日) 14:28:27
なるほど、Dictionaryはハッシュテーブルなのね(MSDNにかいってあった)
納得 当たり前といえば、当たり前か

本ケースでDictionaryを用いようとすると、レスポンスよりメモリー量の方が問題になりそうかな
数倍程度は必要だろうし

MSDNの「Dictionary の既定の初期量は 3 ですが…」は、3倍ってこと?
664デフォルトの名無しさん:2007/01/28(日) 14:30:14
>>663
それはコンストラクタで指定しなかったときのCapacityの初期値。
Capacity==Countのときに値を追加しようとするとCapacityが二倍に拡張される。
665647:2007/01/28(日) 14:41:57
>>664
Thx
ああ、そういうこと 「Dictionary の容量は」をメモリ量と思ってた

MSDNに記述はないみたいだけど、ハッシュテーブルの要素数は
格納要素数の一桁ぐらい余裕見る必要あるんだろうなぁ
666デフォルトの名無しさん:2007/01/28(日) 14:42:02
まあ、数十万ぐらいのデータを格納するのに、
どの程度メモリを食うかだな。
667デフォルトの名無しさん:2007/01/28(日) 14:42:39
>MSDNに記述はないみたいだけど、ハッシュテーブルの要素数は
>格納要素数の一桁ぐらい余裕見る必要あるんだろうなぁ
どういう意味??
668デフォルトの名無しさん:2007/01/28(日) 14:42:58
調べてないが、コレクションのソートは多分イントロソート使ってるよ。

クイックソートの再帰深度が一定以上になったら、
ヒープソートに切り替える。
669647:2007/01/28(日) 14:51:46
>>667
ハッシュ法ってハッシュ値を衝突させないため、ある程度余裕もってテーブル持つでしょ
その余裕ってどの程度もつおかなぁってこと
670601:2007/01/28(日) 14:57:55
>>641
そんなデカイデータならDBつかえよ
671デフォルトの名無しさん:2007/01/28(日) 14:58:27
MSDNに 書 い て あ る
672デフォルトの名無しさん:2007/01/28(日) 14:58:46
>>669
普通はデータの2〜3倍くらいみとけば大丈夫。
673デフォルトの名無しさん:2007/01/28(日) 14:59:14
DB使うって言ってるじゃんw
674デフォルトの名無しさん:2007/01/28(日) 15:00:00
>>669
それで一桁も余分に必要なわけないじゃん
そもそもそのテーブルの要素数は固定でしょ?
格納する要素数の数が多ければ多いほどそんなものは無視できるじゃん
675デフォルトの名無しさん:2007/01/28(日) 15:10:49
StreamからStreamへコピーしたい
<<無いの?
676647:2007/01/28(日) 15:18:26
>>671
>MSDNに 書 い て あ る
そうなの?見あたらなかったけど

>>672
>普通はデータの2〜3倍くらいみとけば大丈夫。
Thx
レスポンスが極端に落ちない条件だと思うけど、
結構少ない量で済むもんなんだね
自分で、ハッシュ法を実装したことないんで、勉強になった
677デフォルトの名無しさん:2007/01/28(日) 15:26:54
>>675
C++が変態なだけ
普通にread/writeしる
678デフォルトの名無しさん:2007/01/28(日) 15:39:06
CFile outfile(path, CFile::modeCreate);
outfile << stream;
同じような関数無い?
streamをファイルに保存できればいい
byte[]以外で
679デフォルトの名無しさん:2007/01/28(日) 15:46:01
>>678
ない
変態言語に慣れすぎだろ
680デフォルトの名無しさん:2007/01/28(日) 15:49:40
>>679
そうかそうか
681デフォルトの名無しさん:2007/01/28(日) 15:57:23
こういう話なんじゃない?
StreamやWriterのコンストラクタで別のStreamを引数に出来る。
StreamWriter sw = new StreamWriter(new BufferedStream(new GZipStream(file.OpenWrite(path), IO.Compression.CompressionMode.Compress), 1024 * 16))
682デフォルトの名無しさん:2007/01/28(日) 16:10:24
>>681
使い方が分からない。
Stream stream;をtemp.txtに書き込むにはどうすればいい?
683デフォルトの名無しさん:2007/01/28(日) 16:12:59
684デフォルトの名無しさん:2007/01/28(日) 16:14:18
>>683
すべてのクラスを見たよ
俺の頭じゃ理解不能
685デフォルトの名無しさん:2007/01/28(日) 16:16:22
>>682
Streamは抽象クラス。具体的に何のStreamなのさ?
686デフォルトの名無しさん:2007/01/28(日) 16:17:00
>>685
バイナリデータ
687デフォルトの名無しさん:2007/01/28(日) 16:19:49
>>685
実装に依存しないStream一般を表すために抽象クラスがあるんだろうよ
688デフォルトの名無しさん:2007/01/28(日) 16:24:07
>>687
よく理解できないんだが下埋めてくれないか?
Streamが保存できればStreamに変換できるものすべて保存できるんだけど・・・
// Streamゲット
Stream stream = ??????????????;
//StreamをTemp.datへ出力
??????????????????
689デフォルトの名無しさん:2007/01/28(日) 16:29:54
>>688
やりたいことがやっとわかった。
Read系のストリームをWrite系のストリームに直接つなぎたいわけだ。
690デフォルトの名無しさん:2007/01/28(日) 16:30:39
標準ライブラリには無い
なんで byte[] 介しちゃダメなのさ?
欲しければ作れば良くね?
691デフォルトの名無しさん:2007/01/28(日) 16:35:21
>>689-690
そうそう
無いのか。自分で作ることにする
長らくありがとう
692デフォルトの名無しさん:2007/01/28(日) 18:11:20
ToolStripItemDesignerAvailabilityでDateTimePickerを追加して使っていたのですが
昨日より、追加の所にDateTimePickerが出てこなくなってしまいました。
出てこなくなった原因とかお分かりになりますでしょうか?
693デフォルトの名無しさん:2007/01/28(日) 23:10:06
IDEの反応が糞重いから、誤って削除してしまってたりとか
694デフォルトの名無しさん:2007/01/29(月) 00:45:00
JavaのコレクションクラスだとtoStringメソッドで中身を確認しやすいフォーマットで出力してくれるけど
C#のコレクションクラスのToStringは大抵objectクラスのものなので不便です。
コレクションクラスの中身を確認できる形で出力する簡単な方法ってありますか?
695デフォルトの名無しさん:2007/01/29(月) 00:57:10
そう言う静的メソッド書けばいいんじゃね

// C#3.0 になるとそう言うのを拡張メソッドで書く奴が増えそうな予感
696デフォルトの名無しさん:2007/01/29(月) 01:08:05
これからC言語勉強しようと思ってる大学生ですが、CとC++とC♯どれをやったら一番就職後役立つのでしょうか?
697デフォルトの名無しさん:2007/01/29(月) 01:09:19
public static String ToMemberwiseString(this IEnumerable list);
public static String ToMemberwiseString<T>(this IEnumerable<T> list);
public static String ToMemberwiseString<T>(this IEnumerable<T> list, String format) where T : IFormattable;
public static String ToMemberwiseString<T>(this IEnumerable<T> list, IFormatProvider formatProvider) where T : IFormattable;
public static String ToMemberwiseString<T>(this IEnumerable<T> list, String format, IFormatProvider formatProvider) where T : IFormattable;

ああ、よだれでそう、こりゃやるだろうな…ぜったいやるorz
698"""""""":2007/01/29(月) 01:09:26
● 若い桃尻お尻厳選?+秋山奈々??? ●
http://eco.no.land.to/idol/forumdisplay.php?fid=1&filter=0&orderby=views&page=1
699デフォルトの名無しさん:2007/01/29(月) 01:09:42
>>696
スレ違い
700デフォルトの名無しさん:2007/01/29(月) 01:10:48
ガベージコレクションDisposeの違いを述べよ
701デフォルトの名無しさん:2007/01/29(月) 01:19:20
知りたいならもっとかわいく言わないと
702デフォルトの名無しさん:2007/01/29(月) 01:33:43
がべぇじこれくしょんってなんですお^^;
703デフォルトの名無しさん:2007/01/29(月) 01:35:34
>>697
禁断の果実とはすべからく美味しそうに見えるものです
704デフォルトの名無しさん:2007/01/29(月) 01:39:53
commonsから移植でいいんじゃね?
705デフォルトの名無しさん:2007/01/29(月) 08:52:01
Visual C# Express Editonを使っています。
あるコードをコンパイルすると、フォームとコンソールが同時に起動してしまいます。
フォームだけ起動させるには、どの設定をいじればよいのでしょうか?
706デフォルトの名無しさん:2007/01/29(月) 08:53:20
あるコード
707デフォルトの名無しさん:2007/01/29(月) 09:00:08
そのあるコードは直接フオームが起動するんです。
自分が変数名をいじった程度に改造すると、フォームとコンソールが起動するんです。
コンパイルオプションを教えていただければありがたいのですけれど。
708デフォルトの名無しさん:2007/01/29(月) 09:13:46
俺が作った、あるコードではそんなことないぞ。
709デフォルトの名無しさん:2007/01/29(月) 09:16:52
では、そのあるコードを参考にしますので見せてください。
710デフォルトの名無しさん:2007/01/29(月) 09:48:50
他人のサンプルのコンソールアプリにフォーム追加したとか
711デフォルトの名無しさん:2007/01/29(月) 10:12:26
いや、もとがフォームに直接画像を描画するアプリなんです。
で、自分がやると同じようにフォームに直接描画してくれるんですが、
同時にコンソールが開くんです。
たぶんコンパイルオプションがあると思うんですけれど、分からないんです。
712デフォルトの名無しさん:2007/01/29(月) 12:01:26
ソリューションエクスプローラのProperties→アプリケーション
→出力の種類

は?
713デフォルトの名無しさん:2007/01/29(月) 12:21:31
たしかにフォームだけのアプリで
>>712 のWindowsアプリケーションをコンソールアプリケーションにすると
両方出るな
714デフォルトの名無しさん:2007/01/29(月) 21:48:20
すんません、次のようにしてTextBoxの色をボタンの色と
同じにしようとしたのですが、

txtEdit.BackColor = KnownColor.ButtonFace;

エラー3
型 'System.Drawing.KnownColor' を型 'System.Drawing.Color' に暗黙的に変換できません

というエラーが出て色を代入できませんでした。
(System..Drawing.Color) をつけてキャストしてもみたのですがダメでした。
すみませんがよろしくお願いします。
715デフォルトの名無しさん:2007/01/29(月) 21:51:03
716デフォルトの名無しさん:2007/01/29(月) 22:02:17
>>715
わかりました、、ありがとうございます!
txtEdit.BackColor = Color.FromName("ButtonFace");
で代入できました、やっと意味がわかりました。
717デフォルトの名無しさん:2007/01/29(月) 22:03:45
txtEdit.BackColor = SystemColors.ButtonFace;
じゃだめなんか?
718デフォルトの名無しさん:2007/01/29(月) 22:06:43
>>716
せっかくリンクつけたんだからSystemColors使ってくれよ
それじゃtypoしたときにコンパイルエラーが出ない
719デフォルトの名無しさん:2007/01/29(月) 22:08:14
せめて FromKnownColor を……。
SystemColors の方が良いけどな。
720デフォルトの名無しさん:2007/01/29(月) 22:14:02
どうでもいい話だが、Color.FromNameの実装はかなりキモイ
リフレクションでSystemColorsのプロパティ取り出してやがる
721デフォルトの名無しさん:2007/01/29(月) 22:30:15
なぜ初心者は行っちゃいけない方向に向かってしまうんだろう・・・w
722デフォルトの名無しさん:2007/01/29(月) 22:33:38
坊やだからさ
723デフォルトの名無しさん:2007/01/29(月) 22:34:47
んで教えるヤツも坊やだからさらに…
724デフォルトの名無しさん:2007/01/29(月) 22:38:14
FromNameなんてけったいなものを見つけ出すあたり純粋って感じがしていいよね
725デフォルトの名無しさん:2007/01/29(月) 22:59:50
>>720
つーかリフレクション以外に無理なんじゃない?
726デフォルトの名無しさん:2007/01/29(月) 23:19:18
>>725
超巨大な switch
727デフォルトの名無しさん:2007/01/29(月) 23:38:53
質問です。
最大化したMDIの子フォームをActivateMdiChildなどでアクティブにして切り替えると
元の大きさのフォームが一瞬ちらつくんですが、直す方法はないでしょうか…?
728デフォルトの名無しさん:2007/01/29(月) 23:40:09
>>727
.Netの糞仕様です
729デフォルトの名無しさん:2007/01/30(火) 00:30:50
初心者は一応実現はできる方法を見つけると、
それが本当にいいやりかたか、もっと適したものはないか、
という発想ができずに最初に見つけたやり方で突っ走る。

初心者はっていうより、初心者脱出できないやつの傾向だな。
730デフォルトの名無しさん:2007/01/30(火) 01:44:35
別にいいんじゃないのか?
わかったらそれ以降直せばいいんだし
むしろ、あまりこだわるといつまでたっても何も出来ない
レベルにあったバランスの問題でしょ
731デフォルトの名無しさん:2007/01/30(火) 02:08:33
誤:>>730
正:>>729と自称非初心者が申しております
732デフォルトの名無しさん:2007/01/30(火) 04:16:25
初心者は知識も経験も少ない
そんなこと突っ込んでも意味がない
全部わかった上でプログラミングを始めるやつなんていない

こんなソフトがないか?ないなら作って見ようって発想から来てるんだから
いきなり難しい課題を挑戦しようとしているのは当然でしょ
ありきたりのソフトはすでにフリーで出回ってるんだからさ
733デフォルトの名無しさん:2007/01/30(火) 06:26:58
TextBoxから入力した文字を、PictureBoxで読み込まれた画像にbuttonを押して描画させているのですが、
続けて入力すると、文字が重なってしまいます。
buttonを押すたびに、Formを再描画させたいのですが、どのようにすればよいのでしょうか?
734デフォルトの名無しさん:2007/01/30(火) 09:49:48
文字を描く前に画像の転送しなおしたら
735デフォルトの名無しさん:2007/01/30(火) 15:49:02
あるレベルの事をちゃんと理解してから、
もっといい方法の事を考えた方が、
そのもっといい方法の事が理解しやすいよね。
736デフォルトの名無しさん:2007/01/30(火) 16:48:59
レベル1でボスキャラは倒せないからw
737デフォルトの名無しさん:2007/01/30(火) 18:00:50
>>736
ゲームなら倒せるのに
738デフォルトの名無しさん:2007/01/30(火) 18:02:27
いや無理w
739デフォルトの名無しさん:2007/01/30(火) 18:36:37
>>733
DrawImageし直すだけ
740デフォルトの名無しさん:2007/01/30(火) 21:48:35
>>733
その前にPictureBoxにどうやってイメージを表示しているか教えてくれ。
場合によってはまたキミの質問が来るかとw
741デフォルトの名無しさん:2007/01/30(火) 21:54:11
Imageプロパティを使ってそうだな
Imageプロパティを使う方法はあくまで簡易表示用だから,
上から描画したりするような凝ったことをするなら
イメージの描画にImageプロパティは使わずGraphics.DrawImageでやる
742デフォルトの名無しさん:2007/01/31(水) 00:08:33
ん?
743デフォルトの名無しさん:2007/01/31(水) 01:43:13
pictureBox.Text = "" にしておく。

Button1_click で、 pictureBox.Text を設定して、pictureBox.Invalidate する。

あとは pictureBox の Paint いべんとだか、onPaint だかを実装すれば棲む話じゃない?
744デフォルトの名無しさん:2007/01/31(水) 03:01:01
>pictureBox.Text = "" にしておく

初心者スレで訳のわからない事を書くな。
混乱するだろ。
745デフォルトの名無しさん:2007/01/31(水) 03:12:33
>>743は何の言語が出来てこのスレにいるのだろう・・・
すごい気になる
746デフォルトの名無しさん:2007/01/31(水) 12:15:50
フランス語ペラペラなマドモワゼルに違いない
747デフォルトの名無しさん:2007/01/31(水) 18:15:25
断言するがこのスレには女性はいない。
748デフォルトの名無しさん:2007/02/01(木) 00:05:09
C#は無償で使えますがこれでコンパイルしたものは
配布するのになにか制約とかありますか?
749デフォルトの名無しさん:2007/02/01(木) 00:13:27
.NET Framework の再頒布パッケージのインストールが必要
750デフォルトの名無しさん:2007/02/01(木) 00:14:18
そういうことを言ってるんじゃないだろ
SDKで作ったものはもちろん,VC#Expressで作ったものも完全自由
751デフォルトの名無しさん:2007/02/01(木) 00:19:12
そうなんですか どうもありがとう
本当に無償KITなんですね
752デフォルトの名無しさん:2007/02/01(木) 00:34:25
値段はWindowsに含まれてますから
753デフォルトの名無しさん:2007/02/01(木) 00:50:31
言えてる
でも悔しいけどVSExpressは本当に太っ腹
754デフォルトの名無しさん:2007/02/01(木) 00:52:35
Javaへの対抗策なんすかね
755デフォルトの名無しさん:2007/02/01(木) 00:53:30
C# に関しては凄い太っ腹だけど、
C++ は色々なものが無くて、後からインスコしたり
別ツール使ったりしないといけないんだよな。
C# 使え! って言いたいんだろうけどさ。
756デフォルトの名無しさん:2007/02/01(木) 01:17:51
商用は不可じゃなかったっけ?
757デフォルトの名無しさん:2007/02/01(木) 01:20:16
それはよく言われるが、ソースが出たためしがない。
758756:2007/02/01(木) 01:24:57
そうなのか。
MSもあえてハッキリ言いたくないんだろうなw
759デフォルトの名無しさん:2007/02/01(木) 01:42:42
明快に OK 出してるってばよ。
ttp://www.microsoft.com/japan/msdn/vstudio/express/faq/
760デフォルトの名無しさん:2007/02/01(木) 01:54:35
C#とC++と2つある意味がわからないんですが
どういう風に使い分けるんですか
761デフォルトの名無しさん:2007/02/01(木) 02:10:57
C#でできないことを、しかたなくC++でやる
つか全然違う物なのになんでそんな疑問がでるのかわからん
762758:2007/02/01(木) 03:18:03
>>759
ホントだ。 >>757 テメェこのー
763デフォルトの名無しさん:2007/02/01(木) 03:22:26
>>760
C#・VB→開発効率重視
C++→パフォーマンス重視

MS英語のページかブログに住み分けが書かれてたんだが忘れた
764デフォルトの名無しさん:2007/02/01(木) 04:42:12
これからの開発の現場はどうなんでしょう
C#になってC++は消えてしまうということはないんですかね
765デフォルトの名無しさん:2007/02/01(木) 07:03:22
766デフォルトの名無しさん:2007/02/01(木) 07:35:27
C++は消えないが、C#が広まっていけば
VBは今後消えていくだろうな
767デフォルトの名無しさん:2007/02/01(木) 07:56:09
VBなんていらないしな。うんこ言語だからいいことだよ。
768デフォルトの名無しさん:2007/02/01(木) 10:00:33
VBをうんこと呼ぶのはC#をカレー味のうんこと呼ぶのと同じだぞ
769デフォルトの名無しさん:2007/02/01(木) 17:11:08
>>768
全然違うよ
もっと勉強しようね
770デフォルトの名無しさん:2007/02/01(木) 17:13:28
C++とC#とVBAを仕事で同時に組んだ事あるけど
VBはうんこだよ、素人が組むにはVBみたいな曖昧言語でいいが
仕事で組むものではない、厳密にするならC#になる
771デフォルトの名無しさん:2007/02/01(木) 17:46:07
VBAはVBしせゃないだろ。単なるサブセット。
772デフォルトの名無しさん:2007/02/01(木) 17:48:25
にっぽんごでおーけー
773デフォルトの名無しさん:2007/02/01(木) 17:53:12
>VBAを仕事で
・・・
774デフォルトの名無しさん:2007/02/01(木) 19:33:10
>>773
しかたねーだろ、ある機器のデータをエクセルで受ける仕様なんだから
しかも藻前が思ってる程簡単な物でもないし
こちとらシステム全部一人でやってるんだ
775デフォルトの名無しさん:2007/02/01(木) 19:35:11
苦しい苦しいよ
776デフォルトの名無しさん:2007/02/01(木) 19:39:10
苦しくねーよ
>C++とC#とVBAを仕事で同時に組んだ
と言ってるじゃねーか VBAだけじゃねーよ
言っておくが機器のファームまで組んでる
777デフォルトの名無しさん:2007/02/01(木) 19:54:49
>>774
>データをエクセルで受ける仕様
受け取るんならC#で問題ないだろ・・・
VBAつきEXCELLとして提供するなら別だが。
778デフォルトの名無しさん:2007/02/01(木) 19:59:16
>>776
見苦しいと言っておる
779デフォルトの名無しさん:2007/02/01(木) 20:06:00
VBAの仕事は結構あるよ。
アクセスだけどね。
アクセスにしとくと、事務所の女性が自分で帳票フォームとかして便利なんだ。
780デフォルトの名無しさん:2007/02/01(木) 20:25:20
でなんでそれがVB2005と関係あるの?
全然別物なのに
781デフォルトの名無しさん:2007/02/01(木) 20:28:40
ちょうどクソスレがたってるから移動してくれ

VB使いはM$と共に去りぬ
http://pc10.2ch.net/test/read.cgi/tech/1170243832/l50
782デフォルトの名無しさん:2007/02/02(金) 00:49:55
>>777
藻前は馬鹿か、受けるだけならC#とかC++で作ってるわ
何でエクセルで受けるのか良く考えろ
783デフォルトの名無しさん:2007/02/02(金) 01:11:05
どうでもいいよ
784デフォルトの名無しさん:2007/02/02(金) 01:33:35
そんなに必死にならなくても(´・ω・`)
785デフォルトの名無しさん:2007/02/02(金) 01:56:01
>>782
糞仕様切って逆ギレかw
786デフォルトの名無しさん:2007/02/02(金) 07:38:44
初心者にありがちだけど、それを糞仕様と決めつけるのはどうなのかな?
プロの仕事になると、エンドユーザーの強い要求はあれば
システム的に糞だろうが、良かろうがそれに従うしかない

要はカスタム品の場合、エンドユーザーが一番使いやすい方法を取る事
(要求に応じて高い金払ってくれればの話だが)
一方的にアプリをユーザに提供する方法以外、自分の思うソフト構成なんてそうそう出来ないよ
787デフォルトの名無しさん:2007/02/02(金) 07:44:01
もはやスレ違いだ。
788デフォルトの名無しさん:2007/02/02(金) 08:05:38
そうだな

結論としてC#あればVBはいらないと
789デフォルトの名無しさん:2007/02/02(金) 08:07:08
C#でウィルスソフトを作れますか?
例えばハードディスクの内容をすべて削除するようなもの
790デフォルトの名無しさん:2007/02/02(金) 08:12:46
どうすれば「ハードディスクの内容をすべて削除する」ことが出来るのかを貴方が知っていれば出来るだろう。
でも、それが出来ることとウィルスであることはまったく関係ない。
791デフォルトの名無しさん:2007/02/02(金) 09:34:13
初心者スレで釣りするやつって終わってるな
792デフォルトの名無しさん:2007/02/02(金) 13:50:29
そもそも>>770はVBとVBAを一緒にしてるところがうんこ
793デフォルトの名無しさん:2007/02/02(金) 14:40:11
>>792
掘り出すな、また脱線する
794デフォルトの名無しさん:2007/02/02(金) 14:48:38
>>792
使えるものが限られているだけで
基本的部分は同じだろ

C++とC#程の違いはない
違う意味で漏れに言わせれば
C#=VB2005だわ
795デフォルトの名無しさん:2007/02/02(金) 16:28:45
いいから消えろ
796デフォルトの名無しさん:2007/02/02(金) 21:24:06
「C♯, C#相談室」から来ました。

CheckedListBoxでいずれかのアイテムのチェック城外が変更されたときに、
既にチェックされたアイテムの一覧(CheckedItemとかで)を取りたいのですが、
ItemCheckイベントだと、チェックされた/チェックが外れた瞬間のアイテムが取得できません。
適当に合成してやれば良いのかもしれませんが、他に何か良い方法はないでしょうか?
797デフォルトの名無しさん:2007/02/02(金) 21:27:05
向こうにも書いたがCheckedIndices, CheckedItemsじゃあかんのか?
何がしたいのかよく分からん。
798デフォルトの名無しさん:2007/02/02(金) 21:51:42
CheckedItemsだと、ItemCheckイベントはチェックされた瞬間を捕まえるので、
その時チェックされた/チェックが外れたアイテムが入ってないのですよね。

array<String ^> ^items = gcnew array<String ^>(CheckedItems->Count+1);
CheckedItems->CopyTo(items, 0);
if(e->CheckedState)
 items[CheckedItems->Count] = e->NewValue;

とかやるしかないんですかね。
799デフォルトの名無しさん:2007/02/02(金) 21:54:16
なんか後半のコードが怪しいですけど、見なかったことに。
800デフォルトの名無しさん:2007/02/02(金) 21:58:49
C++/CLIかよ
801デフォルトの名無しさん:2007/02/02(金) 21:58:49
言語が違うのは気にしたら負けか
802デフォルトの名無しさん:2007/02/02(金) 22:00:17
頭固すぎ
発想を転換してごらん
803デフォルトの名無しさん:2007/02/02(金) 22:03:03
本当にC#そっくりなんだなC++/CLIって
804798:2007/02/02(金) 22:04:19
.NET Frameworkなのは同じなので、C#の知識で結構ですが。
805デフォルトの名無しさん:2007/02/02(金) 22:05:03
>>798
そのコードは無茶苦茶だがCheckedIndicesとe.Index,e.NewValueから作り出すしかないと思う

>>802
柔軟な発想とやらを具体的に示してくれ
806デフォルトの名無しさん:2007/02/02(金) 22:05:30
>>799
後半どころか頭からおかしいだろ。
なんでCheckedListBox+CheckedItemCollectionをString[]にコピーしてるんだ。
807デフォルトの名無しさん:2007/02/02(金) 22:15:10
継承してAfterItemCheckでも作れば?
808デフォルトの名無しさん:2007/02/02(金) 22:56:30
>>805
どうも。
809デフォルトの名無しさん:2007/02/03(土) 00:45:20
TextBoxにかいてある文字列の一文字をハイライトするために、
そこだけ色を変えたり、文字サイズを大きくしたりすることは出来るでしょうか?
出来るのであれば、その方法を教えてください。
やはり、Labelを列挙するという方法じゃなきゃ無理なのでしょうか?
810デフォルトの名無しさん:2007/02/03(土) 00:52:21
WebClientクラスを使ってフォーム認証を行う方法はないでしょうか?
811デフォルトの名無しさん:2007/02/03(土) 00:53:50
>>809
描画を横取りすればできんことはないが、
Labelを列挙とかわけの分からんこと言ってるようなレベルじゃ辛いだろう。
RichTextBoxでも使ったほうが楽じゃねえかな
812デフォルトの名無しさん:2007/02/03(土) 01:13:30
>>810
webreq.Credentials = new System.Net.NetworkCredential("user", "pass");
webreq.GetResponse();

でどう?
813デフォルトの名無しさん:2007/02/03(土) 01:19:47
最近、パターンというものを勉強し始めたのですが、わからない事があるのでご教授願います。

PofEAA(翻訳)を一通り読んだのですが、.NETFrameworkを使用した場合のTableModuleパターンとは
簡単に言ってしまえば、DataTable(DataSet)を使用した開発という認識で良いのでしょうか?
814デフォルトの名無しさん:2007/02/03(土) 01:19:54
もー似非とのお遊びは終わりか・・・つまらん
815デフォルトの名無しさん:2007/02/03(土) 01:23:18
ダイナミックライブラリとクラスライブラリの違いを述べよ
816デフォルトの名無しさん:2007/02/03(土) 01:24:54
消えろ
817デフォルトの名無しさん:2007/02/03(土) 01:30:31
>>812
ありがとうございます
やっぱりCookieの関係かWebClientクラスでは出来ないねのですね…
818デフォルトの名無しさん:2007/02/03(土) 01:50:19
何を試したのかも書かずに出来ないって断言するなバカ
819デフォルトの名無しさん:2007/02/04(日) 03:44:52
TreeViewで、ChildNodeを登録していなくても常にExpandのボタン(+-のアレ)を
表示しておく方法はないでしょうか?
820デフォルトの名無しさん:2007/02/04(日) 03:49:46
>>819
ない
821デフォルトの名無しさん:2007/02/04(日) 06:08:40
>>820
ありがとうございます。
仕方ないので、ダミーノードを登録しておいてExpandした時に置き換えることにしました。
822デフォルトの名無しさん:2007/02/04(日) 06:23:12
>>821
最初に登録するのが嫌なのか
設計に問題ありそうだな
そのうち混乱してきて作り直すに1票
823デフォルトの名無しさん:2007/02/04(日) 10:11:21
IPアドレスを直接指定して文字列等を送信するプログラムを製作しています。
目標のアドレスと接続する際、try{ 接続処理 }catch{ 例外を受け取ったときの処理 }で接続をしているのですが、
接続の際、例外を受け取ったり結果にたどり着くまでにそのプログラムの処理が止まってしまいます。
これなんとか解決する方法ありませんでしょうか?
824デフォルトの名無しさん:2007/02/04(日) 10:22:52
>>822
うるせー馬鹿
825デフォルトの名無しさん:2007/02/04(日) 10:25:50
>>823
どういうことをやってるか分からん以上は答えようがないが

止まるってどういうことなんだ?
プロセスが落ちるのか、無限ループして止まってるように見えるのか。
826デフォルトの名無しさん:2007/02/04(日) 10:57:34
>>825
説明不足でした。申し訳ありません。


プログラムはポートを空けて自分のコンピュータに接続されてくるのを待つものです。
データが送られてくるまで待っているようなんですが
外から見るとフリーズしているように見えます。
データを実際に送ってみて受信されると元のように操作できるようになります。
827デフォルトの名無しさん:2007/02/04(日) 11:01:13
別のスレッドでやれば
828デフォルトの名無しさん:2007/02/04(日) 11:01:24
>>826
Begin*/End*系の非同期メソッドを使うか、通信用に別のスレッドを用意すればいい。
829826:2007/02/04(日) 11:08:26
スレッドですね。
調べてきます。どうもありがとうございました。
830デフォルトの名無しさん:2007/02/04(日) 12:16:47
C#って面白いな
VBからくる香具師とVC++から来る香具師で
かなりレベルが違う
831デフォルトの名無しさん:2007/02/04(日) 12:18:47
JAVAやdelphiから来る奴は大して変わらない。
832デフォルトの名無しさん:2007/02/04(日) 12:21:03
>>830
今日は釣れてますか?
833デフォルトの名無しさん:2007/02/04(日) 12:38:47
FrameWorkのFrameWork
中間コードの中間コード
ウィンドウズのウィンドウズ

いつまでやるんだ?こういうことって
834デフォルトの名無しさん:2007/02/04(日) 12:42:17
ここは儲しかいないから批判がしたいなら他所でやったほうがいいぞ
835デフォルトの名無しさん:2007/02/04(日) 12:54:26
>>833
OSが人間になるまで
836デフォルトの名無しさん:2007/02/04(日) 13:00:18
ところでC#で作ったアプリはVistaでまともに動くのか?
.netがうまく動かない様な事を風の噂で聞いたんだが
837826:2007/02/04(日) 13:03:36
先ほどスレッドに関して聞きに来たものです。
何度も申し訳ありません。

チャットを作ってみたのですが、スレッドをTimerで回してみたのですが、
文字を送信した際に送信されない、受信されない不具合があるようでした。

受信側で「何かデータが送られてきたら処理を行う」等のイベントを定義したいのですが
そのようなイベントやメソッドありましたら教えてください。
よろしくおねがいします
838デフォルトの名無しさん:2007/02/04(日) 13:05:37
>>836
そんなこと聞いたことないけど。
MSDN でダウンロードできるようになって以来ずっと Vista 使ってるけど、
C# で作ったもんが不具合起こしたこともない。
839デフォルトの名無しさん:2007/02/04(日) 13:07:01
つかそのためのVistaでしょ
840デフォルトの名無しさん:2007/02/04(日) 13:07:26
vistaでエロゲができるかのほうが心配
841デフォルトの名無しさん:2007/02/04(日) 13:07:44
>>837
スレッドをTimerでまわすって意味不明なんだが、いったい君は何をやってるんだね?
842デフォルトの名無しさん:2007/02/04(日) 13:08:55
>>838
そっか、ガセの話か
ありがと
843826:2007/02/04(日) 13:09:02
すみません。自己解決しますた。
デリゲート使えばよかったDOS
844デフォルトの名無しさん:2007/02/04(日) 13:09:49
VISTAにしたら彼女ができました^^
845826:2007/02/04(日) 13:19:21
┳文字列が受信できたら表示する ┳
┣文字列が送信された場合に送信┫
┗別の操作があった場合その処理┛

こんな感じにしたかったんですが送受信に関しては
作ったメソッドは文字列受信したら停止してしまいます。
そのため定期的に呼ばなきゃならないのかなと。
846デフォルトの名無しさん:2007/02/04(日) 13:19:48
C++ 徒歩
Delphi チャリンコ
VB  車
C#  単車

C++やりたいけどなぁ。
コードを書くのがまどろっこしすぎる
847デフォルトの名無しさん:2007/02/04(日) 13:25:19
>>846
.netならVBもC#も違いはないと思うが
VBは関わらない方が良い気がする
848デフォルトの名無しさん:2007/02/04(日) 13:26:30
つD
849デフォルトの名無しさん:2007/02/04(日) 13:26:37
Express入れようかと思ったが河童800じゃきつそうだな
850デフォルトの名無しさん:2007/02/04(日) 13:31:04
VBなんて見た感じ気持ち悪い
大文字多いし
851デフォルトの名無しさん:2007/02/04(日) 13:37:03
>>849
メモリあれば問題ない XPだと1Gくらい? 756M積んでた時でも気にならなかった気がする
今は256Mなんで起動させないけど
852デフォルトの名無しさん:2007/02/04(日) 13:38:43
VBは2chに直接貼ってインデントが消えても
それなりに読める利点がある
853デフォルトの名無しさん:2007/02/04(日) 13:41:25
>>850
それ両方やるとたぶん意見変わるよw
実際俺がそうだから。
854デフォルトの名無しさん:2007/02/04(日) 13:42:31
つうかさ、.netでVBがあれだけC#っぽく変えたのは
MSが無言で藻前らC#に移れよ、いずれVB止めるからって言ってる様に見えるぞ
いつまでもしがみついてると酷い目にあう気がする
855デフォルトの名無しさん:2007/02/04(日) 13:44:21
>>853
両方やってるけど850に同意するよ
VB系の文法は好かん
856デフォルトの名無しさん:2007/02/04(日) 13:45:41
>>853
両方やったことあるけど
関数とかクラスとか入れてるから
BASICとしては言語バランスメチャクチャになってる
857デフォルトの名無しさん:2007/02/04(日) 13:46:24
VB.NETはVB組を留めJ#はJava組を取り込みつつ、C#に移れるようにするための商業戦略的な言語だからなあ。
858デフォルトの名無しさん:2007/02/04(日) 13:48:18
>>851
w2kでメモリは256
一応Eclipse動いてるからどうにかなる気もするが、
とりあえずコンソールからコンパイルして遊んでみることにする
859デフォルトの名無しさん:2007/02/04(日) 13:56:21
>>856
話ずれてないかい?

まあ良いけど、コードの読みやすさは明らかにVBのコードの方が上だと思うけどね俺は
860デフォルトの名無しさん:2007/02/04(日) 14:03:03

End Sub
とかめんどい

{}
これでいい
861デフォルトの名無しさん:2007/02/04(日) 14:04:28
コードの読みやすさなんて主観だから人それぞれだろ。
862デフォルトの名無しさん:2007/02/04(日) 14:05:53
>>860
IDE嫌いな人?
今時珍しいね
863デフォルトの名無しさん:2007/02/04(日) 14:16:16
VBの方が自然に読めるが,C#はかな漢字交じりみたいな感じで
ぱっと見て全体を把握しやすい
864デフォルトの名無しさん:2007/02/04(日) 14:33:48
ここ比較スレじゃねーから止めれ
まぁ内容的に初心者スレだけどなwww
865デフォルトの名無しさん:2007/02/04(日) 15:47:50
VBで

public void a()
{
   for(....)
   {
   }
}

こんな感じで入れ子何個も作ることってできないでしょ
かなり見ずらい
866デフォルトの名無しさん:2007/02/04(日) 15:54:14
>>865
それどんな釣りだよw
867デフォルトの名無しさん:2007/02/04(日) 16:44:39
比較スレはこっち。好きなだけやってくれ。

【VB.NET】VS2005 選ぶならどっち?【C♯】
http://pc10.2ch.net/test/read.cgi/tech/1106538237/l50
868821:2007/02/04(日) 18:25:07
>>822
>>824は偽者ですが(´・ω・`)Expandする度にDBに問い合わせをしているので、
数が増えてくると一番最初に開くときに時間がかかりそうなことをしているのが理由です。
869デフォルトの名無しさん:2007/02/04(日) 19:16:39
質問です。
プログラムの保存データをXMLで保存しようとしてたのですが、
バイナリで保存するように変更、読み書きともに成功したのですが、
この保存データを別のプログラムから読み込もうとしたとき、
SerializationExceptionが発生してしまいます。
別のプログラム側も、クラス名、メンバ名、数ともに一致していることは
確認しました。
XMLの時はこんなことなかったのですが、どのようにしたら読み込める
ようになりますか?
870デフォルトの名無しさん:2007/02/04(日) 19:20:39
>>869
アセンブリ修飾型名で保存されるから、
別のプログラムも型を定義したアセンブリを参照している必要がある。
871デフォルトの名無しさん:2007/02/04(日) 19:35:49
>>870
ということは、Assembly.Load()とかを使って元のプログラムを読み込んで、
MethodInfoからInvoke()で読み書きすればいいのでしょうか?
872デフォルトの名無しさん:2007/02/04(日) 19:38:16
もしかしてC#って#defineできないんでしょうか?
873デフォルトの名無しさん:2007/02/04(日) 19:40:25
#defineはあるよ
フラグ立てるだけだけどな
値を与えたいならconstを使っとけばコンパイル時に置き換えられる
874デフォルトの名無しさん:2007/02/04(日) 19:58:11
把握しました。
どうもです。
875デフォルトの名無しさん:2007/02/04(日) 20:00:43
>>871
普通に型を定義してるアセンブリを参照しとけばいいんじゃない?
876デフォルトの名無しさん:2007/02/04(日) 20:21:02
っていうか、バイナリシリアル化使う限り.NET Frameworkのバージョン変わっただけで
あぼーんの可能性があるんだよね。
違ったっけ?
877デフォルトの名無しさん:2007/02/04(日) 20:22:39
878デフォルトの名無しさん:2007/02/04(日) 20:28:39
コピペ君ってやっぱり間抜けだよな
バージョンの意味が違うと思いますがw
879デフォルトの名無しさん:2007/02/04(日) 20:39:47
>>875
ということは、元プログラムの保存用クラスをpublicにしなければいけないという
ことですか…。
手元に元プログラムのソースがないので今日中には無理か orz

ありがとうございました。
880デフォルトの名無しさん:2007/02/04(日) 22:30:33
(地名,緯度,経度)が縦に800個程羅列されたテキストファイルを読み込んで、
メンバtimei,メンバido,メンバkeidoを持つ構造体配列を作成したいのですが、
やり方が分かりません。

ファイル読み込むのと、構造体を宣言するまでは出来るのですが、
作成はどうすればいいのでしょうか?




881デフォルトの名無しさん:2007/02/04(日) 22:34:27
宿題か・・・ま、いいやw

ファイルの読み込みは出来てるって、ドコに読み込んでるの?
ちょっとくらい今のソースを書いてみ。
882デフォルトの名無しさん:2007/02/04(日) 22:34:58
構造体名[] 変数 = new 構造体名[800];
883デフォルトの名無しさん:2007/02/04(日) 22:39:54
宿題はクラスメイトに聞け。
884デフォルトの名無しさん:2007/02/04(日) 22:44:26
すみません><
今は一行ずつ読み込んでlistboxに表示させています。

string path = textBox1.Text;
System.IO.StreamReader (path)
new System.IO.StreamReader(path);
string line;
listBox1.Items.Clear();

while((line=reader.ReadLine()) !=null)
{
listBox1.Items.Add(line);
}
reader.Close();
}

listboxに表示を構造体作成の処理に変なければいけないんですよね。

885デフォルトの名無しさん:2007/02/04(日) 22:46:14
多分CかC++と間違えてるんだよ。

C#は、CでもC++でもありませんよ。
C#は、CでもC++でもありませんよ。
C#は、CでもC++でもありませんよ。
886デフォルトの名無しさん:2007/02/04(日) 22:47:18
C#みたいだけど…
887デフォルトの名無しさん:2007/02/04(日) 22:50:00
構造体の作成はC#では出来ないのでしょうか?
888デフォルトの名無しさん:2007/02/04(日) 22:51:01
>>887
釣だなw

そうじゃないなら勉強しなおせ!
889デフォルトの名無しさん:2007/02/04(日) 22:51:23
>>885
何を言ってるのか分からん
890デフォルトの名無しさん:2007/02/04(日) 22:52:48
ちょっとは本屋に行ってC#の本読んでこいと思うな
なんでもかんでも頭から聞いてもなぁ・・
891デフォルトの名無しさん:2007/02/04(日) 22:53:16
さすがに釣りじゃないのか?
892デフォルトの名無しさん:2007/02/04(日) 22:54:07
すみませんでした、勉強します><
893デフォルトの名無しさん:2007/02/04(日) 22:57:48
構造体の宣言はどこに?
894デフォルトの名無しさん:2007/02/04(日) 23:02:29
>>893
おもろくないから他所でやれ
895881:2007/02/04(日) 23:04:08
>>884
ほれ、先生には内緒だぞ。
後は適当にやってくれ。


struct Kouzoutai
{
public string timei;
public string ido;
public string keido;
}


string[] value = line.Split(',');
Kouzoutai kouzoutai = new Kouzoutai();
kouzoutai.timei = value[0];
kouzoutai.ido = value[1];
kouzoutai.keido = value[2];
896デフォルトの名無しさん:2007/02/04(日) 23:07:25
その先生はC#のことをGUIが強力なC++とみなしてるのか?
そんな先生には教わりたくないな
897デフォルトの名無しさん:2007/02/04(日) 23:09:13
独り言はチラシの裏に書いてろバカ
898デフォルトの名無しさん:2007/02/04(日) 23:10:09
くだらないこと質問してすみませんでした><
881,882,893,895さん、ありがとうございました!
899デフォルトの名無しさん:2007/02/04(日) 23:19:26
漏れが実がある似たような質問をしてみよう

ある関数に引数をキー入力する場合Const値が選べるんですけど
あれって、構造体でConstを宣言すればいいんでしょうか?
900デフォルトの名無しさん:2007/02/04(日) 23:32:35
>>899
言ってることがはっきりしないので
例を挙げると、テキストカラーとか入力すると色んな色がフルダウンメニューで
でるあれです
901デフォルトの名無しさん:2007/02/04(日) 23:35:25
>>900
>言ってることがはっきりしないので
はっきりしてないもんが実になる訳ないだろ
902デフォルトの名無しさん:2007/02/04(日) 23:36:48
>>901
そのとおり
_| ̄|○
903デフォルトの名無しさん:2007/02/05(月) 00:15:02
なんのことやら
904デフォルトの名無しさん:2007/02/05(月) 01:10:48
Windowsのファイル転送とかで、長いパス名が真ん中だけ省略される奴がありますが、
あれはどこかにAPIがあったりするんでしょうか。
905デフォルトの名無しさん:2007/02/05(月) 01:30:10
StringFormat.Trimming, StringTrimming.EllipsisPathあたりをMSDNで引いてみれ
906デフォルトの名無しさん:2007/02/05(月) 01:46:50
これはちょっと実があるなw
907デフォルトの名無しさん:2007/02/05(月) 02:04:43
Win32 API の EnumWindows でコールバックに delegate を
渡したいときはどうすればいいかおしえれくらさい。
908デフォルトの名無しさん:2007/02/05(月) 02:15:02
EnumWindows(new デリゲート名(プロシージャ名));
こんな感じじゃない?
909デフォルトの名無しさん:2007/02/05(月) 02:16:04
別に難しいことないだろ

[DllImport("user32")]
static extern bool EnumWindows(EnumWindowsCallback lpEnumFunc, IntPtr lParam);
delegate bool EnumWindowsCallback(IntPtr hWnd, IntPtr lParam);
...

EnumWindows(new EnumWindowsCallback(プロシージャ), IntPtr.Zero);
EnumWindows(プロシージャ, IntPtr.Zero); // C#2.0

匿名関数なら、
EnumWindows(delegate(IntPtr hWnd, IntPtr lParam)
{
    Console.WriteLine(hWnd);
    return true;
}, IntPtr.Zero);
てな感じか
910デフォルトの名無しさん:2007/02/05(月) 02:22:14
やってみます。ありがとう。
911デフォルトの名無しさん:2007/02/05(月) 03:06:19
>>905
ありがとうございます。
912デフォルトの名無しさん:2007/02/05(月) 10:09:35
参照タイプの引数をコンストラクタで受け取って、そのクラス内の他の
メソッドで参照のまま使い続けるにはどうすれば良いのでしょう?

なんか説明しにくいですが
要はC++のようにクラスのコンストラクタの引数をポインタで受け取って
アドレスをクラスローカルのポインタメンバにコピーして そのクラス内で
使い続けるようなことができるのでしょうか、ということです。
913デフォルトの名無しさん:2007/02/05(月) 10:57:21
参照型なら普通に参照のまま使えるしょ
値型ならref
914912:2007/02/05(月) 11:44:07
class test{
bool test_bool;
    object test_object;
   
   public コンストラクタ(ref bool test_bool, object test_object)
{
this.test_bool = test_bool;
this.test_object=test_object;
}
private void testmethod()
{
test_bool = true;//これはローカルメンバいじってるだけ
      bool temp_bool = true;
test_object = (object)temp_bool; //これもローカル……
}

}
例えば、こんな感じで testmethod()でコンストラクタ引数で参照したtest_bool自体
をいじりたいのですが……
testmethod()にどうやって持って行けばいいのかがわからないのです
ボックス化して渡しても変更されないですし
915912:2007/02/05(月) 11:53:16
C++だと
class test{
bool* mybool;
public test(bool* test_bool){
mybool = test_bool;
}
てな感じで、その後testクラス内ではmyboolを
利用するだけで参照元の変更ができたような……
916デフォルトの名無しさん:2007/02/05(月) 12:49:08
>>915
this.test_bool = &test_bool;
this.test_object=&test_object;
917デフォルトの名無しさん:2007/02/05(月) 13:11:24
>>916
つまりunsafe指定で使うしか無いということですか
918デフォルトの名無しさん:2007/02/05(月) 14:20:21
boolをメンバに持つクラスを作ってそれを渡せばいい
919912:2007/02/05(月) 14:56:05
>>918
それってボックス化とおなじことでは?
コンストラクタから外に出す時点で別のインスタンスに
なってしまうのですが……
アドレスというか参照だけもらいたいのです
できればunsafe使わずに
920デフォルトの名無しさん:2007/02/05(月) 15:01:35
>コンストラクタから外に出す時点で別のインスタンスに
>なってしまうのですが……

      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < んなーこたーない
    ´∀`/    \__________
   __/|Y/\
 Ё|__ | /  |
     | У  |
921デフォルトの名無しさん:2007/02/05(月) 15:02:02
C++脳の恐怖
922デフォルトの名無しさん:2007/02/05(月) 15:04:28
C++で考えちゃいけない
C#ってCっぽく見えるが
VBに近い
923デフォルトの名無しさん:2007/02/05(月) 15:05:28
>>919
C#ではマネージドポインタは使えないから無理。

>>918の通りに参照型でラップ(≠ボックス化)して、その参照をやり取りするしかない。
924デフォルトの名無しさん:2007/02/05(月) 15:13:48
C#じゃなくてもマネージドポインタはインスタンスフィールドにできなかった気が
925912:2007/02/05(月) 15:31:05
>>918 >>923
ありがとうございます。
なるほど。メンバにしたクラスをローカルクラスで受ければ大丈夫ですね
boolのボックス化=boolをメンバにもつオブジェクト型クラスの作成
と勘違いしてました。そもそもオブジェクト型も参照型のはずでは……
わけがわかりませんorz
926デフォルトの名無しさん:2007/02/05(月) 15:31:31
なんか回答も迷いがあるみたいだから分かりやすい例を挙げるけど
structはスタックにも直接積まれる。そういうことだ
927デフォルトの名無しさん:2007/02/05(月) 16:06:13
>>918が言ってるのはコードにするとこういう事だよ。
class BoolWrapper {
   public BoolWrapper(bool x) {
      _value = x;
   }
   public bool Value {
      get { return _value; }
      set { _value = value; }
   }
   public bool _value;
}
class Test {
   public Test(BoolWrapper x) {
      _x = x;
   }
   public Method() {
      _x.Value = true;
   }
   public BoolWrapper _x;
}
static void Main() {
   BoolWrapper hoge = new BoolWrapper(false);
   Test testobj = new Test(hoge);
   testobj.Method();

   Console.Write(testobj._x.Value); //true
   Console.Write(hoge.Value); //hogeの中も勿論true
}

ボックス化はBoolWrapperのValueプロパティからsetが出来ない版を、
わざわざクラス作らなくても自動的にやってくれる機能だと思えばいい。
928912:2007/02/05(月) 17:43:28
>>927
丁寧にありがとうございます。
同様のコードで実験して、確認しました。
929デフォルトの名無しさん:2007/02/05(月) 18:06:05
あんまりお薦めできないが
class Ref<T> where T : struct
{
private T _value;
public T Value{get{return _value;}set{_value=value}}
}
930デフォルトの名無しさん:2007/02/05(月) 20:32:35
以下VBスレで聞いたのですがレスしてもらえませんでした。すみませんが
教えてください。

以前はデバッグ時に一時停止してのコード変更が可能だったのに、
どこかのタイミングからか、コードウインドウのタブ耳にロックのマークが現われ、
デバッグ実行中の一時停止でコード変更ができない状態になってしまいました。

これを解除してまたコード変更可能な状態にしたいのですが、
方法が見つけられずにいます。すみませんが解除の仕方があれば教えてください。
931デフォルトの名無しさん:2007/02/05(月) 20:42:40
>>930
そんな悪い習慣はこの際捨てる、が正解だと思う。

質問の答えはたぶんリリースビルドになってるだけでしょ。
構成マネージャでデバッグビルドに戻せば直る。
932デフォルトの名無しさん:2007/02/05(月) 20:46:00
つーか、タブ耳ってなんかワロタ
933デフォルトの名無しさん:2007/02/05(月) 20:59:25
耳たぶの仲間かな
934デフォルトの名無しさん:2007/02/05(月) 21:00:26
デバック中にコード変更なんて、そんなむちゃくちゃなデバックができるんか
知らなかった
935デフォルトの名無しさん:2007/02/05(月) 21:34:06
>>934
Edit and Continueでググってみ
936デフォルトの名無しさん:2007/02/05(月) 21:35:23
>>935
わざわざありがと
漏れはそんなデバックしないからいいよ
937デフォルトの名無しさん:2007/02/05(月) 22:08:33
>>931
>構成マネージャでデバッグビルドに戻せば直る

情報、どうもです。
ツールメニューからオプションで、「ビルド構成の詳細を表示(I)」をチェック
しましたら、確かに「構成マネージャ」が「ビルド」メニューに現われました。
そこで見ましたところ、DebugとReleaseと選べるところはDebugとnっていました
が、やはりデバッグ中はロックが掛かっていました。

>>935
それで、先のオプションのところでの、「デバッグ」項目では、確かに
「エディトコンティニュ」というページがあったので、そこも見てみますと、
そこでも「エディトコンティニュを有効にする」にチェックが付いていました。
それでもやはりデバッグ時にはロックが掛かっているのでした。

まだほかに設定があるのでしょうか・・・・・。
938デフォルトの名無しさん:2007/02/05(月) 22:10:30
>>937
エディットできるのはブレークポイントで止まってるときだけじゃね?
939デフォルトの名無しさん:2007/02/05(月) 22:33:45
>>938
すみません、焦ってました。そうでした。今止めて確認したところ、
できるようになっていました!
まことにありがとうございました!!
940デフォルトの名無しさん:2007/02/05(月) 22:34:45
なんじゃそれwwww
941デフォルトの名無しさん:2007/02/06(火) 00:40:35
動いてる途中で有効ってありえないじゃんw
i

in

int
942デフォルトの名無しさん:2007/02/06(火) 02:24:28
[Stop]キーを押す。

リストを修正する。

CONTINUE

こんなことしてた覚えがあるな。
943デフォルトの名無しさん:2007/02/06(火) 11:25:55
派生クラスの中で、baseクラスにない名前のプロパティを
new public virtual キーワード付きで作成し、ビルドして
Formに貼り付け、デザインモードで値をプロパティウインドウで入力、
実行して動作確認までOKだったが、もう一度デザインモードで
プロパティ・ウインドウを見ると、今度は設定したはずの値が消えて
しまっていて、Form画面上でもそれが表示されていない、
つまり、InitializeComponent()に記録されないという事態が起きました。

プロパティ値の頭には
  [Category("・・・"),Description("****")]
  [BrowsableAttribute(true)]
という修飾詞は付いていますが、

baseクラスに同じ名前のプロパティがあるときでも、set{}側で
それに代入しておいてやらず、勝手に派生クラス専用の変数に
入れただけだと、やはり上と同じ現象になりました。

これを解決し、Form側で InitializeComponent()に記録されるように
なるために他に処理が必要でしょうか?それとも何か根本的に間違って
いるのでしょうか?
944デフォルトの名無しさん:2007/02/06(火) 11:32:38
>>943
デザイナシリアライゼーションは出来るようになってんの?
945デフォルトの名無しさん:2007/02/06(火) 11:39:33
コード生成だからシリアライズは関係ないんじゃないの
とりあえずこっちでは普通にできたからそのプロパティの実装晒して
946デフォルトの名無しさん:2007/02/06(火) 11:56:44
>>944
>>945
プロパティの記述は

new public virtual string Text
  {
   get
    {
    return _Text;
    }
  set
    {
   _Text = value;
     // base.Text = value; ・・・(*1)
    }
  }

(*1) を生かすと InitializeComponent() に正しく記載されるようになり、
このままだと、プロパティページに書いても反映されません。
947デフォルトの名無しさん:2007/02/06(火) 12:16:51
>>946(追記)

>>943
>Formに貼り付け、デザインモードで値をプロパティウインドウで入力、
>実行して動作確認までOKだった

の部分での「動作確認」は、自分のコード上でのTextプロパティの代入が
できていた、ということでしたが、コード上で何も代入しないと、プロパティ・ウインドウ
で書いた値も反映されず空白のままで、しかし実行が終わって戻ってくると、
プロパティ・ウインドウには書かれた値が残っていても、InitializeComponent()
には反映されていない、ということでした。
948デフォルトの名無しさん:2007/02/06(火) 12:25:48
>>946(追記2)

これで不思議なのは、baseクラスを Control の場合は、Textプロパティは
存在するので base.Text への代入はできてよいのですが、baseクラスに
Panelを選んだ場合は Textプロパティは public にも protected にも存在しない
ので、 base.Text への代入はできないはずでしたが、どういうわけか、(*1)を
生かしてもビルドエラーにはならず、実行もできてしまって、InitializeComponent()
にも書き込まれているのでした。

理解が全然違っているのでしょうか・・・
949デフォルトの名無しさん:2007/02/06(火) 12:27:35
すいません。質問をさせてください。

Formに複数個ボタンがあり、そのボタンを押すと色が変わるようにしたいと思ってます。
ただ、ボタンの数が30個以上あり「これって毎回書かなくてもできるんじゃないかな?」と疑問が出てきました。
今は
if (textBox1.Text == "A01")
{
btnA02.BackColor = btnA03.BackColor = btnA04.BackColor =
btnB01.BackColor = btnB02.BackColor = btnB03.BackColor = btnB04.BackColor =
btnC01.BackColor = btnC02.BackColor = btnC03.BackColor = btnC04.BackColor =
btnD01.BackColor = btnD02.BackColor = btnD03.BackColor = btnD04.BackColor =
btnE01.BackColor = btnE02.BackColor = btnE03.BackColor = btnE04.BackColor =
btnF01.BackColor = btnF02.BackColor = btnF03.BackColor = btnF04.BackColor =
btnG01.BackColor = btnG02.BackColor = btnG03.BackColor = btnG04.BackColor = btnG05.BackColor =
btnH01.BackColor = Color.White;
btnA01.BackColor = Color.LightCyan;
}
上記のように指定してます。うまく説明できずに申し訳ないですが、何かいい方法は無いでしょうか?
950デフォルトの名無しさん:2007/02/06(火) 12:42:41
>>945
コードを生成することもシリアライズのひとつだっつーの。
DesignerSerializationVisibilityやらSystem.ComponentModel.Design.Serializationでも
眺めてみろハゲ。

>>946
今環境がないので調べられんがMSDNに必ず元のに代入しろとか書いてなかったか?>Text
Nameと変な風に連動してた気がするからなんか独自にやっているのかもしれん。
951デフォルトの名無しさん:2007/02/06(火) 12:46:41
>>948
回答になってないが、現状でデザイナで操作できなくなるような変更はやめたほうがいいかもね。
何がしたいのかわからんけど、フォームのプロパティを置き換えなきゃできないことなの?
952デフォルトの名無しさん:2007/02/06(火) 12:47:14
foreach(Control c in Controls)
{
if (c == sender) continue;
c.BackColor = Color.White;
}
((Control)sendor).BackColor = Color.LightCyan;



or

lastbtn.Backcolor = Color.White;
lastbtn = (Control)sender;
lastbtn.Backcolor = Color.LightCyan;
953デフォルトの名無しさん:2007/02/06(火) 12:50:17
>>949
質問とソースが微妙に一致してないぞ。
質問からは押したボタンの色が変わって欲しいように想像するが、
ソースはテキストボックスにセットされてる文字列からボタンを決めて、
そのボタンはシアン系、それ以外は白って感じだが。

何がしたいのかハッキリしてくれ
954デフォルトの名無しさん:2007/02/06(火) 13:31:32
>>948
PanelもControlですよ
955デフォルトの名無しさん:2007/02/06(火) 13:36:23
>>950
>今環境がないので調べられんがMSDNに必ず元のに代入しろとか書いてなかったか?>Text
>Nameと変な風に連動してた気がするからなんか独自にやっているのかもしれん。

そうだったんですか、どのプロパティも同じとはいかないのかもしれませんね。
これがBackColorで同様のことをやったときは、baseの方は透明にしておいても
独自変数の値がちゃんと出てきてたので、Textでも同じかと思ったのでした・・・

>>951
>現状でデザイナで操作できなくなるような変更はやめたほうがいいかもね。

もともとPanelにはTextプロパティがなかったので追加で実装する必要が出たのですが、
今改めてみてみると、ヘルプによるとControlクラスにも、実際には Public にも
Protected にも Text プロパティはリストに載っていないです、??

それで、別の、VBのプロジェクトと組み合わせたソリューション内でやってみると、
この Textプロパティに関する Control と Panel の区別はちゃんと出てきて、
Controlクラスから派生した方は base.Text への代入はOK、Panel クラスから
派生した方は base.Text への代入でビルドエラーが出て来ていました。

C#だけで単独でやっているとこの差が現われず、VBとの混用でやっている方では
これが出るということは、両者の設定に関係しているのでしょうか・・・?



956デフォルトの名無しさん:2007/02/06(火) 13:41:37
>>954
そうなのですが、>>954のような状況でした。

このことから、この Panel と Control の違いは、Text プロパティが
プロパティ・ウインドウに現われるかどうかの違いと一致していましたので
Panel ではたぶん Textプロパティを殺しているのではないかと思ったのですが
そうではないのでしょうか・・・。
957949:2007/02/06(火) 14:05:25
>>952
具体的な回答ありがとうございます。
まだ始めたばかりなので逆引き大全を片手に今眺めてます…orz

>>953
質問の仕損ないで申し訳ないです。
今はボタンを押したときにtextBox1に[A01]等のデータが入るようにしてます。
958デフォルトの名無しさん:2007/02/06(火) 14:11:05
>>955
>今改めてみてみると、ヘルプによるとControlクラスにも、実際には Public にも
>Protected にも Text プロパティはリストに載っていないです、??

この Control は System.Windows.Forms のではない別の Control でした、
System.Windows.Forms.Control では Text も BackColor もやはり存在してました。

Panel の方ももう一度みてみようと思いましたら、今度は Help で 「見つかりません」
になって探せなくなってしまった・・・、まずこっちから直さないと。。。。

959デフォルトの名無しさん:2007/02/06(火) 16:53:26
>>958
PanelにもTextはあるがこのクラスでは使用しないことになっている。
プロパティグリッドに表示されないのは非表示になってるから。

[Category("Appearance"), Description("hogehohe"), Browsable(true)] 
public override string Text {
  get { return base.Text; }
  set { base.Text = value; }}
960デフォルトの名無しさん:2007/02/06(火) 19:19:34
MSDNしらないの?
961デフォルトの名無しさん:2007/02/06(火) 19:20:24
MSDN引いたらすぐに分かるようなこと質問してるってことは知らないんだろ
962デフォルトの名無しさん:2007/02/06(火) 19:24:33
すいません 質問させて下さい。

private const int WM_CLOSE = 0x0010;

protected override void WndProc(ref Message message) {
  base.WndProc(ref message);
  switch(message.Msg) {
      case WM_CLOSE:
        MesssageBox.Show("test");
        break;
      default: break;
  }
}

と書いたのですが、フォームを閉じてもWM_CLOSEを受け取れません。
終了処理などをさせたい場合、どうしたら良いのでしょうか!!!
お願いします。。。
963デフォルトの名無しさん:2007/02/06(火) 19:25:43
何故そんな回りくどいことをするの?
964デフォルトの名無しさん:2007/02/06(火) 19:26:47
他にやり方わからないから >>963
965デフォルトの名無しさん:2007/02/06(火) 19:27:03
OnClosed,OnClosingをオーバーライド。

なんだってそんな低級な方法をとるよ
966デフォルトの名無しさん:2007/02/06(火) 19:27:37
普通にClosingとかClosedとかイベントあるだろ。
967デフォルトの名無しさん:2007/02/06(火) 19:30:21
ありがとう >>965
他にもウィンドウプロシージャーで受け取りたいメッセージが多くある<
なんだってそんな低級な方法をとるよ

ウィンドウプロシージャーをオーバーライドしてイジくるのは低級だったのか・・・
⊂二二二( ^ω^)二⊃
968デフォルトの名無しさん:2007/02/06(火) 19:31:01
プロパティウインドウで終了関連のイベントのところダブルクリックするだけなんだがなあ?

C++から来たの?
969デフォルトの名無しさん:2007/02/06(火) 19:32:55
>>967

変な例えかもしれないが。

アセンブラでウィンドウズプログラム作るのは低級。
970デフォルトの名無しさん:2007/02/06(火) 19:34:27
C++ & win32APIから来ました。が、元はAssemble出身です。
971デフォルトの名無しさん:2007/02/06(火) 19:34:48
>>962
やむにやまれぬ事情もあるのかも知れんな(笑

WndProcを使うとして、base.WndProcを先に呼んでるからじゃない?
972デフォルトの名無しさん:2007/02/06(火) 19:36:09
.NET Framework のソースってどこからみれるの?


えーと質問です。
class hoge {}
class hogelist : List<hoge> {
 public String Value { get() { return ""; } }
}

private readonly hogelist hogelist = new hogelist();

public form1(.......) // こんすとらくた
{
 InitializeComponent();
 textBox1.DataBinding.Add("Text", terolist, "Value");
}

というコードを書いて、外部のフォームからこのフォームを表示させようとすると

form1->Show(); // ここで例外。

ArgumentExceptionはハンドルされませんでした。
DataSource のプロパティまたは列Valueにバインドできません。
パラメータ名:dataMember

と言われて、データバインディングに失敗します。
Show() のところから、ステップ実行すると IEnumerable.GetEnumerator() が呼ばれて
いて、これは素直に通過するのだけど通過した後の外部コードの中で例外が発生します。

どうすればデータバインディングできるのでしょうか?
973デフォルトの名無しさん:2007/02/06(火) 19:37:56
スレッドについての質問です
どこか思いこみがあるようですので間違いを指摘していただけると有り難いです。

Formを作成し、自分で新規にスレッドを作成していない状態で
(つまり自分はシングルスレッドのつもり)
aというメソッドに処理が入り、抜け出す前にbというメソッドに入っているようです。
シングルスレッドの状態でこのようなことはありえるのでしょうか?

尚、a、bともにリストビューのItem選択によるイベント起動がもとになっている物と
思われます。
974デフォルトの名無しさん:2007/02/06(火) 19:38:03
>form1->Show()
ネタですね…
975デフォルトの名無しさん:2007/02/06(火) 19:38:32
ありがとう >>971

base.WndProc(ref message); を、switch文の後に回しても解決出来ました。
976デフォルトの名無しさん:2007/02/06(火) 19:39:54
低級だな。
977デフォルトの名無しさん:2007/02/06(火) 19:40:15
978デフォルトの名無しさん:2007/02/06(火) 19:44:37
>>973
どうせDoEventsしてるとか言うオチだろ。
979デフォルトの名無しさん:2007/02/06(火) 19:49:36
>>972
msdnのサンプルソースとよくみくらべてみて。


ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.databindings(VS.80).aspx
980デフォルトの名無しさん:2007/02/06(火) 19:50:03
>>978
>どうせDoEventsしてるとか言うオチだろ。
していません。
一応検索してみましたが、つかってません。

ちなみに、しょうがないので、lockもしてみましたがうまくいきません。
AutoResetEventとかでしたら、同一スレッド間でも排他制御ができるのでしょうか?
981デフォルトの名無しさん:2007/02/06(火) 19:53:29
>>980
「同一スレッド間でも排他制御」って具体的にはどういうことだ?
同一スレッド「間」???
982デフォルトの名無しさん:2007/02/06(火) 19:54:49
>>979
ちげーよ

多分ネタだよ。
>hogelist

>terolist
983デフォルトの名無しさん:2007/02/06(火) 19:56:41
>>972
コードが適当すぎてワラタ
984デフォルトの名無しさん:2007/02/06(火) 19:58:00
>>973
aがbを呼んでるというオチ?
985デフォルトの名無しさん:2007/02/06(火) 19:59:09
>尚、a、bともにリストビューのItem選択によるイベント起動がもとになっている物と
>思われます。
ここらを詳しく書かないとダメ

void a()
{
b();
}
って書いてないよなw
986デフォルトの名無しさん:2007/02/06(火) 20:00:00
>>981
>「同一スレッド間でも排他制御」って具体的にはどういうことだ?
レスした後自分でも書いてて変だと思った。
まあ、>>973の状況でわけわかんなくなっていると思ってください

一応プロセスはThread.CurrentThread.GetHashCode()で同一かどうか見てるつもりです。
(これも変?)

>>984
>aがbを呼んでるというオチ?
a,bとも単にdllの関数を呼ぶためのラッパーですのであり得ません
987デフォルトの名無しさん:2007/02/06(火) 20:03:09
なぜaの動作中にbが動作しているとわかった?

dll内で呼んでるとか。
988デフォルトの名無しさん:2007/02/06(火) 20:04:22
次スレ余路!
989973:2007/02/06(火) 20:06:13
念のためにa,bの関数の例を出します。
UnLha.dllの関数を呼び出すだけです。
(lockとか例外処理とかどうしようもなくてつけてます)
基本”S”と”E”が交互に表示されるはずですが、”S”が続くケースがあり、その後”E”が続くことが
あるため、メソッドの途中でメソッドが呼ばれている物と判断しています。

public static int UnlhaLck(IntPtr hwnd, string szCmdLine, StringBuilder SzOutput, int dwSize)
{
int ret;
lock (obj)
{
System.Diagnostics.Debug.WriteLine("S1" + Thread.CurrentThread.GetHashCode().ToString());
try
{
ret = Unlha(hwnd, szCmdLine, SzOutput, dwSize);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
ret = -1;
}
System.Diagnostics.Debug.WriteLine("E1");
}
return ret;
}
990958:2007/02/06(火) 20:08:53
>>959
ありがとうございます、オンラインヘルプでみましたら、やはり Panel では
Text プロパティは 「無効になっています」 とのことでした・・・。

それでも、やはり Set{}側で その無効な Text プロパティに代入さえして
おけば InitializeComponent() に書き込まれるらしいことが確認できました。
つまり、Control ベースでも、Panelベースでも同様にできそうでした。

ソリューションに、これらのコントロールも内部のプロジェクトとして入れ込んで
いたのですが、これら部品のコントロールをビルドしたら、一旦 VS2005 自体を
終了し、また再度起動してソリューションをオープンし直してからやってみたところ、
VBとの混用側でも InitializeComponent() に記録されるようになりました。

InitializeComponent() に Text プロパティが保存されなかった問題の原因は、
どうも、これら部品クラスのビルド後の取り込みが行なわれていなかったためかと
思われ(「ソリューションのビルド」で行なってもできませんでした・・・)、
VB との混用で行なう場合は面倒でも VS2005 を再起動する必要があるの
かもしれません・・・。

おかげさまでとりあえず InitializeComponent() に取り込むことができました、
ありがとうございました。
991デフォルトの名無しさん:2007/02/06(火) 20:09:29
必要なのはココじゃない。
ネタ?
992デフォルトの名無しさん:2007/02/06(火) 20:11:50
>>989
スタックトレースはしてみたのか?
993デフォルトの名無しさん:2007/02/06(火) 20:12:19
>>961
MSDNはオンラインで知っていますが、それ以前に、どうして Panel のメンバーぐらいの
参照が オフライン側のほうでできなくなってしまったのか不思議でした。
994デフォルトの名無しさん:2007/02/06(火) 20:13:19
どっちにしても Textって名前は使わないほうがいいんじゃないかな。
995デフォルトの名無しさん:2007/02/06(火) 20:14:55
>>993
探し方がまずいんじゃねーの
996デフォルトの名無しさん:2007/02/06(火) 20:16:19
>>994
Text は特別なのですか、やはり同一名称は new キーワードでも
問題あるのでしょうか・・・・・?
997デフォルトの名無しさん:2007/02/06(火) 20:17:51
>>995
前には見たことはあったのですが、今日はそのページの参照リンクから叩いたのですが
飛んで行かず、「みつかりません」が出てきたのでした。
998デフォルトの名無しさん:2007/02/06(火) 20:18:06
>>992
残念ながら見方が分かりません。

さしあたって、>973の質問のシングルスレッドの状態では、a,bが同時に実行されることは
ないと思って良さそうですね(あたりまえでしょうけど)。

どうもありがとうございました。もうちょっとがんばってみます。
999デフォルトの名無しさん:2007/02/06(火) 20:19:18
new にせざるを得なかったのは、virtual にしたかったからでした。
virtual にすると、 override か書けないとのことでした。
どうもでした。またよろしくです。
1000デフォルトの名無しさん:2007/02/06(火) 20:19:59
>>1000ならC#が世界を変える
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。