5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C♯相談室 Part19

1 :名無しさん♯:04/11/12 15:27:27

(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。


過去スレは>>2-5あたり。


関連リンク
http://onigiri.s3.xrea.com:8080/csharp/index.php?%5B%5B%A5%EA%A5%F3%A5%AF%5D%5D

ソース置き場.NET
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&rm=10

2 :名無しさん♯:04/11/12 15:28:17
過去スレ
Part18 http://pc5.2ch.net/test/read.cgi/tech/1096112588/
Part17 http://pc5.2ch.net/test/read.cgi/tech/1091284402/ (現在HTML化待ち)
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/ (現在HTML化待ち)
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/ (現在HTML化待ち)
Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/ (現在HTML化待ち)
Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
Part12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
Part6 http://pc3.2ch.net/tech/kako/1022/10222/1022257078.html
Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html

3 :デフォルトの名無しさん:04/11/12 18:22:58
Scheme の .NET 対応マダー?

4 :デフォルトの名無しさん:04/11/12 18:23:53
4様参上(゚Д゚≡゚д゚)

5 :デフォルトの名無しさん:04/11/12 18:52:07
えーと、2005βの話題はココで振っていいのかな?

今、Managed DirectX9 October 2004が動くか試してます。
んで、グラボのCapsをコンソールに吐き出そうと↓を打ち込んだ。

Manager.GetDeviceCaps(0, DeviceType.HardWare).ToString().Replace("\n", "\r\n");

どうやら、コレが落ちる原因みたいなのだけれど、例外も吐き出さんと
終了してしまう。Capsの個々のプロパティはフツーに文字列に変換できるので
2005βのバグだと思うんだが?

2005β入れてる奴は上のコードが動くか試してみてくれ。

6 :デフォルトの名無しさん:04/11/13 10:39:15
6rz

7 :デフォルトの名無しさん:04/11/13 14:18:47
複数の言語を切り替えられるようにするにはどうすればよいのですか?
どうも.NETに国際化対応の機能があるみたいですが

8 :デフォルトの名無しさん:04/11/13 14:26:29
>>7
この辺か?
p://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vboriInternationalization.asp

9 :デフォルトの名無しさん:04/11/13 15:45:04
いきなり落ちそうだな

====

不定期にイベントを発行する Component を作ってます。
その Component では、イベント発生したら大抵 Control を弄るので

1:Component 側で Invoke 系を行ってしまおうと考えた
2:Control.Invoke を行うには Control を取得する必要がある為、Owner プロパティを付けた

結果、デザイナで貼り付けた後 Owner プロパティを設定する手間が新たに生まれたのですが、
可能な限り Component 貼り付けるだけで完了する方向性で 1 か 2 をもうちょっと簡略化できませんか?

10 :デフォルトの名無しさん:04/11/13 17:00:34
リファレンス打ち出してくれるフリーツール、何か良いの無いですか?
「Webページのビルドコメント」は private なメンバまで出力されるので、かな〜り使い勝手がわるいんス orz

11 :デフォルトの名無しさん:04/11/13 18:36:41
>>10
NDoc でぐぐれ

12 :デフォルトの名無しさん:04/11/16 08:04:15
あげとく

13 :デフォルトの名無しさん:04/11/16 12:40:36
前スレの992のアフォです。
スレちがいなのに、皆様ありがとうございました。

14 :デフォルトの名無しさん:04/11/16 13:58:03
dataGridから、セレクタを選択してある行を消すのに

dataset.Tables["table"].Rows[Position].Delete();
ってやるのと
this.BindingContext[dataset,"table"].RemoveAt(Position);
てのと2種類あるようですが、両方とも同じように行削除できます。

使い分ける必要ってあるんですか?それとも好きなほうを使えってやつですか?

15 :デフォルトの名無しさん:04/11/16 15:34:43
ビジュアルスタイルではまっています。
manifest でビジュアルスタイルにしています。

画面には textbox が複数あり、これらの textbox は
private void EnterControl (object sender, System.EventArgs e)
{((TextBox)sender).BackColor = Color.Red;}

private void LeaveControl(object sender, System.EventArgs e)
{((TextBox)sender).BackColor = Color.White;}
のように、フォーカスを受け取ると背景色を赤にして、フォーカスを失なうと
白にしています。

この時、フォーカスを失なったコントロールの背景色が白にはなるのですが
赤の枠線が残ってしまいます。

どのような時に枠が残ってしまうのかわかりませんが、枠が残ったコントロール
にマウスカーソルを持っていくとその枠は消えます。

ただ、枠が残ってしまう状態のコントロールがフォーカスを持っている時は
白の枠が描かれてしまいます。でフォーカスを失なうとその白の枠が赤になる
という感じです。

ちょっと説明しづらいのですがこのような現象に関して何か情報があれば
教えて頂きたいです。おねがいします。


16 :デフォルトの名無しさん:04/11/16 17:22:13
J#のバグ潰しマダー?

17 :デフォルトの名無しさん:04/11/16 22:03:43
質問です。
Panel とかで AutoScroll 有効にしたとき、スクロールバーのつまみいじってるときに
クライアント領域をスクロールとか描画とかしたいんですけどできますか?
スクロールのイベント無いみたいなのですが・・・
あと、Win32APIでのScrollWindow()みたいなメソッドってありますか

以上、よろしくおねがいします。

18 :デフォルトの名無しさん:04/11/16 22:48:35
とかとかとか

19 :デフォルトの名無しさん:04/11/16 23:10:53
>>17
継承クラスをつくってオーバーライドしたWndProcでWM_HSCROLLとWM_VSCROLLを捕まえてイベントを発生させる、かな。
コードからスクロールさせる場合はAutoScrollPositionプロパティを操作すればいい。
ただしAutoScrollPositionを操作してもWM_(V|H)SCROLLは発生しない。

20 :17:04/11/17 02:05:06
>>19
サンクスです。明日、試してみます。

21 :デフォルトの名無しさん:04/11/17 11:09:57
質問ですCとC++を一応覚えたので
次にC#をやろうとしていたら
友人にC#は糞だから素晴らしいjavaをやったほうがいいと
言われたのですが本当ですか

22 :デフォルトの名無しさん:04/11/17 11:14:11
>>21
似たようなもん。

23 :デフォルトの名無しさん:04/11/17 11:44:36
>>21
開発元が違うだけ

24 :デフォルトの名無しさん:04/11/17 11:44:45
javaを素晴らしいという人がC#を糞という理由は何だろうね。

25 :デフォルトの名無しさん:04/11/17 11:46:45
決まりきってる、アンチMSなだけ。

26 :デフォルトの名無しさん:04/11/17 11:47:46
>>25
少なくとも技術的理由ではないな

27 :デフォルトの名無しさん:04/11/17 12:58:36
たいていは後発の言語の方が優れてるよ

28 :デフォルトの名無しさん:04/11/17 13:01:15
>21
C#=(Java+Delphi)/2+C++
よって
C#>>>Java

29 :デフォルトの名無しさん:04/11/17 13:08:08
Scheme の地位は揺るがんよ

30 :デフォルトの名無しさん:04/11/17 13:20:51
>29
クラシック音楽は素晴らしい音楽ですが
聞く人は少数派です。

31 :デフォルトの名無しさん:04/11/17 13:40:03
まぁ、将来どうなるかは分からんが、C#やっておいて損は無いけどね。

Webアプリは、JavaかASP.NET、偶にPHPやPerlか?
Windowsアプリ作るなら、C/C++か.NETだしな。

なかなか仕事してても、Webアプリ”だけ”、Windowアプリ”だけ”やってる奴なんて少ないしな。
また、Webアプリ”だけ”やってたとしても、必ずしもJavaとも限らない。

C/C++は覚えたというんだから、次はJavaとC#(またはVB.NET)やっておけば、
とりあえず、此処最近の技術は網羅してるんだから問題無いだろう。

32 :デフォルトの名無しさん:04/11/17 15:44:37
両方やったほうが間違いなく楽しめる
自分の世界を広げろ

33 :デフォルトの名無しさん:04/11/17 20:01:17
>>24
クラスライブラリかなあ?

34 :デフォルトの名無しさん:04/11/17 20:11:21
>24
タダ・・・なのと
色々オープンソースのフレームワークがあるから
それで実験できるとか・・・


35 :デフォルトの名無しさん:04/11/17 20:13:53
>>34
いやそれ C# も同じ

36 :デフォルトの名無しさん:04/11/17 21:36:59

C#重すぎる!けど、
javaでUI作るのよりは少しマシ?

37 :デフォルトの名無しさん:04/11/17 22:33:25
C#おもいか?


38 :マリー:04/11/17 22:36:39
常にVMを起動しておけばいいじゃない

39 :デフォルトの名無しさん:04/11/17 22:46:21
>>36
>javaでUI作るのよりは少しマシ?
かなりマシかも・・・でも 98系だと起動が遅いね。

40 :デフォルトの名無しさん:04/11/17 23:20:12
なんにしても言語の問題じゃないと思うんだが。

41 :デフォルトの名無しさん:04/11/18 09:49:35
拡張子がEXEだから使いやすい以外はJavaと一緒だよ、
重さも使いやすさもライブラリも。
神経質になれば微妙に些細な優劣があるけど、
Windows向けにちょっと調整しただけのデッドコピーだね。
そもそもSunとMSの係争の果ての産物だし。

42 :デフォルトの名無しさん:04/11/18 10:52:14
>41
そんなことはないだろ。
RADの使いやすさとか言語仕様とかC#が勝ってる部分は多い。
Javaにももちろん有利な点はあるが、Windowsでプログラミングする限りは
C#>>>Javaだよ。


43 :デフォルトの名無しさん:04/11/18 10:53:22
総合的な優劣を決める必然性ないだろ。

状況に合ってる方を使え。

44 :デフォルトの名無しさん:04/11/18 11:31:37
RUBY!!!!!!!!!!!!!!!!!!!!!!

45 :デフォルトの名無しさん:04/11/18 19:32:20
ひとつの言語しか使えない低脳以外はどっちが優れていようが問題ないだろ


46 :デフォルトの名無しさん:04/11/18 20:16:12
確かにC#かJavaやってて、C/C++を知らないというのは低脳だな。

47 :デフォルトの名無しさん:04/11/18 20:38:18
>46
わざわざメモリ解放を考えるのは無駄。
実体とポインタの使い分けを考えるのは無駄。
MFCを覚えるのは無駄。
C#とJavaで十分。


48 :デフォルトの名無しさん:04/11/18 20:48:17
こいつは凄い奴だな

49 :デフォルトの名無しさん:04/11/18 21:27:34
interfaceもない言語を使うのは無駄。
ヘッダファイルとソースファイルに同じことを二度書くのは無駄。
WinAPIを直接叩くのは無駄。
C/ C++のような低級言語を使う時代は終わった。
時代はC#/Javaの高級言語だ。


50 :デフォルトの名無しさん:04/11/18 21:28:32
そんな議論が無駄。

51 :デフォルトの名無しさん:04/11/18 21:29:04
>>49
同意。
C#/Java なんか出る前から、心ある人は VB しか使ってませんでした(w


52 :デフォルトの名無しさん:04/11/18 21:32:01
C++の唯一の牙城であったテンプレートも
C#へのGenericsの導入で優位性が崩れつつある。
もうC++は終わった。


53 :在日外国人参政権反対:04/11/18 21:33:51
そうだねーアセンブラとかも無駄だもんねー(棒読み)

54 :デフォルトの名無しさん:04/11/18 21:36:39
低脳必死だな

55 :デフォルトの名無しさん:04/11/18 21:39:28
最後に一言
「無駄なことは無駄」

56 :デフォルトの名無しさん:04/11/18 21:43:47
そうですね

57 :デフォルトの名無しさん:04/11/18 21:53:29
話もとに戻しますが、みなさんどんだけ Dispose 入れてます?

というのも、漏れいままではロジカルに必要なところでは Dispose してたんだけど、
頻繁に更新されるデータを保持するのに大き目の配列の作成・消滅を繰り返してると
意図的にGC.Collect() しないとメモリ足らんとか例外が出るようになって・・・

こうなってくると、リソースの制限にひっかりそうなオブジェクトや、
すぐにリソース開放したい場合以外はファイナライザに任せてもいいかな、という気分に。
using の嵐も面倒だし・・・

58 :デフォルトの名無しさん:04/11/18 21:54:53
imageオブジェクトとストリーム関係ぐらいかなあ意図的に
Disposeするのって。

59 :57:04/11/18 21:55:04
>>57
「こうなってくると」は、「どうせ適当な間隔で GC 動かす必要があるなら」てな意味です。
.NET 2.0 ではこの辺修正されたんでしたっけ・・

60 :デフォルトの名無しさん:04/11/18 22:27:53
Udpでの送受信ができません。どこがおかしいんでしょうか。
送信側
byte[] sendBytes = Encoding.ASCII.GetBytes("Hello World");
UdpClient client = new UdpClient(1023);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),2323);
client.Connect(endPoint);
client.Send(sendBytes,sendBytes.Length);
client.Close();
受信側
public void ReceiveData()
{
UdpClient server = new UdpClient(8080);

while(true)
{
IPEndPoint endPoint = null;
byte[] receiveBytes = server.Receive(ref endPoint);

string receiveData = Encoding.ASCII.GetString(receiveBytes);
this.textBox1.Text = receiveData;
}
}
受信側の開始スレッド
Thread thread = new Thread(new ThreadStart(ReceiveData));
thread.Start();
thread.Abort();

61 :デフォルトの名無しさん:04/11/18 22:36:40
>>60
SendTo で 8080 宛に送ってください。

62 :デフォルトの名無しさん:04/11/18 22:36:47
>>57
メモリー足らないのホントに厳しいよ、なんとかならんかな。
もう2G使い切っちゃって増設できねぇぇぇぇ
ぬぉおおおおおおどうしてくれようかぁぁぁ
と絶叫中

63 :デフォルトの名無しさん:04/11/18 22:37:53
>>60
thread.Abort(); // <- これ要りません。っていうかあるとダメ。

64 :デフォルトの名無しさん:04/11/18 22:51:44
>>52

http://www.mamezou.com/tec/equip001.htm
これを読め。C++のテンプレートとジェネリクスは大分違うぞ。

大きな違いは
-同一変換と異種変換
-閉じた多態と閉じていない多態
って感じか。

C#のジェネリクスはC++のテンプレートに比べて強力な感じはしない。
以下、C++のテンプレートにできてジェネリクスにできないこと
-型生成子
-タグディスパッチ
-テンプレートの特殊化
-テンプレートのインライン展開によるメタプログラミング
などなど。C++のboostのlamda(は次のバージョンでは無名の
デリゲートがサポートされるらしいからできるかも)やFC++みたいな
関数型プログラミング系のテクニックはつらいだろ。


65 :60:04/11/18 23:04:06
>>61>>63
どうもありがとうございます。これで動きました。
送信
byte[] sendBytes = Encoding.ASCII.GetBytes("Hello World");
UdpClient client = new UdpClient(1023);
client.Connect(IPAddress.Parse("127.0.0.1"),8080);
client.Send(sendBytes,sendBytes.Length);
client.Close();
受信
public void ReceiveData()
{
UdpClient server = new UdpClient(8080);

while(true)
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any,0);
byte[] receiveBytes = server.Receive(ref endPoint);

string receiveData = Encoding.ASCII.GetString(receiveBytes);
this.textBox1.Text = receiveData;
}
}
受信スレッド
Thread thread = new Thread(new ThreadStart(ReceiveData));
thread.Start();

66 :エデン:04/11/18 23:16:06
Form1.cs(312): 型または名前空間名 'Socket' が見つかりませんでした。
ディレクティブを使うかアセンブリ参照を使ってください。

これが何を指しているのかわからないのですが・・・。
こういう場合どっかその近くを書き間違えているということでしょうか。

ディレクティブやアセンブリを調べると何かファイルが足りないというような意味みたいだし
教えてエロい人

67 :デフォルトの名無しさん:04/11/18 23:18:18
>>66
たぶん
using System.Net.Sockets;
を追加。

68 :デフォルトの名無しさん:04/11/18 23:23:41
>>64
52じゃないけど、C#でもそんなものなのですか?
VMからして対応していると聞いていてちょっと期待していたのですけど。

69 :デフォルトの名無しさん:04/11/19 01:50:16
話はちょっと変わるのですが、WSDLサービスを記述したデータをwsdl.exeに
渡すと、C#のスケルトンを生成してくれるますがこれ以外に、XMLデータの
スケルトンを生成する方法はないでしょうか?
Wsdl2JavaではコードのほかにXMLもはけますがどうなのでしょうか?
もしできたとして、WSDL.exe自体を勝手に配布したりすとまずいですよね?


70 :デフォルトの名無しさん:04/11/19 07:27:49
C++のテンプレートはコンパイル時にエラー出すと255文字こえるエラーメッセージgがでて
わけわからんかったなぁ。


71 :デフォルトの名無しさん:04/11/19 08:05:48
>>70
http://pc5.2ch.net/test/read.cgi/tech/1095583235/716 はお前か。

72 :デフォルトの名無しさん:04/11/19 08:44:34
>>71
ちがうっちゅーにw

73 :デフォルトの名無しさん:04/11/19 08:48:06
dataGridから、セレクタを選択してある行を消すのに

dataset.Tables["table"].Rows[Position].Delete();
ってやるのと
this.BindingContext[dataset,"table"].RemoveAt(Position);
てのと2種類あるようですが、両方とも同じように行削除できます。

使い分ける必要ってあるんですか?それとも好きなほうを使えってやつですか?


74 :デフォルトの名無しさん:04/11/19 16:11:08
各行にチェックボックスとエディットボックスを備えた
リストボックスのようなUIを求められています。

あまりトリッキーでない方法で実現するにはどうするのが
ベストでしょうか?

最悪はListViewにして、編集には1アクション操作してもらう
ようにお願いしようと思いますが、できれば要望書に近い
UIにしてあげたいのです。

■[ 編集可能 ] 文字列 文字列 文字列
□[ 編集可能 ] 文字列 文字列 文字列
■[ 編集可能 ] 文字列 文字列 文字列
■[ 編集可能 ] 文字列 文字列 文字列

文字列の出所はOleDbですが、一部加工してから表示するので
連携は特に必要ありません。

よろしくお願いします。

75 :デフォルトの名無しさん:04/11/19 16:39:42
売ってるグリッドクラスとか買って来い
出なければ編集時だけeditboxはっつけるか、自分で気合で作る。

76 :デフォルトの名無しさん:04/11/19 17:07:22
DataGridの拡張はそんなに難しくないよ。

77 :デフォルトの名無しさん:04/11/19 17:21:39
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=82
遊び程度にサーバもどき書いてみたんですが、
http://localhost:250/
なら表示されるのに、
http://IPアドレス:250/
にすると表示できません。なんででしょうか?
(起動してから、IE等のブラウザでポート250にアクセスしてみてください。)

78 :74:04/11/19 18:29:26
>>76
どもでした。
DataGrid
DataGridTableStyle
DataGridBoolColumn
DataGridTextBoxColumn
この辺の組み合わせで納得してもらえるようなものを
作れそうです。

79 :デフォルトの名無しさん:04/11/19 20:06:36
つーか、ASP.NETなのかWindowsFormsなのかはっきりしてくれ。

80 :74:04/11/19 20:15:54
>>79
Windows.Formです。

aspxでListViewって使えましたっけ?

81 :デフォルトの名無しさん:04/11/19 20:20:05
EXEファイルの内部の変数を外部の他のEXEファイルから参照したり出来ないでしょうか?
参照設定にEXEファイルを選んでもDLLしか駄目みたいなことを言われるのですが

82 :デフォルトの名無しさん:04/11/19 20:39:54
>>77
listen する IP アドレスは、クライアントが接続してくる interface の IP アドレスを指定する必要があります。
例えばPCが 127.0.0.1 と 192.168.0.0.2 の2つのIPアドレスを持っているとした場合、
それぞれのアドレスを指定した2つのlistenerで同時に待つ必要がある。
遊びに突っ込みもアレだけど、
> Socket handler = (Socket)socketList[socketList.Count-1];
これはスレッド生成時の引数 (object が一個渡せる) で渡したほうが良いような・・・

83 :デフォルトの名無しさん:04/11/19 20:43:11
>>81
内部の変数とやらはともかく、VSからでは参照設定に.exeを指定できない。
.csprojファイルを手でいじってやれば参照できる。

84 :エデン:04/11/19 21:34:24
型、名前空間の定義、またはファイルの終わりが必要です。
と出るのですが多分ファイルの終わりがないんだと思うんですが、
いくらやってもこれが出てしまいます。
どうすればいいんでしょうか
ちなみに
usingはこれを使ってます。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Net.Sockets;
using System.Net;

昨日の終わりか今日の始めにも同じようなことを書きましたが(TT

85 :最凶VB厨房:04/11/19 21:39:19
using部分は大丈夫そうだ。
{ }はちゃんと対になってる?()も。

86 :デフォルトの名無しさん:04/11/19 21:41:19
>>84
括弧がきちんと閉じられていない感じ。
ちゃんと開いた括弧は閉じましょう。
それ以上はコードも無しにわかりっこない…

87 :デフォルトの名無しさん:04/11/19 21:43:45
だからそういうのまとめてソースから削って原因を絞り込めって。

88 :エデン:04/11/19 22:05:52
>>86
この文の全体が500行ほどあることもですが
よく言われる『教えて君』みたいにすぐ答えを聞くんではなくて
ヒントみたいなものをもらって自分で解きたいと思ってのことです。
まあ自分も昔プログラム(当時で10年以上前のベーシックを5年ほど前に中学で、ですが・・・。)
やっていたんで『コードないのに答えれるか!?』というのも理解できるのですが

・・・>>84 も『ある意味』教えて君ですがw

89 :デフォルトの名無しさん:04/11/19 22:09:21
こんなこともあるよ
http://pc5.2ch.net/test/read.cgi/tech/1065196964/584-585

90 :デフォルトの名無しさん:04/11/20 08:07:58
>>88
なんかVC#のエディターというか文法解釈はあやしいことがありました。
再起動したら普通にコンパイルできたり。
500行程度なら、#if falseつかいまくって、ソースをけずりまくっては?

91 :デフォルトの名無しさん:04/11/20 10:06:42
>>90
ネットワークドライブ使ってない?
俺それでやられた。
ローカルにしたら直ったよ、多分タイムスタンプの問題。

92 :デフォルトの名無しさん:04/11/20 17:53:37
くそおおおおおおおおおおおおおおおおおおおお!!!!!!
動かねぇと思ったら作ったスレッド動かしてなかった!!!!
半日潰したぞ!!

93 :デフォルトの名無しさん:04/11/20 18:16:19
>>92
半日ならまだまだOKのうちじゃない?
まあ、おつ。

94 :デフォルトの名無しさん:04/11/20 19:45:06
>>92みたいな奴に限って「これだからM$は」とか能書きたれるよな。

95 :デフォルトの名無しさん:04/11/20 20:38:41
フォームの上にコントロールをいくつか配置するとき、
あるコントロールを別のコントロールの子として配置する方法ってないんでしょうか?
半透明が子でないと効いてくれないので・・・・

96 :95:04/11/20 20:43:16
あともう一つ、子に発生したマウスイベントを親で受け取る方法ってないのでしょうか。

97 :デフォルトの名無しさん:04/11/20 20:50:06
>>95
Control.Parentを設定しなおす。

>>96
ControlのMouseMoveなどのイベントを使う。

98 :95:04/11/20 21:03:26
>>97
どもです
>Control.Parentを設定しなおす。
デザイナからはやっぱ無理なんですかね?

>ControlのMouseMoveなどのイベントを使う。
実はイベントの転送方法が分らなくて・・・




99 :デフォルトの名無しさん:04/11/20 21:12:10
AutoScroll用にパネルの上にPictureBoxをおいているのですが、
スクロールバーなどをのぞいた実質的なPictureBoxの高さってどうしらべればいいんでしょうか?

今は水平スクロールバーがあるかどうかをPanelのサイズとImageのサイズを比べて
あれば PictureBox1.Height-20とかでしのいでるのですが、不便なのでなんかいい方法ないでしょうか?

100 :お尋ね:04/11/20 21:15:42
実際のところ .NET の GUI って、開発しやすいですか?

101 :デフォルトの名無しさん:04/11/20 21:19:17
>>98
イベントハンドラで対応するOn...を投げる。

>>99
ClientSizeでいいんじゃないか。

102 :95:04/11/20 21:24:03
>>101
>イベントハンドラで対応するOn...を投げる。
protected でアクセスできないです(T_T)

103 :デフォルトの名無しさん:04/11/20 21:25:15
>>98
>デザイナからはやっぱ無理なんですかね?
FormのLoadイベントなり、InitializeComponent()の後なりでできる。

>実はイベントの転送方法が分らなくて・・・
VS使ってるならプロパティウィンドウから設定すれ。

>>100
C/C++でAPI使って書くよりは楽。
実際に>>98にはIDEなしで、簡単だからメモ帳あたりでウィンドウを使うコードを書いてみろと言いたい。

104 :95:04/11/20 21:27:20
>>103
転送用のプロパティーってどれなんでしょうか?

105 :デフォルトの名無しさん:04/11/20 21:38:12
>>104
プロパティウィンドウの雷みたいなマーク。

というかイベントの使い方ぐらい覚えれ。

106 :95:04/11/20 21:42:09
>>105
受け取り方はわかるのですが送り方がわからなくて・・・

107 :95:04/11/20 21:58:35
.NetFrameworkでSendMessage PostMessage に当たるものってあるのでしょうか?

108 :デフォルトの名無しさん:04/11/20 22:45:36
>>107
pinvokeすればいいんじゃないの?

109 :デフォルトの名無しさん:04/11/20 22:58:37
>>108
ピンボケ?

110 :95:04/11/20 23:58:12
やっぱアンマネージドで行くしかないのかな・・・ふぅ

111 :デフォルトの名無しさん:04/11/21 00:25:53
そうだね、君には無理そうだね。

112 :デフォルトの名無しさん:04/11/21 00:51:11
>>111
方法あるなら書けよ〜

113 :デフォルトの名無しさん:04/11/21 01:18:06
>>110
つかわざわざクラスで隠蔽してるイベントを外側のコードから発生させるのはよろしくない気がする。

114 :デフォルトの名無しさん:04/11/21 01:19:28
>>113
そんなもんは百も承知だ、分らんなら黙ってろ

115 :デフォルトの名無しさん:04/11/21 01:28:44
>>114
教えてもらいたいなら黙ってろ。

116 :デフォルトの名無しさん:04/11/21 01:46:12
アンマネージドでいく方が敷居高い気がするが。

117 :デフォルトの名無しさん:04/11/21 02:53:21
>>107
http://www.microsoft.com/japan/msdn/net/general/win32map.asp#win32map_messageandmessagequeuefunctions
なんとなく貼ってみた。

118 :デフォルトの名無しさん:04/11/21 03:52:17
背景画像固定でスクロールさせたいのですが何もいいアイデアが思い浮かばずorz

119 :デフォルトの名無しさん:04/11/21 07:08:13
質問です。
よくゴミ箱に入れて削除してしまったファイルを復元するツールがありますが、
それはどうやって復元しているのでしょうか?
削除は読み出せないようにフラグをつけているだけ、ということは知っているのですが、
それをいざ読み出してやる、というと方法が思いつきません。
すいませんが、教えてください。
お願いします。

120 :デフォルトの名無しさん:04/11/21 08:05:33
マネージドじゃむりじゃね?


121 :デフォルトの名無しさん:04/11/21 11:25:00
>>115
おしえられねー癖に

122 :デフォルトの名無しさん:04/11/21 11:36:17
Form1から
dialog.ShowDialog(this)
として、Form2を開き、
Form2から、Form1のOpacityをリアルタイムで変更したいのですが、
どういった方法ですれば良いのでしょうか?

当たり前なのかもしれないですが、
Form2から
this.Owner.Opacity = 0.5;
とかやってもダメでした。。
Form1側で
Opacityを操作するプロパティを用意してもダメでした。。。

助言お願いします〜

123 :デフォルトの名無しさん:04/11/21 11:54:38
>>122
まずどう駄目だったのかをはっきりさせてからだ。

124 :122:04/11/21 12:26:28
実行はできるんですが、
Form1のOpacityにアクセスするとこで落ちます。
エラー内容が
オブジェクト参照がオブジェクトインスタンスに設定されていない
です。


125 :デフォルトの名無しさん:04/11/21 12:31:05
NullReferenceExceptionが返ってくるならnullでなくせばいい。
何がnullになってるのかを考えれば(あるいは調べれば)すぐ答えは出る。
自動的に代入されてるプロパティばかりではないと言う事だ。

126 :デフォルトの名無しさん:04/11/21 13:00:12
何がnullかわかりました!
ShowDialog(this);
とやってForm2を呼び出しているのに、
Form2のOwnerはNullのままでした。(なぜ!?

改善策はわからず。。もうすこし見てみます。。

127 :デフォルトの名無しさん:04/11/21 13:04:30
参照がなければ事前に入れたらいいのに。

128 :デフォルトの名無しさん:04/11/21 13:19:07
>>127
126ではないが、そういう場当たりばっかりやってると、プログラムメチャクチャなるよ

129 :デフォルトの名無しさん:04/11/21 13:32:51
>>121
すでに解決策やらヒントは出てるべ。

マネージドでやる方法もアンマネージドでやる方法も。
そんな時点で教える・教えないもあったものでもないと思うが。

130 :122:04/11/21 13:39:03
だめだ。。
webにのってるのと同じようにしてるのに、
親フォームを取得できないです。。。

親側で、
form2.ShowDialog(this)
として子を呼び出し、
子側で
((Form1)this.Owner).mypublicvalue = 10;

とかすれば、良いはずじゃないのでしょうか?
タスケテー


131 :デフォルトの名無しさん:04/11/21 14:02:41
C#でアニメーションしたいのですがよくわかりません。
具体的にはPicureBoxで表示した画像をアニメーションさせたいのですが
どなたかヒントいただけないでしょうか?よろしくお願い致します。

132 :デフォルトの名無しさん:04/11/21 14:03:15
>>129
現状ではもうアンマネージドによる方法で解決している。
てゆうか、質問した時点でその方法についてなら既に解決済み。
マネージド方式については、どこにあるのか言ってみろ!!



133 :デフォルトの名無しさん:04/11/21 14:12:45
>>131
手軽な方法はタイマーでPictureBoxの画像入れ替え

>>132
言語を理解してるならマネージのほうほうが先に思いつくわけだが、
どっちにしても解決してるなら別にいいじゃん。

134 :デフォルトの名無しさん:04/11/21 14:17:08
>先に思いつくわけだが、
ウソこけ

135 :131:04/11/21 14:31:31
>>133
レスありがとうございます。
タイマーで入れ換えとなると画像再模写になりますよね?

一度模写した画像を動かす方法ってありませんでしょうか?
宜しくお願い致します。

136 :122:04/11/21 14:31:57
解決しました。
Form2のコンストラクタ内でForm1のオブジェクト
取得しようとしちゃダメなんですね。テヘ
すいませんでした〜

137 :デフォルトの名無しさん:04/11/21 14:36:06
>>135
>模写
模写というのが、画像のファイルなどからの読み込みのことを言ってるなら
あらかじめ画像を読み込んでイメージリストにするなり
変数として保存しておけば読み込みは最初だけですむ。

>>136
( ゚Д゚)<

138 :デフォルトの名無しさん:04/11/21 14:42:08
変にカタいところのある95、微妙にずれてる122
どっちもがんがれ。めっちゃがんがれ。

139 :デフォルトの名無しさん:04/11/21 15:11:36
>>122

97 名前:デフォルトの名無しさん[sage] 投稿日:04/11/20 20:50:06
>>96
ControlのMouseMoveなどのイベントを使う。

140 :139:04/11/21 15:12:46
悪い122じゃなくて>>132

141 :デフォルトの名無しさん:04/11/21 15:26:33
見た目重視のためだけなのですがFormのOpacityを
Mouse_Leaveで0.2F Enterで1F
にするコードを書いたのですが、
そのフォーム上で
ControlPaint.FillReversibleRectangle(new Rectangle(this.PointToScreen(p),old_size),Color.Transparent);
で範囲選択をしようとすると反転矩形が表示されなくなってしまいました。

Mouse_Leave,EnterのOpacityを変更する行をコメントアウトすると
問題なく表示されるのでOpacityを触ったのがだめだった用です。

また、Mouse_Leave,Enterの代わりにForm_DeactivedとActivatedを用いても
同じ結果でした。




142 :デフォルトの名無しさん:04/11/21 15:54:18
>>139
散々かかれてますが、受け取る方法ではなくて転送する方法
MouseMoveでイベントを受信することはできるが送信はできない。

143 :デフォルトの名無しさん:04/11/21 16:02:14
初めの条件は「子に発生したマウスイベントを親で受け取る方法」でイベントの転送ではない。
転送しなくてはいけないと思ったのは95が理解していないだけで
この条件を満たすだけならイベントを転送する必要はない。

144 :デフォルトの名無しさん:04/11/21 16:03:14
>>143
親に送信する必要がある、以上。

145 :デフォルトの名無しさん:04/11/21 16:04:14
つかOn...のところで感じ取ってくれよ・・・・

146 :デフォルトの名無しさん:04/11/21 16:08:54
>>144
子で発生したからといって子で処理する必要はなく親にイベントハンドラを実装すればいい。以上。

147 :デフォルトの名無しさん:04/11/21 16:10:09
>>144
だからイベントを勉強しなおせ。
というかなにをしたいのかよくわからん。

>>145
そういうわけでOnXXXを使う前に基本的な段階がわかってなさげ。

148 :デフォルトの名無しさん:04/11/21 16:10:24
判った判った、お前の勝ちだ、全く役に立たないコメントありがとね。

149 :デフォルトの名無しさん:04/11/21 16:15:32
>>148
最大の敗因は教えを請う相手を煽ってることと、決定的なC#への理解不足。

>役に立たないコメント
豚に真珠

150 :デフォルトの名無しさん:04/11/21 16:22:10
お前ら大人気ないな。

151 :デフォルトの名無しさん:04/11/21 16:36:16
>>150
なにを間違ってるのかわざわざ指摘してやってるんだからむしろ懇切丁寧だろ。

152 :デフォルトの名無しさん:04/11/21 16:51:26
>役に立たないコメント

/// <summary>幅を取得します。</summary>
int GetWidth();


153 :デフォルトの名無しさん:04/11/21 17:03:21
>>152
ワロタ

154 :デフォルトの名無しさん:04/11/21 17:09:41
>152
こういうギャグがとっさに出てくるのが2chだなw


155 :デフォルトの名無しさん:04/11/21 17:23:25
>役に立たないコメント

/// <summary>2を取得します。</summary>
int Get2();


156 :デフォルトの名無しさん:04/11/21 17:24:18
2番煎じはつまらんよ

157 :デフォルトの名無しさん:04/11/21 17:51:29
3番煎じ
>役に立たないコメント

/// <summary>test1をします</summary>
int test1();

158 :デフォルトの名無しさん:04/11/21 17:59:41
ちょっと質問。

TextBoxとかListViewなどのコントロールになんて名前のつけかたしてる?

159 :デフォルトの名無しさん:04/11/21 18:04:36
4番煎じ
>役に立たないコメント

/// <summary>回答を激しく求めています</summary>
String getAnswer(>>141);


160 :デフォルトの名無しさん:04/11/21 18:15:58
ここまでくると可哀相に思えるな

161 :デフォルトの名無しさん:04/11/21 18:19:54
>>158
textBox_hoge
.NET の名前付けガイドラインに思いっきり反してるが、
Formのコントロールはぽこぽこ増えたり減ったりするので、
自分で管理してるほかのフィールドとは区別したい。

162 :デフォルトの名無しさん:04/11/21 21:06:59
>>159
どうも透過ウィンドウと相性悪げ。

プラットフォーム呼び出しでPatBltのDSTINVERTを使って
選択範囲内のコントロールをいちいち描画してくとか面倒なことが必要になりそうだな。

163 :141==159:04/11/21 21:09:17
レスありがとうございます。

ちょっと見た目重視にするだけでやたら面倒くさそうですね…

素直に諦めます… 

164 :デフォルトの名無しさん:04/11/21 21:17:24
5番煎じマダ〜?

165 :デフォルトの名無しさん:04/11/21 21:52:30
Opacity を変えると見た目が良くなるのか…

166 :デフォルトの名無しさん:04/11/21 22:05:26
5番煎じ
>役に立たないコメント

/// <summary> >>141を減量します。</summary>
Man man = new Man(>>141);
man.Hear.Count--;

167 :166:04/11/21 22:06:48
Hear -> Hair。
二℃と現れません。orz

168 :デフォルトの名無しさん:04/11/21 22:56:40
01.jpgと言う画像を表示させたいだけなのですがうまくいきません。
pictureBox1.Dispose();

//PictureBox pb = new PictureBox();
PictureBox PictureBox2 = new PictureBox();
PictureBox2.Location = new Point(300, 400);
PictureBox2.Size = new Size(100, 100);
//pb.Image = new Bitmap(300, 300);
//Bitmapオブジェクトの作成(画像ファイルを読み込む)
Bitmap bmap = new Bitmap("01.bmp");
//または、次のようにも出来る
//Image bmap = Image.FromFile(@"C:\Blue hills.jpg");

//PictureBox1のGraphicsオブジェクトの作成
Graphics g = PictureBox2.CreateGraphics();
//画像の描画
g.DrawImage(bmap, 300, 300);
//BitmapとGraphicsオブジェクトを破棄
bmap.Dispose();
g.Dispose();
どこか、間違っていますでしょうか?

169 :168:04/11/21 22:57:34
あ・・・拡張子は、下記ミスってます。
拡張子以外のミス、ありませんでしょうか?

170 :デフォルトの名無しさん:04/11/21 23:02:59
PictureBoxをFormのControlsにAddしてないとみた。

171 :デフォルトの名無しさん:04/11/21 23:08:56
なんかわけわからんことやってるなー……。
折角PictureBox使うのになぜImageプロパティじゃなくて直接書くのかとか。
pictureBox1.Dispose()ってなによとか。
ひょっとして画像を変更するためだけに一々コントロールを作り直してるのか?

172 :168:04/11/21 23:11:50
ココ参考にして作ってみてます
ttp://dobon.net/vb/dotnet/graphics/drawimage.html

173 :最凶VB厨房:04/11/21 23:18:06
コピペしてから修正しろw

174 :168:04/11/21 23:20:58
>>170
簡単なImageの方でやったらAddの有る無しで表示されない場合と表示される場合
確かめることが出来ました。
Addしていませんでした(まだ解決してませんが)

>>171
>172

>>173
コピペしました。。

175 :デフォルトの名無しさん:04/11/21 23:23:44
コピペしてねーじゃん。

176 :デフォルトの名無しさん:04/11/21 23:28:17
一辺ファイル名と変数名以外全部コピペでやってみな。

177 :デフォルトの名無しさん:04/11/21 23:34:27
その「うまくいかない」状態というのがどういったものかを教えてくれないとどうしようもない気がするが
コンパイルすら通らないのか
コンパイルは通るけど思ったような動きをしてくれないのか
そうならばどのような動きをしているのか、とか

178 :168:04/11/21 23:42:50
>>175-177
コピペしてやってみました。一瞬表示されて消えるみたいです。

コンパイルは通り、プログラムは実行されるのですが
画像が表示されないという状況です。

このプログラムの前にちがうpicturebox1.Dispose()しているのも原因の一つみたいです。

179 :デフォルトの名無しさん:04/11/21 23:45:34
>>168
なんで厨房はみんな「うまくいきません」しか書かないんだ?
エラーうんぬんの前に、質問を読む側に状況が全く伝わってないことが分からないのか?

ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=44&vew=111
ttp://bbx.hp.infoseek.co.jp/cgi-bin/bbx.cgi?log=44&vew=106


180 :最凶VB厨房:04/11/22 00:04:37
Paintイベントハンドラに書いてんのか?
それもそのURLにかいてあんぞ。

181 ::04/11/22 00:29:03
お世話になります。GUIのプログラミングに関しての質問です。
現在、お手軽2ちゃんねるブラウザをC#で開発中です。
取得済スレッドの振り分け機能を作ろうと思っているのですが、
それをOutlookのメッセージルール
作成に見られるような
「下線をクリックすると編集できます」みたいな感じで作りたいんです。
こんな感じのボックスってRichTextBoxで実現できますか?
他にも何かいい方法があったらおしえてくださいませ。

182 :デフォルトの名無しさん:04/11/22 00:37:11
>こんな感じのボックスってRichTextBoxで実現できますか?
できなくはない。

>他にも何かいい方法があったらおしえてくださいませ。
UserControl

183 :デフォルトの名無しさん:04/11/22 00:41:16
VSの設定ダイアログみたいに、左にツリー置いて右に詳細をおいた設定を作りたいけど
どうやればいの?
タブより面倒くさそ

184 ::04/11/22 00:44:47
>>182
ありがとうございます。
UserControlをどのように応用するのか私には想像がつかないのですが、
サンプル的なコードなどありますでしょうか?

185 :デフォルトの名無しさん:04/11/22 00:47:45
foreach (TextBox tb in this.Controls)
{
tb.Text = "";
}
Formに配置したすべてのテキストボックスをリセットにしたいのですが
指定したキャストは有効ではありません と実行時にエラーが出ます
コンパイルは通るのですが何かすべてのテキストボックスをリセットするいい方法ないですか?

186 :デフォルトの名無しさん:04/11/22 00:49:19
Controlで回して中でas演算子

187 :185:04/11/22 01:08:42
foreach(Control tb in this.Controls)
{
TextBox temp = tb as TextBox;
if(temp!=null)
{
temp.Text = temp.Name;
}
}
でうまくいけました。 ありがとうございました。
けどやってみて気づいたのですがGroupBoxの中に分類して入れてる10個以上のTextBoxは
FormのControlコレクションに入ってないんですね… orz

188 :デフォルトの名無しさん:04/11/22 01:25:23
>>183
TreeViewのAfterSelectイベントでごにょればなんとかなるまいか。

189 :最凶VB厨房:04/11/22 01:28:38
コンテナだからさ。

190 :162:04/11/22 01:47:45
>>163
ちょっと調べてみた。

MouseEnterでOpacityを1Fに戻すところで
一緒にForm.AllowTransparencyをfalseにするのはどうだろう。

191 :デフォルトの名無しさん:04/11/22 02:05:38
TextBoxを拡張して、色分け表示しようとがんばって調べていますが、
OnPaintとかオーバライドするのがベーシックなやり方でしょうか?
また、TextBoxは内部でもっているデータにどのようにアクセスして、
テキストとして描画しているのか理解できていないのですが、どうやって
調べれば判るでしょうか?

192 :デフォルトの名無しさん:04/11/22 04:54:25
コントロールのフォーカス枠を非表示にしたいんですが、
フォーカス枠を描いているメソッドてありますか?


193 :デフォルトの名無しさん:04/11/22 05:22:34
>>192
Control.ShowFocusCues プロパティ
とか言ってみる。

194 :デフォルトの名無しさん:04/11/22 09:06:38


195 :192:04/11/22 11:25:29
それをoverrideして、常にfalse返すようにしてもダメぽいんです。。


196 :デフォルトの名無しさん:04/11/22 11:28:34
というか、ShowFocusCuesは
フォーカスが移ってきた場合でも使用されて無いみたい。

197 :141==159:04/11/22 12:59:32
>>162==190さん
その方法で無事反転矩形が描画されました。
ありがとうございました。

198 :デフォルトの名無しさん:04/11/22 16:54:08
AllPaintingInWmPaint追放してえ

199 :デフォルトの名無しさん:04/11/22 19:13:33
C#で拡張子の関連付けを設定するにはどうやるんですか?


200 :デフォルトの名無しさん:04/11/22 19:36:36
A.exeがB.exeのstaticな変数を共有する事は出来ないのでしょうか?

B.exeは起動中一秒ごとにpublic static int aをインクリメントし、
A.exeはボタンを押すとその時点のB.aの値を取得して表示する、というものなのですが、
A.exeのアセンブリ参照にB.exeを加えても、
B.exeから見た変数aと、A.exeから見た変数aとが異なるのですが

201 :最凶VB厨房:04/11/22 19:44:07
appdomain

202 :デフォルトの名無しさん:04/11/22 19:45:38
>>200
プロセス間でとなるとメッセージのやりとりやDDE、リモート処理が必要。
//まず別プロセスで実行する必要性があるかどうかから検証するとか。

203 :デフォルトの名無しさん:04/11/22 19:48:15
>>200
DLL 経由で共有する方法はある。

204 :デフォルトの名無しさん:04/11/22 20:28:14
>>201-203
ありがとうございます。
やはり単純には行かないのですね。
AppDomainについて勉強してからもう一度やってみようと思います。

205 :デフォルトの名無しさん:04/11/22 22:07:41
クラスの設計について質問です。

Console.WriteLineなどのように、出力専用であったり、ある値を変換するだけ
のクラスは、staticメソッドにしてもよいのでしょうか?
それともインスタンスを生成して、メソッドを利用するほうがよいのですか?

あまりstaticな変数やメソッドは使うべきではないと聞くのですが、
主にstaticなものはどのような具合に使用するのがよいのでしょう。

206 :デフォルトの名無しさん:04/11/22 22:10:31
>>205
そこらへんはコーディング スタイルの問題だと思う。
私ならほとんどの場合インスタンスを生成してメソッド利用にするけど。

207 :デフォルトの名無しさん:04/11/22 22:16:32
>>205
Console は設計があまりよろしくない。
Win32 では確かに Console は同時に一つしか持てないことになってるが、
他の環境でどうだかは定かではない。
static にしないほうが良かった。
Math などの普遍的かつ非オブジェクト的なメソッド/プロパティはstaticがよろしい。
Path は名前は間違ってるがやってることはやっぱりstaticでよろしい。

208 :デフォルトの名無しさん:04/11/22 22:43:18
javaのstringTokenizerクラスだったか、あれは.NETではString.Splitメソッドで済ます方向だよな。
//わざわざクラス立ててる割りにメソッドがしょぼいと言うイメージを受けたが。>stringTokenizer

209 :205:04/11/22 22:52:02
即レスありがとうございます。

たしかに少し値を変換するぐらいのメソッドだったら、
インスタンスを生成せずstaticで済ませたい気持ちありますね(汗

もうすこしクラスの組み立て方を考えてみたいと思います。
みなさんありがとうございました(^^

210 :デフォルトの名無しさん:04/11/22 23:04:22
オプションなどで変更した画面配色などを、次回起動時にも反映できるように、
設定などを保存しておきたいとします。

現在は配色や、その他設定項目を保持するクラスを生成して、
XmlSerializerとTextWriterを使ってそのクラスをファイルに書き出している状態です。
こちらのページを参考としました。
http://fe0r.at.infoseek.co.jp/Doc/csXmlSave.htm

最近バグに気づいたのですが、Colorクラスなどは参照型なので(?)、
値がうまく保存されないことに気が付きました(;´д⊂
文字などはきちんと保存され、読み込みもできるのですが・・・。

Color.Blackなどの情報はどのように保存して置けばいいのでしょうか?

211 :デフォルトの名無しさん:04/11/22 23:07:11
Color は値型でんがな

212 :デフォルトの名無しさん:04/11/22 23:08:53
bool a=b=true;

abともに真である条件式で
if(a & b){}
if(a && b){}
お前らはどっち書く?

213 :デフォルトの名無しさん:04/11/22 23:10:02
複数のスレッドから、ひとつのファイルに読み書きを行っているのですが、
ファイルに対して排他ロックを取得する良い方法はないでしょうか?

読み書きを行うメソッドをひとつのクラスにまとめ、
lock(this){}でロックをかけていたのですが、
諸々の事情から、他のクラスからもファイルにアクセスする必要があり、
出来れば、ファイルそのものに対してロックをかけたいのです。
lock(filename){}とかで今はごまかしているのですが、
これだと単純に一定の文字列に対してロックをかけているだけなので、
やはりファイルそのものでロックをかけたいのです。

何か良い方法はないでしょうか?

214 :デフォルトの名無しさん:04/11/22 23:25:53
>>212
供に真であるとわかっているなら、その if 節自体書かない。
わかっていないなら、&& を使う。コスト変わらない場合でもなんとなく。

215 :デフォルトの名無しさん:04/11/22 23:44:32
あれ?同じプロセス内なら排他しててもファイル開けるんだっけ?
OS上でそれなら、擬似的に排他を行うファイルクラス作ればいいんでは?

216 :デフォルトの名無しさん:04/11/23 00:17:41
>>212
&&で書く。結果は同じになるかもしれんが、
論理演算子とビット操作演算子では意味が違う。
あんまり保守プログラマをいじめないでくれい。

217 :デフォルトの名無しさん:04/11/23 00:36:33
>>216
おまえ、C#って言語知ってるか?

218 :デフォルトの名無しさん:04/11/23 01:08:09
b を必ず評価すべきときは当然 &。
a の値によって b を評価すべきか否かが決まる時は &&。
どっちでもいいときは、コストが少なくなる可能性がある方をとって &&。

つか、リファレンス嫁。

219 :デフォルトの名無しさん:04/11/23 01:15:32
>結果は同じになるかもしれんが、
>論理演算子とビット操作演算子では意味が違う。

ここまで自覚のない厨房は初めて見たな。傑作だ>>216


220 :デフォルトの名無しさん:04/11/23 01:18:02
もうちょっと詳しく書いておくと、bool型の値を返すメソッド A() と B() があるとして、

A()とB()を両方呼んで、どちらの戻り値もtrueだったらC()を呼ぶ、と言うような場合は、
if (A() & B()) C();

A()の戻り値がtrueだったらB()を呼んで、B()の戻り値がtrueだったらC()を呼ぶ、
というような場合は
if (A() && B()) C();

C由来の構文を持ってる言語はほとんどそうなんじゃないかな。

221 :デフォルトの名無しさん:04/11/23 01:25:08
>>212
マルチポストはやめたまへ

222 :デフォルトの名無しさん:04/11/23 01:28:18
>>220
いやそれは誰でも知ってる・・・というか C# でもそれは && の定義だから当然だとして、
マルチポストの >>212 は bool a=b=true と(たぶん)単純変数のケースを指定してきてるわけじゃないか。
つまり「どっちでもよさげな場合はどっちにしてる?」という、単なるアンケートかと。

223 :デフォルトの名無しさん:04/11/23 01:43:24
>>220
自分は余計なバグ増やしたくないんでそういう記述絶対にしないんだが。

224 :デフォルトの名無しさん:04/11/23 01:47:58
俺も&&||を短絡のために使うことはないな・・・。
本当に右オペランドを評価して欲しくないならifの入れ子にする。

225 :デフォルトの名無しさん:04/11/23 01:49:47
あ、でも
if ( s==null || s.Length==0 )
とかは普通にやってるな・・・orz

226 :220:04/11/23 01:51:27
そ、そうか? 俺おかしい?
こういうC時代からの癖は、もはや時代遅れなのかな…… orz

227 :デフォルトの名無しさん:04/11/23 02:05:14
今はあんまり使わない技法だねぇ
素直に&& || 使っちゃうな

228 :デフォルトの名無しさん:04/11/23 02:06:30
いやおかしくはないんだけど、うっかり評価関数の順番入れ替えたりとかうかつなことしそう。

229 :デフォルトの名無しさん:04/11/23 02:14:06
&では違うが、ififも&&もILは全く一緒になるんだからそこまでこだわらなくてもイイのでは?
保守性って言ってもそんな大掛かりな変更が必要になる場面じゃないんだし、
ミスが減る減らないはそんな構文の違いより個人個人の癖の方が大きいんじゃないかな。

230 :デフォルトの名無しさん:04/11/23 02:14:09
&と|は列挙型の合成分離にしか使わない。

231 :220:04/11/23 02:19:08
そうだねえ。普段から書き慣れてるスタイルが一番ミスが少ないわな。
短絡って言っても、せいぜい
if (args.Length > 0 && args[0] == "xxx") {} とか
if (aaa.ShowDialog() == DialogResult.OK && xxx()) {} 程度のことしかやってないし、
気にするほどでもないな。

232 :デフォルトの名無しさん:04/11/23 02:22:15
>>229
そのとおり。全ては>>216のアフォさが原因の茶番でしたというわけで、



糸冬

233 :デフォルトの名無しさん:04/11/23 02:25:45
>>231
いや下のほうはどうかと思うぞ。
Cでも普通そういうことしないだろ。
Perlでは当たり前にやるみたいだが。

234 :デフォルトの名無しさん:04/11/23 02:28:06
Perlは xxx or die と書きたいだけ

235 :デフォルトの名無しさん:04/11/23 02:42:53
iif ( hoge != null && hoge.Visible )とかわりとよく使う。
漏れは。

236 :デフォルトの名無しさん:04/11/23 02:47:15
俺も短絡評価はいちいち参照のnullチェックでインデント下げたくない時くらいだな

237 :デフォルトの名無しさん:04/11/23 03:20:16
new Hoge(new Hage(new Mage(new Moge(new Hige new Fuga()))));

238 :デフォルトの名無しさん:04/11/23 03:26:29
>>237
>new Hige new Fuga()
プゲラッチョ

239 :デフォルトの名無しさん:04/11/23 05:44:32
C#は、C++でいうところの

if (Derived* pDerived = dynamic_cast<Derived*>(pBase)) {
  ・・・;
}

みたいなコードが一文&&余計なスコープ無しで書けないのが自分ではかなりぎこちない。

240 :デフォルトの名無しさん:04/11/23 11:45:40
C言語の時代じゃないんだから
ややトリッキーな書き方は止めるべきだね。
可読性が大事。
そんなオレはスクリプト言語は使えませんw


241 :デフォルトの名無しさん:04/11/23 12:20:40
Pytho はいいぞ。可読性もばっちり。

242 :デフォルトの名無しさん:04/11/23 12:30:13
>>220
短絡評価ってやり始めると凄い見通しがいいんだよな、&&はやるのは考え物なので専用の演算子が欲しい所。

243 :デフォルトの名無しさん:04/11/23 13:52:08
しかし短絡評価とそうでない評価の両方が使い分けられるのは便利だな。

244 :デフォルトの名無しさん:04/11/23 16:03:31
>>239
あーそれはあるなあ。
C#でそれをやろうとすると、

Derived derived = base as Derived;
if (derived != null) { ・・・; }

とか

if (base is Derived) { Derived derived = base as Derived; ・・・: } // 効率悪い

とか異様に長ったらしくなるんだよね、、、

245 :デフォルトの名無しさん:04/11/23 16:12:42
GraphicsのDrawImage()メソッドで描写したイメージを
消したいのですが、DeleteImageメソッドみたいな物はありませんでしょうか?

g.DrawImage()

g.DeleteImage()

よろしくお願い致します。

246 :デフォルトの名無しさん:04/11/23 16:26:49
Drawする前の状態に戻したいという意味なら、そんなものはない。

247 :デフォルトの名無しさん:04/11/23 16:35:06
>>245
「消したい」が何を言ってるのかさっぱり分からんが、
ある色で塗りつぶしたいんならClearとかFillRectangle、
イメージオブジェクトを破棄したいんならimage.Dispose(); image = null;でいいんじゃないの

248 :デフォルトの名無しさん:04/11/23 16:39:33
>DeleteImageメソッドみたいな物はありませんでしょうか?

その「DeleteImageメソッド」とやらが一体何者なのか何の説明もなく、
いきなり「DeleteImageメソッドみたいなもの」とか言われても答えようがないんだが。


249 :245:04/11/23 19:23:18
>>247
deleteみたいなメソッドは無いみたいですね。
結局disposeで消し(オブジェクトごと)ました。

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

250 :デフォルトの名無しさん:04/11/23 19:32:28
もうちょっと詳しく書いておくと、bool型の値を返すメソッド A() と B() があるとして、

A()とB()を両方呼んで、どちらかの戻り値がtrueだったらC()を呼ぶ、と言うような場合は、
if (A() | B()) C();

A()の戻り値がtrueだったらB()を呼んで、B()の戻り値がtrueだったらC()を呼ぶ、
というような場合は
if (A() || B()) C();


251 :デフォルトの名無しさん:04/11/23 19:35:07
その両者を使い分けているコードはすっきりはするだろうが可読性はかなり下がりそうだな。

252 :デフォルトの名無しさん:04/11/23 19:36:14
何かの言語で and と andalso というのがあったような。
あと、or と orelse だったかな。

253 :デフォルトの名無しさん:04/11/23 19:40:46
C/C++からC#に移ってきたマーはすっかり短絡評価に慣れきっているので
全評価をするDelphiのような論理結合は必要性を感じなくなっている。

逆に言うとDelphianに受けがいいように両方用意したのかもな。

254 :デフォルトの名無しさん:04/11/23 19:43:08
>>253
あり?Delphiは
if (A() || B()) C();
こっちのスタイルじゃなかったか?
VB6は全評価のみだったかな。

255 :デフォルトの名無しさん:04/11/23 19:48:09
>>250
if(A()||B())C();

if(A())
if(B())
C()
之で速度にどれほど差があるの・・・可読性と保守では圧倒的に後者だと思うんだけど

256 :デフォルトの名無しさん:04/11/23 19:50:41
伝統的にPascalの流れを汲む言語は完全評価だが、Object Pascalは
例外的に短絡評価をベースとする。完全評価には{$B+}指令が必要。

C#は両方の評価方式を取り入れてしまったためにスカラ型を暗黙のうちに
ブール型に変換する事ができなくなってしまった。

そのためCやC++のように

if (a) .... のような構文は a が bool型の時しか使えなくなった。

257 :デフォルトの名無しさん:04/11/23 20:04:26
>>256
ダウト。単に型変換を厳しくしたからだろ。

258 :デフォルトの名無しさん:04/11/23 21:29:17
>>255
その二つは、速度以前に動作が違う。

259 :デフォルトの名無しさん:04/11/23 21:32:02
そもそも250の解説が間違ってるな。

260 :デフォルトの名無しさん:04/11/23 21:38:58
なんで完全評価だとスカラ型を暗黙のうちにブール型に変換できないのかわからん。

261 :255:04/11/23 21:44:35
>>258
スマン、>>250を基に書いてみた。&&か。
いずれしろこんなコード(゚听)イラネ

262 :デフォルトの名無しさん:04/11/23 21:45:07
>>259
書いてる本人が間違うぐらい読みづらい表記ってことだな。

263 :デフォルトの名無しさん:04/11/23 21:47:08
いかにバグのないコードを書くのが難しいかよくわかりました。

264 :デフォルトの名無しさん:04/11/23 22:45:34
へんに凝らずに素直に書けばいいのさ

265 :デフォルトの名無しさん:04/11/24 00:27:44
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200310/03100086.txt
これと同じことをC#でやりたいんだけど・・・
だれか再現できる人いない?

266 :デフォルトの名無しさん:04/11/24 01:08:08
.NET 2.0ならListViewもオーナードローできるようになってるんだけどねー。

267 :デフォルトの名無しさん:04/11/24 01:19:23
>>265
探せばたくさん見つかるけど?

268 :デフォルトの名無しさん:04/11/24 04:36:25
C#で2chのトリップ解析する方法教えて下さい
2ch の cript 関数は 56bitDES です。

できるかどうかだけでも教えて下さい

269 :デフォルトの名無しさん:04/11/24 04:40:23
die( sprintf "usage: %s <tripkey>\n", __FILE__ ) unless @ARGV;
my $tripkey = $ARGV[0];
my $salt = substr substr( $tripkey, 1, 2 ) . "H.", 0, 2;
$salt =~ tr{:;<=>?\@[\\]^_`}{ABCDEFGabcdef};
$salt =~ s{[^./0-9A-Za-z]}{.}g;
my $trip = substr crypt( $tripkey, $salt ), -10;
printf "◆%s", $trip;

このperlをC#に変換してください

270 :デフォルトの名無しさん:04/11/24 04:41:39
死んでください

271 :デフォルトの名無しさん:04/11/24 04:42:11
っていうか






























死ねよ >>268-269

272 :デフォルトの名無しさん:04/11/24 04:46:46
こんなことで死ななきゃならないのか世の中きびしいな

273 :268:04/11/24 04:57:13
cryptの関数がないんですよ。C#には・・
おしえて

274 :デフォルトの名無しさん:04/11/24 05:04:27
2次元少女のエロ画像もってきたら
教えてやるよ

275 :268:04/11/24 05:07:11
>>274
こんなのしかなかったですが、よろしくおねがいします
http://vladimir.ddo.jp:8888/cgi-bin/futaba/src/1101125474819.jpg

276 :デフォルトの名無しさん:04/11/24 05:09:16
System.Security.Cryptography 名前空間の
DES クラスだ。
.NETのリファレンスもってるなら調べられるだろ

Cryptographyってのは暗号のことだ

277 :268:04/11/24 05:19:20
>>276
ありがとうございます。がんばります

278 :デフォルトの名無しさん:04/11/24 06:19:37
エロ画像本当にもってくる268に敬礼しとこう。

279 :デフォルトの名無しさん:04/11/24 09:51:01
それで即答してる>>276も男らしいな。

280 :デフォルトの名無しさん:04/11/24 13:10:08
C#でImageMagickを使うことってできますか?
ファイルでなくメモリでデータの受け渡しをしたいです。

281 :デフォルトの名無しさん:04/11/24 14:34:20
True って1?

282 :デフォルトの名無しさん:04/11/24 14:36:49
trueはtrueですが何か。

283 :デフォルトの名無しさん:04/11/24 14:39:27
richTextboxに何も入力させない用にするにはどうしたらいいのですか?
Enableはtrueでお願いします。

284 :デフォルトの名無しさん:04/11/24 14:42:13
プロパティ一覧ぐらい目を通そうや。

285 :283:04/11/24 14:43:34
あとEnterとDeleteとBackSpaceも入力不可にしたいです。

286 :283:04/11/24 15:03:12
自己解決しました

287 :デフォルトの名無しさん:04/11/24 16:17:28
配列の中に文字列が入っており、
全ての文字列の後ろから、半角数字部分を摘出し、
その半角数字部分でソートをしたいのですが、
どの様な関数を用いるべきでしょうか?
 

[ABC012][ZZ101][Z99][A23][B11]
これを
[B11][ABC012][A23][Z99][ZZ101]
にする。

288 :山田:04/11/24 17:05:36

StreamReaderを使用してファイルを読み込む処理を行っています。

----------------------------------------------------
StreamReader sr = new StreamReader( "test.txt", System.Text.Encoding.GetEncoding( "SHIFT-JIS" ));
string input;
string sql;
while(( input = sr.ReadLine()) != null )
{
sql += input + "\r\n";
}
sr.Close();

---------------------------------------------------

1回目の呼び出しは、正常に行われるのですが、2回目以降呼び出すと
「プロセスはファイル "***" にアクセスできません。このファイルは別のプロセスが使用中です。」
というエラーメッセージが表示されます。
※読み込み対象ファイルは、1回目と2回目以降、異なります。

ストリームをクローズしているのに?どうしてこのようなエラーが・・・。
ご存じの方、いらっしゃいましたら、ご教授願います。

289 :デフォルトの名無しさん:04/11/24 17:12:01
>>288
>  ※読み込み対象ファイルは、1回目と2回目以降、異なります。

読み込むファイルが違うなら、このストリームをCloseしてるかどうかは関係ないと思うんだが。
その2回目以降に読み込むファイルがなんらかでロックされてるんだろ。

290 :山田:04/11/24 17:16:16
>>289
早速のご回答ありがとうございます。
そうですね・・。ファイルが異なるので関係ないとは思います。すいません。
2回目以降に読み取るファイルを、別プロセスが何か行っていることは
あり得ない状況です。デバック上だと、このエラーは再現しません。





291 :デフォルトの名無しさん:04/11/24 18:26:08
>>288
よくわかんないけど「非コンソールアプリを .bat ファイルや .cmd ファイルから連続して
呼び出していて、アプリが実行を終了しない間にどんどん次のを起動している」に1ぺリカ。

292 :デフォルトの名無しさん:04/11/24 18:32:07
>>288
そのプログラムを試しに実行してみたらバグがあったとかで……
二個目のファイルを読み取った時点で異常停止していたりして

で、そのプロセスが何時までも居座り続けてるとか

293 :デフォルトの名無しさん:04/11/24 18:46:18
>>288
この sql += input + "\r\n"; って重い処理だから、
StringBuilder sb = new StringBuilder;
...
sb.AppendFormat("{0}{1}", input, System.Environment.NewLine);
とかにしたほうがいいと思います。
なんかの事情で数千行のファイルを処理したりするときになってくると効いてくると思う。

あと、ここで例外をキャッチしないで「プロセスは・・・」っていうメッセージが出てるくらいだから、
どこか他に中途半端なキャッチし忘れがあってファイルを開きっぱなしにしている可能性も考慮してみては?

294 :デフォルトの名無しさん:04/11/24 19:31:52
>>287
[ABC012][ZZ101][Z99][A23][B11]

(0, 012) (1, 101) (2, 99) (3, 23) (4, 11)
という具合に元々のインデックスと数値の対と見なして数値でソート
(4, 11) (0, 012) (3, 23) (2, 99) (1, 101)
そしてインデックスを見て配列組み直し
[B11][ABC012][A23][Z99][ZZ101]
とかやるんですかね。
インデックスと数値の対をクラスにして IComparable を実装すればいい感じがしそうです。

295 :デフォルトの名無しさん:04/11/24 21:47:55
>>280
ImageMagickに限らず、メモリ領域のポインタを引数にとるアンマネージド関数の呼び出しは
こんな風に行える。

// マネージドメモリを確保
byte[] buf = new byte[1024];

// マネージドメモリを固定し、アンマネージド関数から参照できるようにする
// ガベージコレクタの対象からも外れる
GCHandle hGC = GCHandle.Alloc(buf, GCHandleType.Pinned);

// buf のポインタを取得
IntPtr lpBuf = hGC.AddrOfPinnedObject();

// この辺でAPI呼び出し

// メモリの固定を解く
hGC.Free();


296 :268:04/11/24 22:13:47
>>269
これは、何枚画像持ってくればやってもらえますか?


余談ですが、レジストリが狂ってしまって
VB6のアイコンがVS.NETに変わってた・・・
レジストリもスワップされたみたいで、起動してもまともに動かない
AD-AWAREのせいかな・・・
再インストール時間かかるんだよなぁ・・

297 :デフォルトの名無しさん:04/11/25 00:24:15
>>296
せめて、できない個所だけにまとめようよ。

298 :デフォルトの名無しさん:04/11/25 01:25:27
ネタじゃなくて本気の質問というところに驚きを禁じえない

299 :デフォルトの名無しさん:04/11/25 01:38:44
TreeView オーナードローして、カラフルなTextを表示するヒントください。
そろそろ、System.Windows.Form等のdll解析するのめんどくなってき
たので助けてください。

300 :デフォルトの名無しさん:04/11/25 02:38:18
>>298
300GET

301 :デフォルトの名無しさん:04/11/25 02:42:29
>>296
そうだな・・・
5枚あればやってやらんこともない。
ただ今度は糞画像は却下。
直エロじゃなくて微エロでよろ

302 :デフォルトの名無しさん:04/11/25 04:49:23
>>287
正規表現使うと楽かも

public class MyComparer : System.Collections.IComparer {
public MyComparer() {

}

#region IComparer メンバ

public int Compare(object x, object y) {
string a = (string)x;
string b = (string)y;

//正規表現で末尾の数字を取得
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("(?<num>\\d*)$");
int numA = int.Parse(regex.Match(a).Groups["num"].Value);
int numB = int.Parse(regex.Match(b).Groups["num"].Value);

return numA - numB;
}

#endregion
}

という風にIComparerの実装を作っておいて

string[] ary = new string[] { "ABC012", "ZZ101", "Z99", "A23", "B11" };
Array.Sort(ary, new MyComparer());


303 :デフォルトの名無しさん:04/11/25 05:55:05
>>302
件数が少ないときはシンプルでよいかも・・・

304 :山田:04/11/25 09:07:45
288です。
皆さん、色々ご回答下さいまして、有り難うございます。

ファイル変更監視のWindowsサービスを作成して、サービス開始
処理内容は、特定にディレクトリにファイルが吐かれたことをキャッチして、通知メールを送ります。
そのファイルの内容を読み込む・・というメソッドの中で、このエラーは起きてます。

>>291
2つめのファイル以降、全部エラーになっているので、次々呼び出したから・・と
いう訳ではなさそうです。

>>292
デバック上だとエラーが出ませんので、バグではないと思います。

>>293
有り難うございます。早速書き換えます。
と、例外はキャッチしてます。言い忘れてました。すいません。
例外キャッチ後、その例外エラーメッセージをイベントログに書き込んでいます。
そのイベントログを見て、「プロセス・・」エラーが出ていることが分かりました。

305 :デフォルトの名無しさん:04/11/25 10:52:37
>>304
・・・・・・他のプロセスが作成したファイルをすぐに開くと、先方の
プロセスが開いているので開けません。

306 :デフォルトの名無しさん:04/11/25 11:08:05
> ファイルが吐かれたことをキャッチして
> そのファイルの内容を読み込む

まだ吐いてる途中じゃねーの?

307 :山田:04/11/25 11:21:44
>>305

単体テストとして、ファイルを吐くシステムは別物なので
あらかじめ作成しておいたテキストファイルを、コピーして特定のディレクトリに貼り付けてるんです。(手作業)
1つ目のファイルも、2つ目のファイルも、同じようにコピペでテストしているのに
どうして2つ目以降は怒られるのでしょうか?

>>306
手作業で貼り付けている段階で、起こっている現象ですので
あり得ないと思います。


308 :山田:04/11/25 12:37:29
なんか僕が質問してばかりですいません。
関係ないのかも知れませんが、ファイルが別プロセスで起動中だろうが
関係ない、非排他でファイルを読み込むメソッドを
ご存じの方がいらっしゃいましたら、教えて下さい。
エロ画像は持っていないのですが・・。


309 :デフォルトの名無しさん:04/11/25 13:20:40
質問です。
PanelにコントロールをAddしたりRemoveしたりするところで、
System.Windows.Forms.dllでWin32Exceptionが発生します。
毎回発生するわけではなく、原因がつかめません。
対策や回避方法について、なにか情報をお持ちの方は教えて
いただけないでしょうか?

310 :309:04/11/25 13:54:24
自己解決したかもしれません。
RemoveしたコントロールをDisposeしていませんでした。

311 :280:04/11/25 14:25:17
>295
返事ありがとうございます。
Cを呼ぶのはAPI覚えるのと作るのが大変なのでできればどなたかラッパーしたのが使いたいです。
標準でWindows OLE版があるらしいので.netで使ってみたのですが出力結果が取得できませんでした。
http://www.imagemagick.org/www/ImageMagickObject.html
作ってみたソース
MagickImageClass magic = new MagickImageClass();
object[] list = new object[2];
object[] inlist = new object[2];
byte[] buf;
using (FileStream stream = new FileStream(@"C:\test\image\test.png", FileMode.Open))
{
buf = new byte[stream.Length];
stream.Read(buf, 0, (int) stream.Length);
}
inlist[0] = "png";
inlist[1] = buf;
list[0] = inlist;
object[] outlist = new object[2];
outlist[0] = "jpeg";
list[1] = outlist;
object msg = magic.Convert(ref list);
MessageBox.Show(""+msg);
byte[] outbuf = (byte[]) ((object[])list[1])[1];
if (outbuf == null)
{
MessageBox.Show("null");
}
using (FileStream stream = new FileStream(@"C:\test\image\test_out_magick.jpg", FileMode.Create))
{
stream.Write(outbuf, 0, (int) outbuf.Length);
}

312 :デフォルトの名無しさん:04/11/25 15:47:35
Access.Application l_AccessApp = new Access.ApplicationClass();

のようにして、Accessを制御しようとしていますが、ユーザーに
Accessをされてしまうと、次にl_AccessAppにアクセスする時に
当然ながら例外となってしまいます。
そこで、事前にl_AccessAppが有効か無効かをチェックしたい
のですが、どうやったらいいのでしょうか?
手持ちのMSDNを検索していますが、探し方がヘタで見つかって
いません。

313 :デフォルトの名無しさん:04/11/25 17:27:15
>>山田
ネタかもしれないけど、一応レスしときます。
>1つ目のファイルも、2つ目のファイルも、同じようにコピペでテストしているのに
>どうして2つ目以降は怒られるのでしょうか?

様々な理由が考えられます。ファイルシステムに変更が加えられてから通知されるまでの
タイムラグに違いが出てきているのかもしれませんし、1つ目のファイルが小さくてあなたの
プログラムがOpenしようとする以前にコピーが完了しているのかも知れません。

>手作業で貼り付けている段階で、起こっている現象ですので
>あり得ないと思います。
「手作業での張り付け」っていっても、ウィンドウズのエクスプローラーが「ファイルを作成」して
「内容をコピー」してるわけですよね。エクスプローラーがクローズする前に開こうとすれば
失敗する可能性があります。

>ファイルが別プロセスで起動中だろうが関係ない、非排他でファイルを読み込むメソッドを
簡単な方法はありません。Win32APIをフックして、先方のプロセスがAPIに渡しているパラメータを
変更するのが一番簡単でしょうけれども・・・

314 :デフォルトの名無しさん:04/11/25 17:33:45
>>312
漏れはCOMとか全く知らないけど、『なぜかAccess.Applicationは(EXCEL等と違って)Quitイベントが
取れないから、「読み込み解除時」か「閉じる」イベントとかで代用汁!』みたいなのを見かけたことが
あるな・・・

自アプリ的には発生起因も無いのにそれらイベントが発生したら、ユーザが閉じたと判断するわけです。

315 :山田:04/11/25 18:05:34
>>313
ファイルを読み込む前に、sleepを入れたら、正常に動作しました。
おっしゃる通りだったと思います。
1回目だけ、なぜ上手くいけたのかは分かりかねますが・・。

下手なやり方ですが、ファイルをオープンさせて
IOの例外がキャッチされたら、Sleep、そして再度オープン、という
よくない方法で回避したいと思います。

316 :デフォルトの名無しさん:04/11/25 21:17:43
パネルコントロールとピクチャボックスの違いについて質問です。

ワーカスレッドで作成したビットマップを、
コントロールのPaintイベント内でDrawImage()して表示しているのですが、
パネルで行うとちらつきが激しいです。
DrawImageなら、描画途中のグラフィックは表示されないのではないでしょうか?
バッファリングの方法としてこのような形式が紹介されていたのですが

ちなみにピクチャボックスで同じ処理を行えばちらつきはありません。


素直にピクチャボックスにすればよいのですが、
CPUの負担を少しでも減らすためにパネルにしたいのです。

どうか知恵をお貸しください。

317 :デフォルトの名無しさん:04/11/25 21:28:27
>>316
まず、PanelなりUserControlなりから派生しないかぎり無理。

派生クラスで、
this.SetStyle(ControlStyles.DoubleBuffer| ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);

OnPaintBackgroundをオーバーライドし、中身を空にする。

ていうか、検索すれば腐るほど資料は見つかるんだが・・・?


318 :デフォルトの名無しさん:04/11/25 21:47:14
>>317
ありがとうございます。
調べが不十分で申し訳ありません。

つまりダブルバッファリングをスタイルとしておかないと駄目だということですよね。
ところでControlStyles.DoubleBufferとはどのような処理を行っているのでしょうか?
DrawImage()でちらつくのがどうしても理解できないのです。

319 :318:04/11/25 21:49:20
大変申し訳ないです。
すでにご回答頂いていたようです。
重ね重ねスミマセン。

320 :デフォルトの名無しさん:04/11/25 22:35:00
>すでにご回答頂いていたようです。

どの問題についてどの「ご回答」のことを言ってるんだか分からない。
解決したのなら、他の人が見ても分かるようにしっかり書け。


321 :デフォルトの名無しさん:04/11/26 00:53:02
ListViewやTreeViewなど現状オーナードローできないViewについては
WndProcをoverrideするしかないのは理解できたのですが、
具体的にWndProcを使って表示する文字色や大きさなどを変更するためには
どのように書けばいいのでしょうか?

322 :デフォルトの名無しさん:04/11/26 01:01:02
ケツだけ星人〜

323 :デフォルトの名無しさん:04/11/26 03:10:45
C#でプログラミングする時のバイブルみたいな本って何でしたっけ?

324 :デフォルトの名無しさん:04/11/26 03:25:00
>>323
http://books.rakuten.co.jp/RBOOKS/NS/CSfLastGenGoodsPage_001.jsp?GOODS_NO=1463194
http://books.rakuten.co.jp/RBOOKS/0001463203/

325 :デフォルトの名無しさん:04/11/26 11:20:00
using System.Threading;
using System.Windows.Forms;

namespace Mut {
  class Mut {
    public static void Main() {
      Mutex mutex = new Mutex(false, "むーてっくす");
      if (!mutex.WaitOne(0, false)) {
        MessageBox.Show("二重起動のようです");
        Application.Exit();
      }
      MessageBox.Show("mutex");
    }
  }
}

と多重起動回避をさせようとしています。2つ目以降のプロセスで
"二重起動のようです"というメッセージボックスは表示されるんですが、
Application.Exit()がうまく動作せず次の"mutex"というメッセージボックスも
表示されてしまいます。使用コンパイラは
Microsoft(R) Visual C# .NET Compiler version 7.10.3052.4
for Microsoft(R) .NET Framework version 1.1.4322
です。コードはネット上で見つけたサンプルのほぼ丸コピーなので動くはずなんですが・・・。
GC.KeepAlive(mutex);を追加してガベージコレクションから外しても動作しませんでした。
どのように修正すればきちんと終了するようになるのでしょうか?よろしくお願いします。

326 :デフォルトの名無しさん:04/11/26 11:26:56
>>325
メッセージループ(Application.Runで始まるループ)もないのにApplication.Exitしても意味ない。
Mainをそのままreturnで終了したまい。

327 :325:04/11/26 11:27:43
また、もっと単純に
using System.Threading;
using System.Windows.Forms;

namespace WExit {
  class WExit {
    public static void Main() {
      Application.Exit();
      MessageBox.Show("表示されないはずですが表示されてます");
    }
  }
}
とやってもメッセージボックスが表示されてしまうので、問題はApplication.Exit()周りに
あるものだと考えています。MSDNによるとApplication.Exit()は
> このメソッドは全スレッドで実行中のメッセージ ループをすべて停止し、アプリケーションのウィンドウをすべて閉じます。
> このメソッドによって、アプリケーションが強制的に終了されることはありません。
とのことですので、アプリケーションを途中終了させるためには別のメソッドを利用するのでしょうか?

328 :325:04/11/26 11:31:58
>>326
素早い返答をありがとうございます。試したところうまくいきました。

329 :デフォルトの名無しさん:04/11/26 11:33:11
>>アプリケーションが強制的に終了されることはありません。
ちゃんとこのようになってますが・・・
あなたの言う動作をしたければ、自分を含むすべてのスレッドをKILLしたほうがいいと思います。

330 :デフォルトの名無しさん:04/11/26 11:35:05
>>327
Application.Exit() が説明の通りに「実行中のメッセージ ループをすべて停止し、
アプリケーションのウィンドウをすべて閉じ」た後で、
MessageBox を呼び出しているからメッセージボックスが表示されるのです。

アプリケーションを綺麗に途中終了する方法はありません。
強制終了させるのであれば、Process.GetCurrentProcess().Kill() で出来ますが、
正常な終了処理は行われないので全くお勧めしません。
Application.Run() 実行後であれば、Application.Exit() でほうっておく、
それ以前であれば Main から単にリターンする、というのが妥当な方法です。

331 :325:04/11/26 11:42:39
>>329,330
アドバイスありがとうございます。

実は最初のうちはApplication.Run(new Hoge())で呼ばれるコンストラクタ内で
Mutex判定を行い、Application.Exit()していました。Cのexit()の感覚で使ったのが
間違いのもとのようです。

332 :デフォルトの名無しさん:04/11/27 00:05:35
>>331
Cのexit()に相当するのはEnvironment.Exit()あたりだと思う。

333 :デフォルトの名無しさん:04/11/27 01:45:21
ICMPメッセージの送受信のサンプルって無いですか?

334 :デフォルトの名無しさん:04/11/27 01:49:00
Pingのサンプルなら宇宙仮面にあったな。

335 :デフォルトの名無しさん:04/11/27 02:02:30
>>333
http://www.amazon.co.jp/exec/obidos/ASIN/4274065847/
http://www.amazon.co.jp/exec/obidos/ASIN/4274064247/


336 :デフォルトの名無しさん:04/11/27 02:19:25
アマゾンのURLなんか貼るなやクズが。
わからんならレスしなくていいよ

337 :デフォルトの名無しさん:04/11/27 03:01:03
>>333
http://www.codeproject.com/csharp/trace.asp

338 :デフォルトの名無しさん:04/11/27 13:27:28
宇宙仮面ってサイト自体が妙にCPUリソース食う作りになってるよな

339 :デフォルトの名無しさん:04/11/27 13:33:02
視力も浪費します

340 :デフォルトの名無しさん:04/11/27 13:41:37
なぜか太字だし背景ウザイからな。

341 :デフォルトの名無しさん:04/11/27 16:18:48
Microsoft.DirectX.AudioVideoPlaybackというのを使って
メディアプレーヤーを作ろうと思ってます。
ファイルを開くときに、
Audioクラスと、Videoクラスのどちらを生成すれば良いか?
というのは、まず、Videoクラスでインスタンス作成をtryして、
ダメならcatchしてAudioクラスで開く。
というようなアプローチでよいのでしょうか?

あと、早送りとかはどのように実装すればよいのでしょうか?
早送りボタンを作って、ボタン押しっぱなしかどうかチェックして、
押しっぱなしの間はずっと早送りをし続ける。
というのをやりたいと思ってるのですが、
押しっぱなしかどうかチェックする術がわかりません。。

シンプルな、audio,video両対応プレーヤーの
サンプルなんか知ってましたら英語でもかまわないので
教えてもらえるとうれしいです。
お願いしますm(_ _)m

342 :デフォルトの名無しさん:04/11/27 16:29:04
読込はそれで良いんじゃない?
拡張子でまず区分する手もあるけど。

ボタンのおしっぱなしはMouseDownとMouseUpで。

AudioVideoPlaybackはいまいち使われてないんだよね。
MDXのサンプルの中にAVP使ったプレイヤーのサンプルもあったはず。

343 :341:04/11/27 17:25:00
>>342
どうもありがとうございます!
AVPサンプルとはこれですね!
http://www.microsoft.com/japan/msdn/directx/japan/dx9/AVCS.asp
しかし、これもVideoしか考慮してないようなのです。。

早送りは、押しっぱなし判定用共有変数 を持たせて、
MouseDownとMouseUpで変数をいじって、
MouseClickでおしっぱ変数がtrueの間、
Click{
while(osippa)
{
CurrentPosition += 1;
}
}
とやってみたのですが、
Down->Click(whileループ)で、
Upが呼ばれない!てことになってしまいました;;
(やってみて当たり前のことなのか、と気づきました。。)
スレッド処理とかで、早送り処理はやらせるべきなんでしょうか?
(予想以上に大事になってきてしまいました・・)

ボタンはToolBar上に配置しています。

344 :デフォルトの名無しさん:04/11/27 17:58:19
押しっぱフラグの判定をMouseClickイベントハンドラでやるからだめなんだということはわかったわけね。
じゃあどうすればいいのかといえば、
・マウスボタンと関係ない
・定期的に実行される
場所でやればいいわけだ。

それを満たすためには、ざっと以下の方法が考えられる。
1.監視用のスレッドを作る。
2.TimerのTickイベントをつかう。
3.WndProcメソッドをオーバーライドする。

俺がやるとすれば3を選ぶ。一番シンプルだから。

345 :デフォルトの名無しさん:04/11/27 18:01:42
安易にWndProcをオーバーライドするのは同意しかねるな。
私ならTimerを使う。直感的だから。

346 :344:04/11/27 18:15:52
確かに、どうしてもメッセージを処理しなきゃならない時以外にWndProcをオーバーライドするのはよろしくないな。
ましてや、初心者のうちから変な習慣をつけちゃダメだ。

>>344 のラスト1行は撤回する。

347 :デフォルトの名無しさん:04/11/27 18:31:56
ある変数の型を別の型へキャストできるかどうか、というメソッドってなんでしたか?

348 :デフォルトの名無しさん:04/11/27 18:48:10
>>347
is, as の2個の演算子を調べろ

349 :341:04/11/27 18:59:49
>>344-345
ありがとうございます!
petzold本にちょうどTickを使った例が載っていたので(p689)
それ使ってやってみようと思います。

しかし、また問題が出てきてしまったのですが、
早送りするなら、ボタンが押されたときに発動しなければならないので、
(よってClickイベントだとダメ!)
Downイベントを使おうと思ったのですが、
ツールバーに乗せたボタン(ToolBarButton)の場合、
各々のボタンにイベントがない為
ツールバーのDownイベントを使うしかないと思ったのですが、
ツールバーのDownイベントだと 押されたボタンが取得できません;;
(Clickイベントだったら取得できるのに。。)

この場合は自分でpanel用意して、
Buttonをペタペタ貼り付けるしかないでしょうか?

350 :デフォルトの名無しさん:04/11/27 19:01:02
>>348
メソッドっていってるのに演算子を答えてる。もうだめぽ。
ちなみにMSILでは、isinst。実際にキャストするのは、castclass。

>>347
Type.IsAssignableFrom。ただし結構重い。


351 :348:04/11/27 19:34:45
>>350
347 は初心者以上だったのか。すまん。

352 :デフォルトの名無しさん:04/11/27 20:21:26
うえーん、IPを実装したいけどよくわかんないよ〜
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            ∧_∧
          ( ´Д⊂ヽ
          ⊂    ノ
           人  Y
          し (_)

353 :デフォルトの名無しさん:04/11/27 20:22:08
x86アセンブラの本を読め

354 :デフォルトの名無しさん:04/11/27 21:13:16
richtextboxで指定した行へ飛ばすにはどうしたらいいのですか?
sendmessageでVBの時やってたのですが全然解りません。

355 :デフォルトの名無しさん:04/11/28 01:00:56
配列の中に、同じものが入っていたら削除したいのですが
{98,98,100,80,80,100,50}
を並べ替えて、
{50,80,80,98,98,100,100}
のようにして、最後に
{50,80,98,100}または、
{50,80,98,100,0,0}
を作成する方法をよろしくお願いします。

356 :デフォルトの名無しさん:04/11/28 01:09:53
>>355
で、その行程のどれが分からないの?

357 :デフォルトの名無しさん:04/11/28 01:25:42
クラスの継承・インターフェイスを学んでいて不思議に思ったので質問します。

C#ではinterface内でクラス内変数を宣言することは推奨されないのでしょうか?
どこのサンプルを見ても関数定義のみで変数定義をしていないようなんですが。。

358 :デフォルトの名無しさん:04/11/28 01:36:23
やってみりゃわかるがそもそも不可能。
理由はちょっと考えれば分かる。

359 :デフォルトの名無しさん:04/11/28 01:52:51
>>357
なんで自分で試してみないんだ?

360 :デフォルトの名無しさん:04/11/28 01:55:17
>>358
宣言したものが全てpublic abstractになり、後から実装されなければならないから、でしょうか?

361 :デフォルトの名無しさん:04/11/28 02:42:54
interface は、それを実装したクラスと外部との“インターフェイスを”定義するためにある。
そのために必要ないことはできてはいけない。

362 :355:04/11/28 03:21:13
>>356
すみません。誰もいないと思っていました。
最後の同じ要素を削除する部分です。
よろしくお願いします。

363 :355:04/11/28 03:21:47
>>356
すみません。誰もいないと思っていました。
最後の同じ要素を削除する部分です。
よろしくお願いします。

364 :デフォルトの名無しさん:04/11/28 03:40:20
こんなんでどうだ? (Whidbeyだともっとすっきり書けるんだけどねえ)

int[] a = {98,98,100,80,80,100,50};
Array.Sort(a);

int buf = a[0];
int cnt = 1;

for (int i = 1; i < a.Length; i++)
{
  if (a[i] == buf)
    a[i] = int.MaxValue;
  else
  {
    buf = a[i];
    cnt++;
  }
}

Array.Sort(a);

int[] b = new int[cnt];

Array.Copy(a, 0, b, 0, cnt);

365 :デフォルトの名無しさん:04/11/28 03:46:10
Whidbeyだとこんな感じか。

int[] a = { 98, 98, 100, 80, 80, 100, 50 };
Array.Sort(a);

List<int> b = new List<int>();

b.Add(a[0]);
for (int i = 1; i < a.Length; i++)
{
  if (a[i] != a[i - 1])
    b.Add(a[i]);
}

int[] c = b.ToArray();

366 :デフォルトの名無しさん:04/11/28 05:53:02
Whidbey(.net 2.0) でやるなら ttp://www.wintellect.com/powercollections/
にあるPowerCollectionsのOrderedSetを使えばもっとすっきり

int[] a = {98,98,100,80,80,100,50};
OrderedSet<int> set = new OrderedSet<int>();
set.AddAll(a);
int[] b = set.ToArray();


367 :最凶VB厨房:04/11/28 06:06:19
int[] a = {98,98,100,100,80,80,100,50};
Array.Sort(a);
int ptr = 1;
for (int i = 1; i < a.Length; i++)
{
if(a[i-1]!=a[i])
{
a[ptr]=a[i];
ptr++;
}
}
int[] b = new int[ptr];
Array.Copy(a, 0, b, 0, ptr);
c#2002
書いてみますタ。

368 :デフォルトの名無しさん:04/11/28 10:51:39
>>355
は自分でアルゴリズムを描くということをまったく考えなかった予感

369 :デフォルトの名無しさん:04/11/28 12:59:53
人の宿題手伝っちゃだめだよ(´ω`)

370 :デフォルトの名無しさん:04/11/28 13:44:40
.Netのリファレンス読んでるんですが
Socketクラスでパケットキャプチャする仕方がまったくわかりません
簡単な方法を教授お願いします

371 :デフォルトの名無しさん:04/11/28 14:03:12
いくらでもサンプルは転がってる。
ttp://www.google.com/search?num=100&oe=utf8&q=C%23+packet+sniffer

372 :368:04/11/28 14:03:28
ArrayList array = new ArrayList();
int[] a = {98,98,100,100,80,80,100,50};
Array.Sort(a);
foreach(int num in a){
if(!array.Contains(num))array.Add(num);
}
foreach(int num in array){
Console.Write(num + ",");
}
ゴミプログラム作成してすいません。

373 :370:04/11/28 14:07:31
>>371
いやサンプルじゃなくてさ・・
肝の部分をおしえてよ
CodeProjectって認証いるやん


374 :デフォルトの名無しさん:04/11/28 15:34:12
ワード2000上で(例えば)F10を押すと、
自作のVC#AppliであるmyAppli(起動済)のある
メソッドを実行させることってできますか?
DDEとかFindWindowとかSendMessageとかOLEとかActiveXコンポーネントとか
検索したらいろいろあるんですが・・・おながいします

375 :デフォルトの名無しさん:04/11/28 16:02:33
COM呼び出せりゃそ子から。NET呼ぶだけですむんじゃね?

376 :374:04/11/28 16:57:06
>>375
え、え、すみません。
まず何を勉強したらよろしいのでしょうか。
COMとはどのコンポーネントを指すのでしょうか。

377 :デフォルトの名無しさん:04/11/28 16:58:10
#defineのような複数のファイルにまたがって参照できる
定数はC#ではなんですか?

378 :374:04/11/28 17:07:49
定数はclass内でreadonlyで定義しる

379 :デフォルトの名無しさん:04/11/28 17:12:01
>>376
まずどんな構成を考えているかだ。

他のプロセスのキー入力を取得するのは.NETでは不可能。C/C++などでメッセージをフックする必要がある。

グローバルなホットキーならWin32APIを使えば.NETで扱えるが、全てのウィンドウでのキー入力が奪われてしまう。
その代わりWindowsキーを修飾キーに当てる事もできるから、Windows+F10とかの他に害のないキーを使うなら割と手軽に実現できる。

VBAには詳しくないが、そっちの方でキー入力を判断してとかできるならワード上でなんとかできるかもしれない。
その場合起動済みプロセスにメッセージなりなんなりで通信することになる。


>>377
まずC/C++の思考を捨てろと。
オブジェクト指向で物を考えろと。

constかstatic readonlyのフィールドだ。

380 :374:04/11/28 17:19:55
F11なんて、今まで一度も使ったことないので
このボタンなら他のいかなるプロセスとも重複しないから
いいかなと思いました。
Win32APIの具体的にどの関数がよろしいのでしょうか。
FindWindow SendMessage以外にございますか?


381 :デフォルトの名無しさん:04/11/28 17:31:14
>>380
F11はアプリによってはフルスクリーン切り替えボタンになってるから
気を付けたほうがいいよ。

382 :375:04/11/28 17:32:43
>>376
ワードから呼び出せるものが何かわからないけれど、COMで作ったコンポーネント呼び出せるならそのコンポーネントから.NET製のアプリなりコンポーネントなり呼び出すがよい。

383 :374:04/11/28 17:34:18
そのウィンドウ間でのやりとりをする時は、
ワード2000作業中です。
ワード2k内のF11押下→SendMessage(?)→myCSAppli
ですので、他のアプリって関連がないと思うんですけど・・・
(常駐ソフトをのぞく)

Sleipnirはウィンドウサイズ変更でした(今やってみました)

384 :デフォルトの名無しさん:04/11/28 17:35:46
RegisterHotKey UnregisterHotKey GetForegrondWindow
辺りかな。

いや、グローバルホットキーだとあらゆるウィンドウの入力を奪うから、
F11をグローバルホットキーに割り当てると例えばSleipnirのウィンドウサイズ変更も不可能になる。

385 :374:04/11/28 17:38:00
>>382
word(A COM)
_______↓
myApl(B COM)

であり、COMは同一のもの。
ということですか?

386 :デフォルトの名無しさん:04/11/28 17:39:08
このスレはレベルの低い質問は許されますか?

387 :374:04/11/28 17:40:32
グローバルホットキー?
確かにこれを設定すると、
起動中のすべてのソフトにおいて
各々のソフト内で割り当てられた当該キーを無効にしてしまう

んですよね・・・たしか。

388 :デフォルトの名無しさん:04/11/28 17:40:35
>>386
ふらっとC♯(Part5)
http://pc5.2ch.net/test/read.cgi/tech/1065196964/
というのもある。どっちが良いかは自分で判断すれ。

//ネタにマジレス?

389 :デフォルトの名無しさん:04/11/28 17:40:45
word
    ↓ 
ブリッジコンポーネントl(COM)
    ↓ 
YourApl(.NET) 

390 :374:04/11/28 17:41:34
>>389
きたーーーーーーーーーーー!

目もメモ・・・

391 :374:04/11/28 17:44:44
>>389
ブリッジコンポーネントってなんだょぅ・・・(; ;)
DDEみたいなものですか?DDEはCOMじゃないけど(?)

みなさん、やさしいっす・・・(T_T)

392 :374:04/11/28 17:48:12
ホットキー
ttp://www3.ocn.ne.jp/~liquidz/tips/tips_cpp001.htm
ふむふむ・・・・常にほっとなのね・・・

393 :374:04/11/28 17:48:54
ホットキー
ttp://www3.ocn.ne.jp/~liquidz/tips/tips_cpp001.htm
ふむふむ・・・・常にほっとなのね・・・

394 :デフォルトの名無しさん:04/11/28 22:54:19
winmm.dllのマルチメディアタイマがC#でうまく使えません。

timeSetEventにC#のdelegateで渡して
定期的にイベントを発生するようにすると
最初のうちは動くんですが
数秒たつとnull参照の例外をスローして勝手に止まってしまいます。

delegateじゃだめなんでしょうか?

395 :デフォルトの名無しさん:04/11/28 23:34:48
取りあえず10ミリ秒間隔100秒の10000回は問題ないな。
何がnullになってるんだ?

396 :デフォルトの名無しさん:04/11/28 23:59:16
>>364-367 372
ソースコードまで、丁寧にありがとうございます。
 実はもっと配列のサイズが大きいので、速度的にどう書けば良いか
 考えていました。
>>368
夜中に2重投稿するほど考えてました。
 確かにArray.SortCompareRemove()があればいいと思っていましたが。
>>369
単なる趣味でプログラムしているだけです。

397 :デフォルトの名無しさん:04/11/29 00:04:08
速度を気にするのなら重複分を削除よりも
ソートの方が気を使うべきなんじゃ

398 :374:04/11/29 00:06:02
[DllImport("user32.dll", EntryPoint="RegisterHotKey", CallingConvention=CallingConvention.Winapi)]
public static extern int RegisterHotKey(uint hwnd, uint HK_ID, uint MOD_KEY, uint KEY);

こいつでうまくいきやした。
ありあした。

399 :デフォルトの名無しさん:04/11/29 00:11:23
細かいとこだが、返値はBOOLなんだからboolで宣言してやればいいんじゃないかというのと、
ハンドルの類はIntPtrを使うのが一般的であるという点。
いや別にいいんだけどね。

400 :デフォルトの名無しさん:04/11/29 00:23:34
>>397
ここからは自分でソートのアルゴリズムから勉強し直してみます。

401 :デフォルトの名無しさん:04/11/29 00:28:04
でりげーとさきおぶじぇくとをDispose溶かしてる余寒

402 :374:04/11/29 00:50:09
>>399
え、え、そこんとこ、もう少し具体的に
助言お願いします・・・


403 :デフォルトの名無しさん:04/11/29 00:54:30
>>394
まず、どういう形でDllImportしているのかと、コールバックメソッドはどのように
定義されているのか書いてくれ。それを見ないと確かなことは言えないから。

関数ポインタを引数に取るアンマネージド関数にデリゲートを渡すのは問題ない。
ちゃんとデフォルトのマーシャリングが定義されてるから。
詳細はここを読んで。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingcallbackfunctions.asp

コールバックメソッドを持つオブジェクトを破棄しちゃってるとか、そういう理由だと思うけど。
ためしにコールバックメソッドを static にしてみな。

404 :デフォルトの名無しさん:04/11/29 00:59:46
>>402
「ハンドル」というのは要はポインタのことだから、ポインタを表すIntPtr型を使った方がいいってこと。
.NETでポインタを扱うメソッドやプロパティ(Marshalクラスのメソッド群とか、Form.Handleとか)は
ポインタとしてIntPtr型の引数をとるから、いちいち変換する手間がないという利点もある。

もっとも、MSDNのサンプルでウィンドウハンドルにintを使っていたりするので、動作そのものに
支障はないんだけどね。

405 :デフォルトの名無しさん:04/11/29 01:30:11
あとプラットフォームによってポインタのサイズが変わる可能性がある、と言う点もIntPtrにする理由だな。
IntPtrならプラットフォームによるポインタサイズを考慮する必要がない。ということになってる。

406 :デフォルトの名無しさん:04/11/29 11:22:06
Startボタンを押すと時計がスタートする
10分の1秒単位で表示
Lapボタンを押すとstartボタンをおしてからの
経過時間が表示される
STOPボタンを押すと時間がとまる
Resetボタンをおすと0にもどる
closeボタンを押すとフォームをとじる

っていうのでストップウォッチをつくりたいんですけど。。
教えてください。

407 :デフォルトの名無しさん:04/11/29 11:25:14
何を教えればいいのかな。

408 :デフォルトの名無しさん:04/11/29 11:29:13
どのようなソースになるのかが
わからないです・・・(><)

409 :デフォルトの名無しさん:04/11/29 12:03:04
>>408
  ∧∧  バコ  ☆
 ( *・-・)っ―[] /  
[ ̄ ̄ ̄] (><)


410 :デフォルトの名無しさん:04/11/29 13:15:39
ベクターより選んでダウンロードする。

411 :デフォルトの名無しさん:04/11/29 13:19:53
>>408
ここにきくより。
まず、VC#の基礎を紹介しているHPまわったほうがいいよ。
Timer,TextBox,Buttonコントロールはりつけてイベント記述して完成。


412 :374:04/11/29 14:05:09
>>404 405

詳しく書いてくれたもんだから、うれしいじゃねーかよ!!
あんがとな。
ばっちりだぜ。

413 :デフォルトの名無しさん:04/11/29 19:25:42
ファイルを開くときに、そのファイルに対して他のプロセスが排他的なロックを行っているか調べる方法はありますか?
今は例外をキャッチしたら・・・という処理にしているのですが、
出来ればファイルを開く際にロックを調べたいのです。

よろしくお願いします。

414 :デフォルトの名無しさん:04/11/29 21:28:48
IPやTCP, ICMP等のパケットを自分で作りたいんですが、それぞれの関係や、具体的なデータの例を出して解説してるWebサイトってありませんか?
(UDPパケットはIPパケットのデータ部分に含まれてるとか、そういうプロトコル同士の関係とか)

415 :デフォルトの名無しさん:04/11/29 21:43:40
>>414
それは↓のスレで聞いたほうがいい答えを聞けそうな気がする
http://pc5.2ch.net/test/read.cgi/tech/1096187183/

416 :デフォルトの名無しさん:04/11/29 21:56:42
>>415
どうもありがとうございます。

417 : :04/11/29 23:43:58

インターネット -----(グローバルIP) ルータ(192.168.1.1)------- (192.168.1.10)LAN端末

こんな環境でLAN端末で動いているC#アプリから
グローバルIPを取得する方法知りませんか?

                      



418 :デフォルトの名無しさん:04/11/29 23:52:41
tracert みたいなもんを組むしかないんじゃない?

419 :デフォルトの名無しさん:04/11/30 00:01:49
IPアシストというグローバルアドレス取得ソフトでも結局診断君あたりの情報を使ってるだけだな。

420 :417:04/11/30 00:11:03
レスありがとうございます。
どうやら、外に問いあわせるしかないようですね。
がんばって組んでみます。

421 :デフォルトの名無しさん:04/11/30 00:58:10
なんか、手はあるそうだけど、ルーター選ぶみたい。
手っ取り早いのは外にといあわせですね。

422 :デフォルトの名無しさん:04/11/30 01:06:29
ルータの機種にもよるけど、こんな方法はどうだ?

HTTPなりHTTPSでルータ管理画面(のHTMLソース)を取得し、その中からIPアドレスを抜き出すとかw

423 :デフォルトの名無しさん:04/11/30 01:23:16
>>413
Win32APIつかえ

424 :422:04/11/30 01:29:01
サンプル作ってみた。ルータは Planex BRL-04FWU。

// ルータステータス画面のURI、ユーザ名、パスワード
string uri = @"http://192.168.1.1/status.htm";
string username = "admin";
string password = "password";

try
{
  System.Net.WebClient wc = new System.Net.WebClient();

  wc.Credentials = new System.Net.NetworkCredential(username, password);
  string src = System.Text.Encoding.Default.GetString(wc.DownloadData(uri));

  System.Text.RegularExpressions.Regex rx
    = new System.Text.RegularExpressions.Regex(@"\d+\.\d+\.\d+\.\d+");

  string ipAddr = rx.Matches(src)[0].Captures[0].Value;

  Console.WriteLine("成功しますた。 Global IP Address: {0}", ipAddr);
}
catch
{
  Console.WriteLine("失敗しますた。");
}


425 :デフォルトの名無しさん:04/11/30 01:50:51

たいへん初歩的かもしれませんが、たいへん大事な疑問を持っています。

C#という言語は、米国マイクロソフト社のものだそうですが、
現在、これは同社がどの程度にぎり締めているのでしょうか?

・C#言語で書いたソースコードを作成した場合、それはマイクロソフト社から
 何らかの所有権のような主張を受ける可能性がありますか? 現在何らかの主張
 を受ける可能性と共に、将来に渡って主張を受ける可能性があるのかどうかが問題
 です。

 たとえば、現在はC#言語を使うことについて、マイクロソフト社にお金を支払う
 必要もないし、許可を得る必要もないと示していると思います。ただし、所有権は
 握っていて、ただ単に今はお金も許可もなしで使っていいです、と言っているだけで、
 やがて将来のいつかの時点で、おカネいただきます、とか言い出す可能性があるような
 公開のされかたをしているのでしょうか?

・また、C#言語のソースコードを処理するプログラム。たとえばコンパイラや変換プログラム
 などを作成する際に、上記のような主張をされ得る可能性があるでしょうか。つまり、
 そのようなC#言語の仕様の公開のされかたがなされているでしょうか?

・同様に、C#言語に関する文書や、マイクロソフト社製のソフトやサービスを利用した人が、
 そこからインスピレーションやアイデアを受けて、別の何か面白い物を考え出した場合、
 マイクロソフト社から、それはC#の利用規約上、あなたは我々に従わねばなりません、
 おカネいただきます、とか主張される可能性があるでしょうか? 
 そのような主張がされるような可能性を残すような、公開のされかたをしているでしょうか?


どうぞよろしくお願いします

426 :デフォルトの名無しさん:04/11/30 01:55:22
>>425
http://www.amazon.co.jp/exec/obidos/ASIN/4004305969/249-6849360-6597960

427 :デフォルトの名無しさん:04/11/30 01:55:57
おいおい、C#はEMCAにも標準認定されてる言語だぜ。

428 :デフォルトの名無しさん:04/11/30 01:56:08
>>425
プログラミング言語に著作権は無い

429 :デフォルトの名無しさん:04/11/30 01:59:30
>>425
全部ない。

430 :デフォルトの名無しさん:04/11/30 02:00:48
自分用に使うだけなら、適当なFTPサーバにアクセスしてデータポートを開かない
ままLISTとか投げると大概はエラーコード550に続いて此方のIPを返してくれる。
あとはSMTPサーバにアクセスしてEHLO投げてみるとか?

431 :デフォルトの名無しさん:04/11/30 02:29:27
>>427
CLIの部分をISOにも提出してるっていってたよな。
通ったんだっけ?

432 :デフォルトの名無しさん:04/11/30 03:17:09
動的プロパティって名前はかっこいいけど手動でしか書き換えられないの?(´・ω・`)

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/Vbcon/html/vboriApplicationSettingsInServerComponents.asp

433 :デフォルトの名無しさん:04/11/30 03:25:29
>>432
2.0ではできるようになる。
今はそんな使えないもの使わず自前で。

434 :432:04/11/30 03:34:03
そっか。頑張ってみるよ。ありがとん。

435 :デフォルトの名無しさん:04/11/30 06:38:22
>プログラミング言語に著作権は無い

 ように見せかけているだけ。実際言語とは何か? ライブラリーとは
なにか? そのうちUNI死すみたいに豹変する可能性大。

436 :デフォルトの名無しさん:04/11/30 06:41:21
Re:>435
馬鹿は死ね

437 :デフォルトの名無しさん:04/11/30 07:30:48
>>435
Unisysが持っているのは著作権ではなく「特許」なわけだが。
さらに言うと、その中身は言語でもライブラリでもなく、LZWという「アルゴリズム」。

438 :デフォルトの名無しさん:04/11/30 07:46:02
なぁなぁ、ManagedDirectXの日本語ドキュメントをVSを使わずに見る方法があるはずなんだが、
どうやってやるんだっけ?

439 :438:04/11/30 08:04:18
っつーか.NETのドキュメントすらねぇ('A`)
ドキュメントだけ落とすことはできなかったっけ?SDK丸々落とすの?(´・ω・`)

440 :デフォルトの名無しさん:04/11/30 08:36:33
確かオブジェクト指向という考え方そのものに特許を持っている
企業があって最近大騒ぎになったような…

441 :デフォルトの名無しさん:04/11/30 08:44:17
これか
http://www.itmedia.co.jp/enterprise/articles/0410/05/news016.html


442 :438:04/11/30 08:48:15
アラヤダ
スレを間違えてたよ(´・ω・`)

443 :デフォルトの名無しさん:04/11/30 11:55:43
たしかに豹変は怖いな

444 :デフォルトの名無しさん:04/11/30 15:01:53
この言語って無料ではできないんですか

445 :デフォルトの名無しさん:04/11/30 15:04:45
>>444
SDKは無料。

446 :デフォルトの名無しさん:04/11/30 15:29:30
言語は無料

447 :デフォルトの名無しさん:04/11/30 17:43:29
俺の童貞は無料

448 :デフォルトの名無しさん:04/11/30 17:52:49
無料でも貰い手が無い

449 :デフォルトの名無しさん:04/11/30 18:10:37
(´Д⊂)

450 :デフォルトの名無しさん:04/11/30 18:15:00
(  ̄,_ ̄)プ

451 :デフォルトの名無しさん:04/11/30 19:57:24
どこかにアルゴリズムとか言語とか抜きの無料でかわいい女の子いませんか?

452 :デフォルトの名無しさん:04/11/30 22:36:58
C++様(*´Д`)ハァハァ

……とか言うべき流れなのだろうか。

453 :デフォルトの名無しさん:04/11/30 23:02:38
>>444
.NET Framework自体にコンパイラが含まれてるんで、それだけでも開発はできる
俺はよく仕事に使うツールなんかを作ったりしてるよ。

454 :デフォルトの名無しさん:04/11/30 23:46:18
お世話になります。
tabpageの配列に関しての質問です。

tabpageの配列?を作りたいんですが、
ボタンをクリックする毎に
ひとつのtabControl上に順ににabPage1、tabPage2、tabPage3、・・・
と作られるようにしたいのです。

xをインデックスとして
int x = 1;
void Button1Click(object sender, System.EventArgs e)

{
      System.Windows.Forms.TabControl control = new System.Windows.Forms.TabControl();
      System.Windows.Forms.TabPage page[x] = new System.Windows.Forms.TabPage();
      control.Controls.Add(page[x]);

x++;
}

としてもどうやら文法ミスのようでうまくいきません。
なんででしょうか?
こう書けば出来るよっていう書き方を知ってたら教えてください。

455 :454:04/11/30 23:51:23
ちなみにエラーメッセージです。
構文エラーとか言われてます。

c:\Documents and Settings\yuu\My Documents\SharpDevelop Projects\arraytab\MainForm.cs(107,41): error CS0650: 構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。
c:\Documents and Settings\yuu\My Documents\SharpDevelop Projects\arraytab\MainForm.cs(107,45): error CS1002: ; が必要です。
c:\Documents and Settings\yuu\My Documents\SharpDevelop Projects\arraytab\MainForm.cs(107,45): error CS1525: '=' は無効です。
c:\Documents and Settings\yuu\My Documents\SharpDevelop Projects\arraytab\MainForm.cs(107,47): error CS1002: ; が必要です。

ビルド完了 -- 4 エラー, 0 警告



456 :デフォルトの名無しさん:04/11/30 23:56:10
>>454
取りあえず
> System.Windows.Forms.TabPage page[x] = new System.Windows.Forms.TabPage();
みたいな書き方するレベルなら、もっと基礎から学んでいくべきだね。
配列の宣言と代入の仕方から。

> System.Windows.Forms.TabControl control = new System.Windows.Forms.TabControl();
FormとTabControlとTabPageの関係も考えてみる。
何がTabControlで何がTabPageだ?
どのTabControlにどのTabPageを入れるか?

457 ::04/11/30 23:56:35
ttp://www.iis.u-tokyo.ac.jp/~susaki/c/func2.html
ここの問題なんですが・・・・
全部分かりません(x_x)
どなたかよろしくお願いしますm(_ _)m
丸投げ状態ですが、ちゃんとパソコンの前に座って勉強してます
色々な所に書き込んでます
ご迷惑お掛けしますm(_ _)mコ

458 :454:04/12/01 00:08:14
>>456
ありがとうございます。
いまついうっかり書き写し間違えてしまいまた。

じゃあこんなのはどうでしょうか?
System.Windows.Forms.TabPage[] page = new System.Windows.Forms.TabPage();

配列の要素数を最初っから決めたくないんですが・・。
この気持ち分かってくれますか?

459 :デフォルトの名無しさん:04/12/01 00:18:00
どうでしょうかも何もコンパイルすりゃ分かるだろう。
配列サイズを動的に増加させたいならArrayListでも使ってろという話だ。


ところでなんで基礎を基礎をと言う話は華麗にスルーするんだろうねこういう人たちは。

460 :最凶VB厨房:04/12/01 00:19:27
おまいもかれいにするぅしろぃ

461 :454:04/12/01 00:20:40
答え教えてくれよ。

462 :デフォルトの名無しさん:04/12/01 00:23:59
>>461
ちょっと感動した。

463 :デフォルトの名無しさん:04/12/01 00:27:05
>>461
釣りだというのは承知で言わせてもらうが


お前は死ね!



464 :デフォルトの名無しさん:04/12/01 00:39:57
>>454
つられよう。
タブコントロールボタンクリックするたびにつくってどうする!
タブページをどこに追加してんねん!
そもそも以下略・・


465 :デフォルトの名無しさん:04/12/01 00:41:23
System.Windows.Forms.TabPage tabPage = new System.Windows.Forms.TabPage();
this.tabControl1.TabPages.Add(tabPage);

ちなみに追加の仕方はこうだ。
配列は勉強汁

466 :デフォルトの名無しさん:04/12/01 00:43:37
>>457

C言語のスレにいきなされ。

467 :デフォルトの名無しさん:04/12/01 00:47:00
みんな優しいのね。

>>454だとButton1Clickの度にTabControlが作られるよ。
そうしたいなら話は別だが・・絶対に違うだろ?



468 :デフォルトの名無しさん:04/12/01 01:20:36
[DllImport("Imm32.dll",EntryPoint="ImmEnumRegisterWordA")]
public static extern IntPtr ImmGetContext(IntPtr hWnd);
[DllImport("IMM32.DLL")]
public static extern Int32 ImmReleaseContext(IntPtr hWnd, IntPtr hIMC);
[DllImport("IMM32.DLL")]
public static extern Int32 ImmSetOpenStatus(IntPtr hIMC, Int32 fMode);
[DllImport("IMM32.DLL")]
public static extern Int32 ImmRegisterWord(IntPtr hKL, String lpszReading, UInt32 dwStyle, String lpszRegister);

[DllImport("User32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("User32.dll")]
public static extern IntPtr GetKeyboardLayout(UInt32 dwLayout);

private const Int32 mc_TRUE = 1;
private const Int32 mc_FALSE = 0;
//public const Int32 IME_REGWORD_STYLE_USER_FIRST = 0x80000000;
public const Int32 IME_REGWORD_STYLE_USER_FIRST = 0x0000;
public const Int32 IME_REGWORD_STYLE_USER_LAST = 0xFFFF;


469 :デフォルトの名無しさん:04/12/01 01:21:13
private void button1_Click(object sender, System.EventArgs e)
{
//辞書ボタン
IntPtr hWnd;
IntPtr hIMC;
IntPtr hKL;
hWnd=GetForegroundWindow();
if(hWnd==IntPtr.Zero)
{
MessageBox.Show("hWnd = "+hWnd.ToString());
}
hIMC=ImmGetContext(hWnd);
if(hIMC==IntPtr.Zero)
{
MessageBox.Show("hIMC = "+hIMC.ToString());
}
hKL=GetKeyboardLayout(0);
if(hKL==IntPtr.Zero)
{
MessageBox.Show("hKL = "+hKL.ToString());
}

if(ImmSetOpenStatus(hIMC,mc_TRUE)==0)
{
MessageBox.Show("ImmSetOpen Failed");
return;
}
MessageBox.Show(hKL.ToString());
ImmRegisterWord(hKL,"へけけ",IME_REGWORD_STYLE_USER_FIRST,"へけっしゅ");

ImmReleaseContext(hWnd,hIMC);
MessageBox.Show("最後まで到達");

470 :468:04/12/01 01:25:59
うわ〜恥ずかしい、hIMCがIntPtr.Zeroになってしまうのを
質問しようとしたら、IMMGetContextになぜかエントリーアホイントが
残ってたじゃないですか・・・すみません。
改めて、エントリーポイント削除して起動したら、無事
hIMCは取得できました。
しかし、
ImmRegisterWord(hKL,"へけけ",IME_REGWORD_STYLE_USER_FIRST,"へけっしゅ");
をしたにも関わらず、単語登録されていません。
ちゃんとReleaseでコンテキストを開放しているんですけど、
プログラム実行後すぐに辞書を確認しても、登録されていません。
だれか、教えてください。まじ、頼む・・・

471 :468:04/12/01 01:27:18
hWnd=GetForeGroundWindow()じゃなくても
hWnd=this.Handle;

でいけそうな予感もしたので、先生方、そこんとこもよろしくです。
まじたのもう。

472 :468:04/12/01 01:29:15
そのほかにも、「おまえアホか」とか
「この文、ナンセンスだよね」とかあったら、
教えてください.
ネット上では、IntPtrの代わりに
longがよく使われているみたいだけど、
longでも代用可能な理由と、どちらを選択すべきか及びその理由も
教えていただけると、僕はなきます。まじで、なく。

473 :デフォルトの名無しさん:04/12/01 01:43:03
取りあえず一般的な事を。

>  hWnd=GetForeGroundWindow()じゃなくても
>  hWnd=this.Handle;
>  でいけそうな予感もしたので、先生方、そこんとこもよろしくです。

thisがフォアグラウンドなフォームなら返ってくる値は同じ。

BOOLはboolで宣言して問題ない。 //対応するマネージ型はInt32になってるけど。
個人的にはconstで宣言するよりenumで纏めるな。 //これはコーディングスタイルの問題だが。それにこの例のように2つだけならconstも真っ当だ。

IntPtrの方が自然。
つうかlongで宣言してる例って見かけないんだけど……。
//VB6はLongが.NETにおけるInt32になるよ。
32bit環境でならIntPtrは32bitとして扱われるのでちょうどInt32と相互に互換性がある。
そのためInt32/UInt32で定義することも珍しくはない。
がしかしInt32にしろInt64にせよポインタサイズを決めうちしてしまうと、
プラットフォーム固定になってしまうから好ましくない。

474 :454:04/12/01 01:59:09
int x = 0;
System.Collections.ArrayList myArrayList = new System.Collections.ArrayList();
   
void Button1Click(object sender, System.EventArgs e)
{
myArrayList.Add(new System.Windows.Forms.TabPage());
tabControl1.Controls.Add((TabPage)myArrayList[x]);
x++;
}

エラーが消えて希望の処理が出来るようになったので
安心して死ねます。みなさんありがとうさようなら・

475 :468:04/12/01 02:00:42
>>473
天使だな、あなた。 とりあえず、うれしいぜ。
DLLインポートの時に、上記すべての宣言時において
EntryPointでエントリポイントを念のためきちんと指定しておきました。
もっともEntryPointの記述なしにハンドルとか取れていたので、
EntryPoint って結局いるのいらないの?
そこんとこも、頼みます(・人・)

あと、
//public const Int32 IME_REGWORD_STYLE_USER_FIRST = 0x80000000;
public const Int32 IME_REGWORD_STYLE_USER_FIRST = 0xA000;
これも。Basic.Netで&H80000000と書いてあったんで
C#.netなら、0x80000000でよいかなと、
で、ちょっと桁が多くておかしいなと。16進法なのに・・・
というわけで、80000000が8進法だと仮定して・・・あれ。
8進法なら7までのはず・・・はぁ僕っておばかさん。

476 :468:04/12/01 02:02:15
>>454
え、何それ、それやるとタブ増えるの? めもめも

477 :454:04/12/01 02:11:29
まだ死ねなかった。

>>474で生成されたTabpageなんだけど
いざ新しく出来たタブに名前をつけようとして

例えば
(TabPage)myArrayList[x].Text = "新しいタブ"

とかやるとエラーが出てくる。どうしてか教えてください。

478 :デフォルトの名無しさん:04/12/01 02:50:14
>>475
EntryPoint の指定は、特に別名を指定したい場合以外は必要ない。
(例えば、static メソッドには必ず sm_ というプレフィックスをつけるというコーディング規約
がある時とかね)

あと、ANSI版(〜A)とUnicode版(〜W)がある関数の場合、あえてAやWを指定せずに、
(例えば、LoadLibraryA とか LoadLibraryW とか書かずに LoadLibrary と書く)
CharSet = CharSet.Auto と指定すると、プラットフォームに応じて適切な方を呼んでくれる
という機能があるので、積極的に利用汁。

479 :デフォルトの名無しさん:04/12/01 02:57:22
>>468-470
[DllImport("imm32.dll")]
public static extern uint ImmGetRegisterWordStyle(IntPtr layout, uint itemMaxCount, [Out] StyleBuffer[] buffer);
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct StyleBuffer {
   public int Style;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst=0x20)]
   public string Description;
   public override string ToString(){
      return string.Format("StyleID: 0x{0:X8}   品詞: {1}", Style, Description);
   }
}

IntPtr layout = GetKeyboardLayout(0);
uint count = ImmGetRegisterWordStyle(locale, 0, null);
StyleBuffer[] buffers = new StyleBuffer[count];
count = ImmGetRegisterWordStyle(layout, count, buffers);
foreach (StyleBuffer buffer in buffers)
   Console.WriteLine(buffer.ToString());

で品詞とそれに対応するStyle値が手に入る。
例えば名詞が0x80000001だとして、
ImmRegisterWord(layout, "ああ", 0x80000001, "吁嗟");
これだけならコンテキスト取得する必要も無し。

> //public const Int32 IME_REGWORD_STYLE_USER_FIRST = 0x80000000;
基本的に正しい。Int32はその名の通り32bit。4bitで16進数一桁だから32ビットは16進数8桁。丁度だ。
ただ、DWORDに対応するマネージ型はUInt32だからね?

480 :468:04/12/01 09:27:03
はぁ、もうみんなやさしすぎ。
まじうれしいです。
休み時間にゆっくり検討させていたらきます。

481 :初心者:04/12/01 11:12:16
お世話になっています。C#初心者です。
現在、HTTPプロトコル経由で、CGIへ送信メソッドを呼び出すプログラムを作成しています。
POSTメソッドに引き渡すパラメータの中に、「画像ファイルバイナリデータ」があるのですが
一体、どのように渡せばいいのか、検討が付きません。

どなたかご教授下さいますよう、宜しくお願い致します。

-------------------------------------------------------------------
WebRequest webReq = HttpWebRequest.Create( "・・・.cgi" );
wk_webReq.Method = "POST";

Stream stream = webReq.GetRequestStream();
StreamWriter writer = new StreamWriter( stream );

↓↓↓↓↓↓↓↓↓↓ ここの部分が不明です。
string parameter = "key=111&gazou=(画像ファイルバイナリデータ)";
parameter = HttpUtility.UrlEncode( parameter );

writer.Write( parameter );
writer.Close();

WebResponse wk_webRes = wk_webReq.GetResponse();
・・・

482 :デフォルトの名無しさん:04/12/01 11:18:55
>string parameter = "key=111&gazou=(画像ファイルバイナリデータ)";
>parameter = HttpUtility.UrlEncode( parameter );

これだとCGIに渡されるデータは「key%3d111%26gazou%3d(・・・」になるぞ

483 :デフォルトの名無しさん:04/12/01 11:19:31
>>481
そのCGIの仕様を知らないから何とも言えないが、大抵はBase64エンコードを使うんでは無かろうか。
System.Convert.ToBase64Stringメソッド。

POSTするときはContentLengthプロパティの設定も忘れずに。

484 :初心者:04/12/01 11:29:31
>>482
間違えました。パラメータの=右値のみ、UrlEncodeする予定です。

>>483
ありがとうございます!!
僕も、そのCGIの仕様を全く知らないのですが、仕様書にそう
書かれていました。

485 :468:04/12/01 12:23:02
>>478
Char Setね、アイアイサー

486 :468:04/12/01 12:31:00
>>473
まじ、俺、うれしいぜ。
ちょっと恥ずかしいくらい、今うれしいぜ。

>thisがフォアグラウンドなフォームなら返ってくる値は同じ。

らじゃ。フォアグラウンドウィンドウってことは
ようは、Active()なウィンドウってことでオッケーっすよね。

>BOOLはboolで宣言して問題ない。 //対応するマネージ型はInt32に
>なってるけど。

はぅ、まじっすか?確かに小文字にしただけなのでいけそうな気も
していたのですが、BOOLはInt32であって、True or Falseというわけでは
ないから、無理だとばかり思ってました。だって、
Int32をboolに暗黙的に変換できませんでした」なんて言われそうで・・・。

487 :468:04/12/01 12:31:21

>個人的にはconstで宣言するよりenumで纏めるな。
> //これはコーディングスタイルの問題だが。
>それにこの例のように2つだけならconstも真っ当だ。

らじゃ、列挙んとこ、勉強しときます。

>IntPtrの方が自然。
>つうかlongで宣言してる例って見かけないんだけど……。
>//VB6はLongが.NETにおけるInt32になるよ。

VBのLongを、longと近藤さんでした。
IntPtrでがんがんいくぜ! ってか
IntPtrって、C言語でいう
単なるポインタなんでしょ?ってか、単なるアドレス格納庫なんだよね?
(間違ってたら遠慮なく「あほ」とおながいします)

488 :468:04/12/01 12:38:16
>>479
ポイセドン級のレベルですね。
ドラゴンボールでいうなら、デンデでしょうか。
パッパリピ・・・ごっふぉん。

ってか、まじさんくす。
そんなサンプルどこにありました?
僕はかなーり探しましたけど、imm32に関しては
定義くらいしか載っていませんでした・・・
確かにスタイル取得の構造体に関する記述は少しあったけど、
ぜんぜんくわしくなくて、まるで雲をつかむ思いでした。
でも、天使君臨。(>_<)

489 :デフォルトの名無しさん:04/12/01 12:50:42
>>487-488
>  IntPtrって、C言語でいう
>  単なるポインタなんでしょ?ってか、単なるアドレス格納庫なんだよね?

まあそういう理解で間違いじゃない。
ただ32bitなりのただの数字だから、単純に数値を渡す時にも使ったりする。……のも結局Cと同じだよな。
//SendMessageのWParamを想像するとわかりやすい。
要はプラットフォームに固有の桁サイズ(メモリアドレスがその代表格)を持つ数値を表す構造体であると。

> そんなサンプルどこにありました?
> 僕はかなーり探しましたけど、imm32に関しては
> 定義くらいしか載っていませんでした・・・
> 確かにスタイル取得の構造体に関する記述は少しあったけど、
> ぜんぜんくわしくなくて、まるで雲をつかむ思いでした。

定義が載ってたから後はトライアンドエラー。
閃いたのはImmRegisterWordのstyle値を成功するまでループで回してみて、0x80000001で成功が返ってきたから。
DllImportの記述は慣れ。

490 :468:04/12/01 13:05:14
>>489
アドバイス、本当にありがとうございます。
おかげで、なんかいけそうな気がしてきました。
僕はスタイル値に適当にぶっこんどけば
動くものだと思っていました。
(「適当に」というのは0x80000000とか)

僕の頭の中には、残念ながら以下の文に関する知見がございません。
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=0x20)]
勉強しに逝ってきます。


491 :デフォルトの名無しさん:04/12/01 16:25:28
while文を使って、ファイルを一行一行読み込んでいます。
ある行でエラーが発生した場合、次の行を読み込みたいのですが
どうしたらいいんでしょうか

492 :デフォルトの名無しさん:04/12/01 16:32:02
continue;

493 :デフォルトの名無しさん:04/12/01 16:39:50
enum Test : int
{
  value1 = 0x0100,
  value2 = 0x0110
}
ていう列挙体を作って、

Console.WriteLine(Test.value1);
で、これだと「value1」が出力されます。
Console.WriteLine((int)Test.value1);
だと、「256」が出力されます。

ダイレクトに「0100」という出力結果がほしいんですが、どうしたらいいんでしょうか?

494 :デフォルトの名無しさん:04/12/01 16:45:08
printf

495 :デフォルトの名無しさん:04/12/01 16:47:19
ダイレクトも何もコンパイル時に0x100、つまり256という「数値」で格納されるので0x0000などという表記は喪失する。
Convert.ToString(int, string)とかで適切に対処する。

文字に変換するのが重要なら構造体にしてToStringをオーバーライドするという手もある。

496 :デフォルトの名無しさん:04/12/01 16:48:25
Convert.ToString(int, int)の間違いだった。

497 :デフォルトの名無しさん:04/12/01 16:49:11
>>493
内部的には16進リテラルも10進リテラルも同じだから区別のつけようは無い。
そのため、出力関数側で16進表示の面倒を見てやる必要がある。
Console.WriteLine("16進表示:0x{0}", Enum::Format(typeof(Test), myTest, "x"));
といった感じ。

ここを参考:
ms-help://MS.NETFrameworkSDKv1.1.JA/cpref/html/frlrfSystemEnumClassFormatTopic.htm

498 :デフォルトの名無しさん:04/12/01 23:07:01
tabControlのBackColorを変更したいのですが、
それぞれのページのBackColorは変更ではなく、
tabControl自体のBackColorは変更できないのでしょうか?
ボタンのところではなく、外枠っぽいところです。
そこだけ無機質なWindowsコントロールの色なので変更したいのですが・・・


499 :デフォルトの名無しさん:04/12/02 00:26:24
Q1: バイナリを配布する際にコンソールを表示しないようにしたいのですが
   可能でしょうか?

Q2: プログラムからIEを起動してヘルプを表示したいのですが、
   どのようにすれば良いでしょうか?

Q3: 「コンパイル済みHTMLヘルプファイル」(.chm)を作るツールみたいなものって
   あるのでしょうか?

おながいします。

500 :デフォルトの名無しさん:04/12/02 00:31:23
>>499
1. 可能。/t:winexe
2. こんな感じでいいかな http://ja.gotdotnet.com/QuickStart/aspplus/default.aspx?url=%2fquickstart%2fwinforms%2fdoc%2fWinFormsAxHosting.aspx
3. あります。探しなさい。

501 :デフォルトの名無しさん:04/12/02 00:35:58
>Q1
可能

>Q2
IEのパスを取得してSystem.Diagnostics.Process.Start();

>Q3
ある

502 :468:04/12/02 00:48:43

//The Function to get IME Context
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern IntPtr ImmGetContext(IntPtr hWnd);
//The Function to release IME Context
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern bool ImmReleaseContext(IntPtr hWnd, IntPtr hIMC);

//The Function to Set IME Opened
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern bool ImmSetOpenStatus(IntPtr hIMC, bool fMode);

//The Function to Get IME Status
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern bool ImmGetOpenStatus(IntPtr hIMC);

//The Function to get ResisterWord Styles
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern UInt32 ImmGetRegisterWordStyle(IntPtr hKL, UInt32 nItem, [Out] StyleBuffer[] lpStyleBuf);

//The Function to resister words
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern bool ImmRegisterWord(IntPtr hKL, String lpszReading, UInt32 dwStyle, String lpszRegister);


503 :468:04/12/02 00:49:10

//The Function to delete resiterd word
[DllImport("imm32",CharSet=CharSet.Auto)]
public static extern bool ImmUnregisterWord(IntPtr hKL, String lpszReading, UInt32 dwStyle, String lpszUnregister);

//The Function to Get ForeGround Window
[DllImport("user32",CharSet=CharSet.Auto)]
public static extern IntPtr GetForegroundWindow();

//The Function to Get Keyboard Layout
[DllImport("user32",CharSet=CharSet.Auto)]
public static extern IntPtr GetKeyboardLayout(UInt32 dwLayout);


//The struct field used for "ImmGetRegisterWordStyle"
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct StyleBuffer
{
public UInt32 Style;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=0x20)]
public string Description;
public override string ToString()
{
return string.Format("StyleID: 0x{0:X8} 品詞: {1}", Style, Description);
}
}

504 :468:04/12/02 00:50:01

private void button1_Click(object sender, System.EventArgs e)
{
//辞書ボタン
IntPtr hWnd;
IntPtr hIMC;
IntPtr hKL;
hWnd=GetForegroundWindow();
if(hWnd==IntPtr.Zero)
{
MessageBox.Show("hWnd = "+hWnd.ToString());
return;
}
hIMC=ImmGetContext(hWnd);
if(hIMC==IntPtr.Zero)
{
MessageBox.Show("hIMC = "+hIMC.ToString());
return;
}
hKL=GetKeyboardLayout(0);
if(hKL==IntPtr.Zero)
{
MessageBox.Show("hKL = "+hKL.ToString());
}

505 :468:04/12/02 00:50:25


if(ImmSetOpenStatus(hIMC,true)==false)
{
MessageBox.Show("Can't Open IME");
}
if(ImmGetOpenStatus(hIMC)==false)
{
MessageBox.Show("IME not Opened");
}
UInt32 count = ImmGetRegisterWordStyle(hKL, 0, null);
StyleBuffer[] buffers = new StyleBuffer[count];
count = ImmGetRegisterWordStyle(hKL, count, buffers);

foreach (StyleBuffer buffer in buffers)
Console.WriteLine(buffer.ToString());

506 :468:04/12/02 00:51:23


if(ImmRegisterWord(hKL,"へけけ", buffers[0].Style,"へけっしゅ")==false)
{
MessageBox.Show("Can't Resister Word");
}
//登録したけど、やっぱ消す。
//2重登録はエラーになるからめんどい。
if(ImmUnregisterWord(hKL,"へけけ", buffers[0].Style,"へけっしゅ")==false)
{
MessageBox.Show("Can't UnResister Specific Word");
}

if(ImmReleaseContext(hWnd,hIMC)==false)
{
MessageBox.Show("can't release IME Context");
}
MessageBox.Show("最後まで到達");
}

507 :デフォルトの名無しさん:04/12/02 00:51:24
死ねと言われる前に他所に行くなり諦めるなりしたほうがいいぞ

508 :デフォルトの名無しさん:04/12/02 01:15:01
>>468 いい加減にしろよ。

509 :デフォルトの名無しさん:04/12/02 01:44:35
頭の悪い質問なのですがunmanaged codeのDLLをインポートしたときの
デバッグについて質問なのですが、DLL側ではスレッドを起動している以外はごくごく普通のCとC++をラップした
APIの構成になっているのですが、デバッグするとほぼ確実にunmanaged code
メソッド周辺で落ちるのですがこれは、呼び出しがそもそもいけないのでしょうか?
その辺のサンプルに乗っているのと同様にDllImport文法を利用しているにすぎず
特殊なことは一切しておりません。原因がDLL側にあるのかC#のほうの呼び出しに問題があるのか
切り離せず苦慮しています。何かいい知恵授けてください。

510 :デフォルトの名無しさん:04/12/02 01:50:04
DLLでデバッグするようにしてどこまできてるかとか確かめてみたら?

511 :デフォルトの名無しさん:04/12/02 03:02:14
デバッグしないと正常に値が出し入れできるので頭が痛いのです。
デバッグしたときだけ落ちるので、何がいけないのか良くわからない状況です。
単体デバッグだけならDLL、C#とも何も起きません。

512 :デフォルトの名無しさん:04/12/02 08:20:45
だったらまずリリースにしてDLL側でログはくようにしろよ。ファイルでおきなかったら、共有メモリにはく。

513 :468:04/12/02 08:57:11
すみません、削除依頼出しておきます。
すみません。

514 :468:04/12/02 12:02:28
削除願い、今朝提出させていただきました。
ご迷惑おかけしました。

515 :デフォルトの名無しさん:04/12/02 12:11:07
どうでもいいけどMSのドキュメントってなにげに良質じゃない?

516 :デフォルトの名無しさん:04/12/02 12:13:19
開発環境は良質
之は(・∀・)イイ!!

517 :デフォルトの名無しさん:04/12/02 12:15:27
.NETのリファレンス級のマニュアルがあれば
すぐLinux+GCC+KDEにころぶが・・・そうはいかないからなぁ


518 :デフォルトの名無しさん:04/12/02 12:35:30
PCに割当てられてるグローバルIPを取得するには、どうやったらいいですか?
同時に、ネットにつながってない場合、192.0.0.1を取得するようにしたいんですが。

519 :デフォルトの名無しさん:04/12/02 13:36:26
>>515
良質。メソッド毎のサンプルも結構あるし。
MSってドキュメンテーションにすごいお金かけてるよね。Platform SDKなんかの
古いAPI のドキュメントも未だにメンテナンスされ続けてるし。
ちゃんと外からのフィードバックを反映する体制が出来てるんだろうなぁ。


520 :デフォルトの名無しさん:04/12/02 15:25:48
画像ファイルを、バイナリデータとして
文字列で取得したいんですが
どうすればいいですか。結果的には0と1の文字列にしたいのですが・・。


521 :デフォルトの名無しさん:04/12/02 16:00:04
>>520
FileStreamで開けてバイトを読み出してConvert.ToStringで二進数にしてPadLeftで左を0で埋めてStringBuilderにAppendしていく。

522 :520:04/12/02 16:16:07
>>521
ありがとうございます。

StringBuilder sb = new StringBuilder()

// ファイルをbyte型配列としてすべて読み込む
FileStream stream = new FileStream( "c:\gatou.jpeg", FileMode.Open, FileAccess.Read );
byte[] bt = new byte[stream.Length];
int len = stream.Read( bt, 0, (int)stream.Length );
stream.Close();

for( idx=0; idx < len - 1; idx++ )
{
sb.Append(Convert.ToString(bt[idx]).PadLeft(8,Convert.ToChar("0")))
}


523 :デフォルトの名無しさん:04/12/02 17:14:43
SSL関連のクラスが見当たらないんだけど、SSLで接続するにはどうしたらよい?

524 :デフォルトの名無しさん:04/12/02 17:33:18
>>523
ms-help://MS.NETFrameworkSDKv1.1.JA/cpguidenf/html/cpconUsingSecureSocketsLayer.htm

525 :デフォルトの名無しさん:04/12/02 17:33:36
>>523
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingsecuresocketslayer.asp

526 :デフォルトの名無しさん:04/12/02 18:14:08
C#のADO.NETをつかって、MS-ACCESSのテーブル一覧を取得するにはどうしたらよいのですか?

527 :デフォルトの名無しさん:04/12/02 18:17:22
>>526
書店にいくと、ADO.nETとAccessに関する
良本がたくさん出版されています。
だから聞くなとは言いませんが、包括的に学習するためにも
購入されてみてはいかがでしょうか。

528 :デフォルトの名無しさん:04/12/02 18:57:22
ディスプレイ全体のスクリーンのキャプチャを取ろうとしているのですが、
下のコードではアクティブウインドウのスクリーンしか取れません。
なにがいけないのでしょうか?

SendKeys.SendWait("{PRTSC}");
Bitmap bmp = (Bitmap)(Clipboard.GetDataObject().GetData(DataFormats.Bitmap));

529 :>>515:04/12/02 18:58:51
サンプルコードつけてくれる所がうれしいね

530 :デフォルトの名無しさん:04/12/02 18:59:19
>>526
あきらめてADODB.ConnectionとADOX.Catalogで、

531 :デフォルトの名無しさん:04/12/02 19:06:36
>>528
Shift(+)かCtrl(^)付け加えると良いよ。

532 :518:04/12/02 19:12:29
(´・ω・`)放置プレイ

533 :デフォルトの名無しさん:04/12/02 19:18:53
>>417に同様の質問が出てるもの

534 :528:04/12/02 19:21:19
とれました。ありがとうございます。

535 :デフォルトの名無しさん:04/12/02 19:25:46
C#というか.NETframework環境でのマルチスレッドについて書かれた書籍はないでしょうか?

536 :デフォルトの名無しさん:04/12/02 20:20:35
>>524-525
なるほど。。。
でもSMTPで使いたいんですよ…。
MSDNのそのページはhttpsを前提にしているけど。

537 :デフォルトの名無しさん:04/12/02 20:33:15
ならこれ使えばいいべさ(´д`)
http://www.mentalis.org/soft/projects/ssocket/

538 :デフォルトの名無しさん:04/12/03 14:18:10
Ethernet実装したいけど、よくわかんないよ〜
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            ∧_∧
          ( ´Д⊂ヽ
          ⊂    ノ
           人  Y
          し (_)
参考になるサイトキボンヌ

539 :デフォルトの名無しさん:04/12/03 14:20:47
WDMデバドラ入門

540 :デフォルトの名無しさん:04/12/03 17:33:52
MDB内にある取得クエリ(リライト却下された)を動かし、
その結果をDataTableで扱わねばならんのですが、最適な方法がわかりません。
とりあえずCOMに参照設定してクエリ動かすまではやりました。
一度AccessインスタンスをSaveAllで落としてからOleDbConnectionで繋ぎにいくべき?
もっといい方法ってあるんでしょうか。

541 : :04/12/03 18:15:57
C#使ったことないんですけどオートメーションサーバー作りたいんですけど、簡単に作れますか?
いいページとかないですか。

542 :デフォルトの名無しさん:04/12/03 18:17:31
OLEオートメーションの意味かな?ならこれとかお勧め。
基本はaximpでCOMコンポーネントからブリッジとなるアセンブリを作って
C#側からリンクし、呼ぶということになる。
http://www.codeproject.com/csharp/mshtml_automation.asp

543 :デフォルトの名無しさん:04/12/03 18:44:15
>>540
dao.Database l_Database = CurrentDb();
とやってもいいし、オートメーションに用がなければ終わらせてから
daoで単独に開いてもいい。

544 :デフォルトの名無しさん:04/12/03 18:46:36
ATL/WTL

545 : :04/12/03 18:54:14
英語が苦手だから間違ってるかもしれないけどクライアントの方じゃなくてサーバーのほうが楽に作れるか知りたいんです。
埋め込みとかまでやる複雑な奴じゃなくて
WSHのVBScriptとかから呼び出して操作できる奴。

<SCRIPT LANGUAGE="VBScript">

Dim app
set app = CreateObject("MyApp")
app.hello()

</SCRIPT>

みたいにVBScriptから生成して実行できるMyAppみたいなやつです。

546 : :04/12/03 18:55:28
>>542
をつけるの忘れてた。
レスどうもありがとうございました。

547 :デフォルトの名無しさん:04/12/03 19:03:03
ATL/WTL

548 :デフォルトの名無しさん:04/12/03 19:09:31
Apple Talk Library / Winsock Type Library

549 :540:04/12/03 19:13:39
>>543
レスありがとうございました。
DAOで取得することにします。

550 :デフォルトの名無しさん:04/12/03 19:15:15
>>545
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/cpref_start.asp
作成そのものはそんなに難しい事でも特別な事でもない。
基本的に普通に作ったアセンブリ(.dll/.exe)にregasm.exeを使えばいい。
CreateObject("名前空間.クラス")などで使えるようになる。

ただ、アセンブリを配置する場所がちと難しい。
厳密名をつけてGACに置くか、クライアントの実行ファイルと同じ位置(WSHなら.vbs/.js「ではなく」、wscript.exe/cscript.exe)に置くか。

551 :デフォルトの名無しさん:04/12/03 19:29:03
STAThread属性について教えて下さい。

過去ログとMSDNを参考になんとなくは理解出来たような気はするのですが、
CLRのスレッドの管理方法にはMアパートメントの概念そのものがないですよね?
[STAThread]は、あくまでCOM側から見た場合、
擬似的にアパートメントを作ってるような感じなのでしょうか?
GUIアプリでスレッドを沢山使う必要があるのですが、
Windowsフォーム以外のオブジェクトもスレッドに結び付けられてしまうのでしょうか


552 :デフォルトの名無しさん:04/12/03 19:29:28
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconexposingnetframeworkcomponentstocom.asp
リンク間違ってるよ……orz

553 : :04/12/03 19:35:13
>>550 >>552
どうも有り難うございます。
そういうことが知りたかったです。
まだC#知らなくてこれから勉強するんだけど。

554 :デフォルトの名無しさん:04/12/04 00:32:54
>>551
擬似的ではなく本当にアパートメントに属させてるわけだが。
CLRが管理するとは言えWindowsから見てもスレッドはスレッドだから。

まあそれはともかく、COMに触れないスレッドにはスレッドアパートメントは関係ないね。

ちなみにスレッドを作った時にThread.ApartmentStateプロパティ(.NET2.0ならSetApartmentStateメソッド)でどっちに属させるか指定できる。
指定しない場合は暗黙的にMainが属するのと同じアパートメントになるんだったかな。

STAスレッドとMTAスレッド間のCOMオブジェクトを使うやりとりでCOMマーシャリングが行われるわけで、
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpcondevelopingmultithreadedwindowsformscontrol.asp
によればWindowsフォームは問答無用でSTAで動いてるようだから、
「Windowsフォームとは関係ない、MTAモデルのCOMを使った」スレッドを大量に作るんでない限り全部STAでやるのが妥当だろうね。

555 :468:04/12/04 00:33:24
tp://www.akadia.com/services/dotnet_arraylist_datagrid.html
このサイトを参考にプログラムを作ったのですが、
cs.Width = colwidth;
を、
cs.Width = 15;
に変えてみたにも関わらず、
datagrid1上(フォーム上)では、列の幅が反映されません。
また、列(column)が複数あるのですが、
列の並び順番が、左から列名の若い巡になってしまいます。
[Zoo] [Price] [Popularity] [enterprise]
という列名を、上記ソースを参考に用意しようとしても
[enter..] [Popu..] [Pri..] [Zoo]
といったようにアルファベティカリになってしまいます。
1 列幅設定の反映しない理由
2 列名をアルファベット順に勝手に並べ替えない方法

に関して、教えていただけませんでしょうか。
Googl、MSDNで調べても
なかなか理解できません。
お願いします。(・人・)

556 :デフォルトの名無しさん:04/12/04 00:34:10
↑すみません、前の番号が残っていました。

557 :デフォルトの名無しさん:04/12/04 01:24:59
また468か!

558 :555:04/12/04 01:43:07
↑はい、重ね重ね申し訳御座いません。

559 :デフォルトの名無しさん:04/12/04 08:28:51
どっちも再現しないと言うかコード通りになったので答えようがないな。
ま、どうせ変なコード書いたんだろ。

560 :デフォルトの名無しさん:04/12/04 15:44:50
質問です。
public struct data
{
public int[] ge; public double x;
public double ev; public string id;
}

data[] gen = new data[8];

method()
{
if(){
gen[4].ge=gen[1].ge; baf=gen[4].ge;
}
if(){
gen[4].ge=gen[2].ge; baf=gen[4].ge;
}

if(baf[a]==1) baf[a]=0;
else baf[a]=1;
}←ここの時点でのデバッグ時の質問です。

簡略化して書いてますがデバッグで値を追ってみたところ、
このようなときbaf[]の配列がgen[1].geやgen[2].geにも反映されてしまっています。
参照型や値型、クラスや構造体など調べてみましたが自分の力では
解決することができませんでした。
おかしなところあればご教示願います。

561 :デフォルトの名無しさん:04/12/04 16:01:36
>>560
読みづらいコード書くね……。

> gen[4].ge=gen[1].ge;
> baf=gen[4].ge;

gen[4].geとgen[1].geが同じオブジェクトを参照するようになる。
bafとgen[4].geが同じオブジェクトを参照するようになる。
よってbafとgen[1].geは同じオブジェクトを参照するようになる。

配列を代入したって配列の参照をコピーするだけで要素はコピーしない、というのは基礎の基礎だぞ。
要素ごとコピーしたいならCloneメソッドとか使う。

562 :561じゃないけど:04/12/04 16:24:47
>>561 に補足

ge & buf は Array クラスのサブクラス int[] のインスタンス
インスタンスなので = 演算子では参照がコピーされる

baf = gen[4].ge; の瞬間、gen[4] と baf は同じ int[] のインスタンスを指す事になってる
だから変更されないようにするには baf = (int[]) gen[4].ge.Clone(); とする

ただし、ge がもし参照を格納する配列だったら、さらに一手間かける必要があるかもしれない
これより先は『浅いコピー』『深いコピー』で調べるよーに

563 :折角なので言葉は正しくいこう:04/12/04 16:38:49
>>562をちょいと修正

> ge & buf は Array クラスのサブクラス int[] のインスタンス
> "クラスの"(=構造体でない)インスタンスなので = 演算子では参照がコピーされる

564 :デフォルトの名無しさん:04/12/04 16:44:57
560です。
読みづらいのは縦長になるのはちょっと迷惑かなと思ったのですが
逆に読みづらくなりましたね。申し訳ありません。
まだプログラム書き始めて間もないのでいろいろ教えられることが多いです。
問題のことですが迅速な対応をしていただいてありがとうございます。
早速調べてみて解決してみたいと思います。
スレ汚し失礼しました。

565 :562:04/12/04 16:47:35
>>563
すまぬ。構造体もインスタンスと呼ぶんでしたな

566 :デフォルトの名無しさん:04/12/04 18:25:15
クラスを複製したいのですが、
stringなどはクラス=参照系だからそのまま代入したらダメですよね。
ということはCloneクラスから全てのプロパティを コンストラクタにわたして〜ってことをしないといけませんが、
クラスの全てのプロパティを設定するためのメソッドorコンストラクタを用意しないといけず、
非常に面倒です。

何か代案はありませんか?

567 :デフォルトの名無しさん:04/12/04 18:33:38
>>566
びみょ〜にひょ〜げんがおかしいが

string はヒープに確保されるから参照型だけど、
変更できないオブジェクトだからコピーしなくても問題ないです

というか Clone クラスなんて無い

568 :567:04/12/04 18:36:03
>>566
まて
もしかしたらインスタンスじゃなくてクラスを複製する話をしているのか?

そうじゃなかったら Clone メソッド内を整備すればいいやん

569 :デフォルトの名無しさん:04/12/04 19:17:09
ちなみに浅いコピーで良いならObject.MemberwiseCloneメソッドでCloneを実装するだけで済む。

570 :デフォルトの名無しさん:04/12/04 22:29:26
>>566が何をしたいのかわからん。

571 :デフォルトの名無しさん:04/12/04 23:02:37
GDNJSにあるもぐらたたきを改造しています。
モグラコントロールをtimerで一定時間ごとに移動させています。(this.leftを操作)
すると、Ctrl+F5で実行させると、コードデザイナに配置したコントロールまで移動してしまいます。

この超霊現象をなんとかしたいんですが、なんとかなりませんか?

572 :デフォルトの名無しさん:04/12/04 23:14:45
>>570
超高級言語しかさわったことのないバカにはわかりません

573 :デフォルトの名無しさん:04/12/04 23:41:29
たしかに >>566 は超高級言語(日本語)を分かってないみたいだ。

574 :デフォルトの名無しさん:04/12/05 00:33:35
ttp://vbdotnet.fc2web.com/csharp/control/DataGrid03.htm

DataTable dt = (DataTable)dataGrid1.DataSource;
指定されたキャストは有効ではありません
って言われてしまいます。なぜなのでしょうか。
DataTable dt = (DataTable)_mydatagrid.DataSource;
MessageBox.Show("行の総数 = "+dt.Rows.Count.ToString());
をしてもだめみたいです。

MessageBox.Show("現在_datagrid1は「" + _mydataset.Tables["_mytable"].Rows.Count.ToString() + "行あります。」");
これをすると、Nullreferenceとなります。

private System.Data.DataSet _mydataset;
private System.Data.DataTable _mytable;
private System.Windows.Forms.DataGrid _mydatagrid;
private System.Windows.Forms.DataGridTableStyle _mydatagridtablestyle;
this._mydatagrid.DataMember = "_mytable_name";
this._mydatagrid.DataSource = this._mydataset;


575 :デフォルトの名無しさん:04/12/05 00:48:06
DataSourceにDataSetを使ってるんだからDataTableにキャストなんかできるわけなかろ。
Tablesの引数もDataTableを格納する変数名とDataTableの名前を混同してるようだし。

サンプルを参考にするのは良いが訳も分からず引き写すのは感心しないな。

576 :574:04/12/05 00:59:21
夜分遅くに的確なアドバイス、ほんとうにありがとうございます。
確かにDataSourceには、_mydatasetも、_mytableも選べましたが、
ttp://ukamen.hp.infoseek.co.jp/Programming1/DataGrid/index.htm
を参考に後者にしていました。
僕はてっきり_mydatagrid.DataSource.DataMemberのような
構造だとばかり思っていました。
(Datamemberの意義がよくわかってないのかも・・・)

Tablesの引数に関してのアドバイス、ありがとうございます。
この引数はヒントで、string name と書かれてありました。
_mytableのnameですから、_mytable_nameにしたら、うまくいきました。

ほんとうにありがとうございました。

577 :574:04/12/05 01:05:22
DataTable dt = ((DataSet)_mydatagrid.DataSource).Tables[_mydatagrid.DataMember];
MessageBox.Show("行の総数 = "+dt.Rows.Count.ToString());

一歩成長したような気がしました。

578 :デフォルトの名無しさん:04/12/05 01:08:42
dt.Rows.Count.ToString()

ToString()はイラネ

579 :デフォルトの名無しさん:04/12/05 01:12:36
>>578
君はstringとintを平気で足せるような型の弱い人か。

580 :デフォルトの名無しさん:04/12/05 01:25:12
ToString()はイラネ

581 :デフォルトの名無しさん:04/12/05 01:28:23
くらだないので一応言っとくと、
stringとintを平気で足せるような型の弱い奴というのは、ToString()を自動で補完してくれるC#のことです。

582 :デフォルトの名無しさん:04/12/05 01:33:24
要するに >>578 = C# ということです。

583 :デフォルトの名無しさん:04/12/05 01:33:28
曖昧さがなければ型がゆるくっていいよ

584 :574:04/12/05 01:49:02
DataTable dt = ((DataSet)_mydatagrid.DataSource).Tables[_mydatagrid.DataMember];
DataRow dr = dt.NewRow();
dr[_column1] = 7;
dr[_column2] = "挿入部";
dr[_column3] = "109";
dt.Rows.InsertAt(dr, 7);

はぁ、なんでInsertAtがAddと同じような振る舞いしか
してくれへんのやろ ○rz...
dt.Rows.Countが10行以上あるのに・・・.ToString();

585 :デフォルトの名無しさん:04/12/05 01:51:23
"dt.Rows.Countが10行以上あるのに・・・".ToString();

ここでもやっぱりToString()はイラネ、だな


586 :デフォルトの名無しさん:04/12/05 01:53:22
>>581
いつ自動で補完するね?

587 :デフォルトの名無しさん:04/12/05 02:02:36
> dt.Rows.Countが10行以上あるのに・・・.ToString();

チョットワロタ

588 :デフォルトの名無しさん:04/12/05 02:36:44
>>586
シラネ。コンパイル時じゃねーの?

589 :デフォルトの名無しさん:04/12/05 07:40:40
ListView の View を View.Details にして、
そのマスに棒グラフ(矩形)を描画したいのですが、
可能でしょうか?

590 :デフォルトの名無しさん:04/12/05 11:52:18
C++で #define MAX 100 っていうのは、C#ではどう書くんですか?

591 :デフォルトの名無しさん:04/12/05 11:56:03
constででも宣言しときな。

592 :590:04/12/05 12:19:38
レスありがとうございます。

やっぱりそうなるんですね。

593 :デフォルトの名無しさん:04/12/05 12:50:18
全てのクラスで共有される定数だけを集めたクラスを作りたいんですが、どうしたらいいんですか?
static constは駄目なんですが・・・。
class A
{
//他のクラスから、A.aaaという形で呼び出したい。かつ変更不可にしたい。
public static const int aaa = 123;
}

594 :デフォルトの名無しさん:04/12/05 12:55:14
constは暗黙的にstaticなのでstaticキーワードはいらない。

595 :394:04/12/05 14:44:56
>>403 遅れましたがありがとうございます

private static int TimerID;
private static uint TimerDiff;
private struct TIMECAPS
{
    public uint wPeriodMin;
    public uint wPeriodMax;
}

private delegate bool TimeProcDelegate(int uID, int uMsg, int dwUser, int dw1, int dw2);
[DllImport("winmm.dll")] private static extern void timeBeginPeriod(uint x);
[DllImport("winmm.dll")] private static extern int timeGetDevCaps(ref TIMECAPS lpTimeCaps, int uSize);
[DllImport("winmm.dll")] private static extern int timeSetEvent(uint uDelay, uint uResolution, TimeProcDelegate lpFunction, int dwUser, int uFlags);

public static void Test()
{
    TIMECAPS tc = new TIMECAPS();
    timeGetDevCaps(ref tc, Marshal.SizeOf(tc));
    TimerDiff = Math.Min(Math.Max(tc.wPeriodMin, 5), tc.wPeriodMax);
    timeBeginPeriod(TimerDiff);
    TimeProcDelegate tpd = new TimeProcDelegate(Timer);
    TimerID = timeSetEvent(5, TimerDiff, tpd, 0, 0); // TIME_ONESHOT = 0 1回だけ呼ぶ
}
private static bool Timer(int uID, int uMsg, int dwUser, int dw1, int dw2)
{
    TimeProcDelegate tpd = new TimeProcDelegate(Timer);
    TimerID = timeSetEvent(5, TimerDiff, tpd, 0, 0); // TIME_ONESHOT = 0 1回だけ呼ぶ
    return true;
}


596 :394:04/12/05 14:45:38
マルチメディアタイマを使いたいんですが
これでTest()を実行すると、
何もしなければ大丈夫なんですが
MouseMoveなど他のイベントが何回か発生したときに

   'System.NullReferenceException' のハンドルされていない例外が 不明なモジュールです。 で発生しました。

   追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。

   現在のソースコードの場所を特定できません。

になります。
タイマは別スレッドで動くらしいですがその使い方がおかしいのでしょうか。


597 :デフォルトの名無しさん:04/12/05 15:31:46
>>595
ttp://www.google.com/search?hl=en&lr=&c2coff=1&q=timesetevent+nullreferenceexception
一番初めに出るな。

TimeProcDelegateがスコープ終了で参照が無くなり、GCの対象になってしまう。
で、Timerが呼ばれる前にGCが発生すると、呼び出すメソッドのポインタへの参照(要はデリゲートだが)が無くなってしまってNullReferenceが発生するわけだ。
フィールドでTimeProcDelegateへの参照を保持しておけば問題ないってことだな。

598 :デフォルトの名無しさん:04/12/05 15:35:29
> 呼び出すメソッドのポインタへの参照
馬から落馬だよ……。
呼び出すメソッドのポインタの間違い。

599 :デフォルトの名無しさん:04/12/05 17:21:27
ノータッチデプロイメントをしようとして、作成したexeファイルをアップ。
エラーがでたので、ためしに、新しいプロジェクトでフォームしかない
プログラムを作成して、アップやっぱりエラーが・・・。どういうことなんでしょう?
エラーは「System.Security.Policy.PolicyException がDomain2で発生」
開発環境は「Visual c# .Net 2002」で、サイトに存在するノータッチデプロイメントの
プログラムはきちんと動作しますので、.Net frameworkのセキュリティはOKだと思うのですが

600 :デフォルトの名無しさん:04/12/05 17:37:28
>>599
ttp://www.atmarkit.co.jp/fdotnet/technology/idnfw11_06/idnfw11_06_03.html

.NET 1.0の場合SP1からInternetZoneに対してアクセス許可をNothingにしているわけだが、その辺はどうか。

601 :デフォルトの名無しさん:04/12/05 17:43:28
C#(.NET)でReal PlayerのactiveXを使って
rmファイルを再生すると、再生時に一瞬
real社のロゴが表示されるのですが、
これを非表示にする方法はないでしょうか?
(ちょっとC#とは関係ないような気もするのですが・・・)
ほかのフリーのプレイヤソフトなどだと、
こういうロゴが表示されないのですが、
もしかしたら、別の方法(RealPlayerのactivex使ってではない)
があるのでしょうか?
もしかして、そっちの別の方法が一般的だったり。。


602 :デフォルトの名無しさん:04/12/05 17:47:14
はい。大丈夫です。一度、セキュリティを最低にていみましたが、
同じエラーでした。

603 :デフォルトの名無しさん:04/12/05 18:47:07
ん〜、試してみたけど、.NET1.0のアセンブリの場合

・デフォルト:PlicyExceptionがDomain2で発生

・.NETウィザード>.NETセキュリティの変更>このコンピュータへの変更を行う>インターネット が信頼無しになってるのを確認

・一段階信頼を上げてウィザード完了 >問題なく起動

と言う事になったけど?

604 :デフォルトの名無しさん:04/12/05 20:43:42
Waveファイルを再生したく思います。。。

PlaySoundを使って、普通に再生する ということは出来るんですが、
リソースに追加されたWaveファイルを再生することが出来ません・・・。

リソースから読み込む方法が良くわからず
PlaySoundの引数に何を渡せばいいのやら・・・

ご教授お願いします

605 :デフォルトの名無しさん:04/12/05 20:46:35
もしやウサギさんですか?

606 :デフォルトの名無しさん:04/12/05 21:19:54
1).rcで記述したリソーススクリプトをリソースコンパイラに食わせ、
 /win32resでくっつけてエイリアス名とSND_RESOURCEフラグで実行する

2)リソースをbyte配列に読み込み、GCHandle(このスレに使い方が書かれてる)でラップして
 ポインタとSND_MEMORYフラグで実行する

607 :デフォルトの名無しさん:04/12/05 21:58:26
>>581
自動で補完しないだろ。

608 :デフォルトの名無しさん:04/12/05 22:12:52
>>607
文字列の加算は全て StringBuilder.Append で行っているんだっけか?

609 :デフォルトの名無しさん:04/12/05 22:15:30
>>607
ハァ?
自分じゃ何も試せないチンカスでつか?

610 :584:04/12/05 22:38:13
放置プレイ・・・(T_T)

611 :デフォルトの名無しさん:04/12/05 22:39:22
取り合えずildasmしろ、話はそれからだ。

明示的に文字列結合として書いてないという問題以外に
ToStringしてないと場合によっては予想外にボクシングしまくることもある。

612 :デフォルトの名無しさん:04/12/05 22:39:41
そもそもあんたがプレイしていた事に気付かなかった。
584で(自己)完結してるじゃん。

613 :デフォルトの名無しさん:04/12/05 22:46:09
>>609
自分の聞きたい話だけを聞いて生きていくならそうすればいい。
ずーっと間違ってろ。おまえに情報をやる義理もないしな。

614 :デフォルトの名無しさん:04/12/05 23:16:40
ToString以外でも、構造体にインタフェイスを実装させるときとか気をつけないといけないよな。
予想外のボクシングで効率落ちたりとか、結果が反映されなかったりとか。

615 :デフォルトの名無しさん:04/12/06 00:16:41
初心者の質問ですみません。
スクリーンキーボードと同じ機能のアプリを作ろうとしています。
「あ」〜「ん」までの50音分のボタンを用意して、「い」のボタンを押すと
テキストボックスに「い」が代入される。というのを作ったのですが、これは
平仮名が代入されるだけで、漢字変換しようと思ってもできませんでした。
自分でキーボードイベントを起こしてやらないといけないんじゃない?
とアドバイスをもらったのですが、具体的な方法が分かりません。
考え方だけでもご存知の方が居ましたら、教えてください。よろしくお願いします。




616 :デフォルトの名無しさん:04/12/06 00:19:32
IMEかんれんをしらべてみよ

617 :584(再度失礼します):04/12/06 00:28:33
DataTable dt = ((DataSet)_mydatagrid.DataSource).Tables[_mydatagrid.DataMember];
DataRow dr = dt.NewRow();
dr[_column1] = 7;
dr[_column2] = "挿入部";
dr[_column3] = "109";
dt.Rows.InsertAt(dr, 7);

と記述して、RowIndex=7 のところに
new Rowを挿入したいのですが、結果として
リストの最終行に「追加」されるだけで、うまく明日してくれません。
「挿入」というからには、当然予め挿入される行番号よりも
多くの行を事前に用意してあります。
ところで、予め列ヘッダをクリックして数度(少なくとも1度)
ソートを実行しておくと、dr[_column1] = 7; という記述により
挿入される値「7」が挿入時に自動ソートされているようです。

私のInsertAtメソッド記述周りの
どういった点が怪しいと思われますか?当人調査継続しておりますが、
お助け請いたく存じます。

618 :584(再度失礼します):04/12/06 00:31:23
>>615
http://www.geocities.co.jp/SiliconValley-Cupertino/5872/String/Ime/
http://nienie.com/~masapico/api_ImmConfigureIME.html
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpintl/html/_win32_ImmConfigureIME.asp
がんばってください。

619 :デフォルトの名無しさん:04/12/06 09:28:38
<<527
調べて無理そうでしたので、聞いてみました。
<<530
やはりそれしかないのですねえ。

620 :デフォルトの名無しさん:04/12/06 09:39:51
>>616さん
>>618さん
早速調べます。
ありがとうございます。

621 :デフォルトの名無しさん:04/12/06 09:40:34
>>617
Rowsコレクションの物理的な並び順はあまり意味を持たないようです。
キーでの並び順はDataViewで操作可能です。DefaultViewをいじってみました。

// データセットとテーブルの作成
_dataSet1 = new DataSet("TestDataSet1");
DataTable dataTable = _dataSet1.Tables.Add("TestDataTable1");
dataTable.Columns.Add("ID", System.Type.GetType("System.Int32"));
dataTable.Columns.Add("NAME", System.Type.GetType("System.String"));
dataTable.Columns.Add("LNAME", System.Type.GetType("System.String"));

// Primary keyを付ける
DataColumn[] pkey = new DataColumn[1];
pkey[0] = dataTable.Columns["ID"];
dataTable.PrimaryKey = pkey;

// デフォルトViewを変更
DataView dataView = dataTable.DefaultView;
dataView.ApplyDefaultSort = true; // Primary keyでソート
//dataView.Sort = "ID desc"; // Primary keyがないか別のキーでソートする場合

// DataGridにバインド
_dataGrid1.SetDataBinding(dataTable, "");
//_dataGrid1.SetDataBinding(_dataSet1, "TestDataTable1"); // こっちの表記だとうまくいかないようだ

622 :617:04/12/06 12:35:39
>>621
サンクスコ 家帰って、復習します。

他にも何か代替策ございませんか?

623 :デフォルトの名無しさん:04/12/06 13:42:26
>>554
横レスで一点補足。COM使ってないつもりでも、例えば STA 指定無しのスレッドで
いきなりProcess.Startで url を開こうとしたりするとエラーになったりする。
>指定しない場合は暗黙的にMainが属するのと同じアパートメントになるんだったかな。
明示的に設定しない場合は MTA だったと思う(1.1)・・
というか実験結果としてはMTA的動作になってた。ドキュメントは読んでないけど。

ライブラリの下のほうでこっそりCOM使われたりすることもあるから注意ってこと。

624 :デフォルトの名無しさん:04/12/06 16:34:28
>>623
確かに属性無しとMTAThread属性だとurlでエラーになりますね。へ〜
少し脱線するけど、Processオブジェが何でSystem.Diagnostics(診断)
の下にあるんだろう。
.netのクラスライブラリの構造って不可思議なところがありますね。
ApplicationオブジェがなぜかSystem.Windows.Formsのしたにあって
はじめの頃ずいぶん探しました。
ライブラリごとに、完全CLI(移植性あり)、OS依存の機能あり、
COM呼んでる、APIじかに使ってる・・
といった区別がキチンとつくようにしてくれると助かるんですけどね。

625 :デフォルトの名無しさん:04/12/06 21:41:14
ここはひどい.NET Frameworkですね

626 :デフォルトの名無しさん:04/12/06 21:47:52
マネージドヒープはプロセス毎にひとつでしょうか、AppDomain毎にひとつでしょうか?

627 :デフォルトの名無しさん:04/12/06 22:41:16
private Word.Application _wApp;
private Word._Document _wDoc;
private Word.Selection _wSel;

上記3インスタンスを規定どおりに開きました。
ここで、ワードを先に閉じられたことを検出するには、
どのインスタンスを確認すればよろしいのでしょうか。

イメージ:
if(_wDoc.Exist==true) _wDoc.SaveAs();
else _wDoc = null;

お願いします。
C#でwordを操作。

628 :デフォルトの名無しさん:04/12/06 22:44:47
お願いします。c言語です。
0〜10までの整数を入力して、数を当てるゲームプログラムを作って下さい。
(ただし99を入力すれば終了)初めに自分の好きな整数を入力してから、
ゲームスタートです。
(実行例)
Input Your favourite Number 540000
3 ← ここから自分で 数を当ててみます。
more Upper
Input Your favourite Number 5

Congratulation!!
ヒントプログラムです。
#include <stdio.h> /* printf を使うために必要 */
#include <stdlib.h> /* 乱数を発生させる srand rand を使うために必要*/
void main( )
{
int myNumber;
printf("Input Your favourite Number"); scanf ("%d",&myNumber);
srand( myNumber );
int result = rand() / 3276 ; /* rand()は 0〜32767 の乱数を生成 */
int inputNumber = 0;

while(1){
scanf ("%d",&inputNumber);
if( inputNumber > result){ printf("more lower \n"); }
else if( inputNumber < result){ printf("more upper \n"); }
if( inputNumber == 99){ break; }
}


629 :デフォルトの名無しさん:04/12/06 22:45:57
モーダルダイアログでShowDialog()で開いたウィンドウを
デスクトップで最前列に表示させ、且つアクティブ状態に
するには、どうすればよいのでしょうか。
form2.Activate();
form2.textbox1.Focus();
をform1でのShowDialog()直後に記述しても
表へ出てきませんでした。
(ちなみに、form1はホットキーで操作しています)

630 :627:04/12/06 22:47:03
ワード文書を閉じるには
_wDoc.Close(ref oTrue, ref oMissing, ref oMissing);
でいけます。参考までに。

631 :デフォルトの名無しさん:04/12/06 22:54:24
>>629
ShowDialog はモーダルダイアログが閉じられるまで帰ってこないので、
ShowDialog の直後に何か書いてもダメです。

form2.VisibleChanged += new EventHandler( this.form2_VisibleChanged );
とかしておいて、
private void form2_VisibleChanged(object sender, System.EventArgs e)
{
 Form form2 = sender as Form;
 form2.Activate();
 form2.textbox1.Focus();
}
とか。
form2 ってのが自分で作ってるクラスなら、form2のクラス側で行うべきって気もする。
textbox1.Focus() なんてのは TabIndex を適切に設定すれば不要になると思うし。

632 :デフォルトの名無しさん:04/12/06 22:55:15
>>631
それだと form2 が消えるときにも実行されるから、if (form2.Visible) とかで囲ったほうが良い。

633 :デフォルトの名無しさん:04/12/06 22:56:22
>>628
more Upperって・・・

634 :629:04/12/06 23:03:41
>>631,632
いけたぜ、ブラザー。
サンクスコ☆

635 :デフォルトの名無しさん:04/12/06 23:25:19
>>626
何を以て一つというの?

636 :デフォルトの名無しさん:04/12/07 00:31:58
 DataGridTextBoxColumnを継承した独自クラス作ったのはいいのですが、
OnPaintをoverrideしてセル単位で文字色を制御することはできました。
 しかし行を選択すると、ベース呼び出しだと文字のForeColorがハイ
ライト表示になり黒だと白表示といったぐあいにRGB値が反転しているは
ずなのですが、overrideするとこの機能が失われてしまいます。
どのように基底クラスで実装しているから調べる方法知らないでしょうか?

637 :デフォルトの名無しさん:04/12/07 00:38:05
>>636
何つーか・・・あたりまえだろ・・・・

638 :デフォルトの名無しさん:04/12/07 00:54:41
>>636
フォーカスの有無に対するフラグを持たせて場合分けで描画する
とかいうことになるんじゃないかと。

639 :デフォルトの名無しさん:04/12/07 01:04:21
string test = "ABCDEF";
while(test != 最後まで){
一文字ずつ取得
}
って処理C#だとどう書けばいいのですか?stream系いろいろあるけど
戻り値全部intだし困った困った。

640 :デフォルトの名無しさん:04/12/07 01:09:50
foreach (char c in test) {...}
StringReaderとかなら返値のintはcharにキャストしてやればいい。

641 :デフォルトの名無しさん:04/12/07 02:49:05
知らなかった……。
foreach (char c in test.ToCharArray()) ってやってたよ orz

642 :デフォルトの名無しさん:04/12/07 03:23:59
>>641
[Serializable]
public sealed class String : IComparable, ICloneable,IConvertible, IEnumerable

643 :デフォルトの名無しさん:04/12/07 10:42:10
接続可能なSQLサーバ一覧を取得しようとして以下を実行するとエラーになります。
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
エラー
インターフェイス SQLDMO.NameList の QueryInterface に失敗しました。
SqlServerのSP3aは、入れてあります。
誰かわかる人教えてください。

644 :デフォルトの名無しさん:04/12/07 10:44:21
<<643 
ソース書き忘れ付け足し

SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers(); 


645 :デフォルトの名無しさん:04/12/07 13:22:26
テキストファイルの特定行だけ読み込ませたいんだが
具体的なサンプルとかある場所ありませんか?

646 :デフォルトの名無しさん:04/12/07 13:30:24
行単位で考える時点で先頭から内容を検証する必要が発生するわけで。
StreamReader.ReadLine()で読み込む行まで空読みすればいいじゃん。

647 :デフォルトの名無しさん:04/12/07 14:13:12
645じゃないんだけど
空読みってどうやんの?


648 :デフォルトの名無しさん:04/12/07 14:17:09
通常の読み込み
string line = streamReader.ReadLine();

空読み
streamReader.ReadLine();

読み込むだけ読み込んで結果は無視するってだけ。

649 :647:04/12/07 14:26:49
あぁ〜なるほどね
なんか単純すぎて思いつかなかったわ
サンクス

650 :デフォルトの名無しさん:04/12/07 15:15:25
>>645
あらかじめインデックス作っとくしかないでしょ。

651 :627:04/12/07 16:11:30
放置しないで、ぐすん。

652 :デフォルトの名無しさん:04/12/07 17:01:18
一般的には、コレクションにget_Itemなどさせ、目指すアイテムが見つからなかった場合nullを返す物だが。

653 :627:04/12/07 17:54:19
>652
らじゃー、家帰ったら、やってみまっする。
サンクスコ。

654 :デフォルトの名無しさん:04/12/07 18:02:10
VBでいうSendkeyはC#にはないのですか?

655 :デフォルトの名無しさん:04/12/07 18:43:31
System.Windows.Forms.SendKeys

656 :デフォルトの名無しさん:04/12/07 20:48:13
ドラッグ&ドロップでコントロールのサイズを変更するには
どのようにすればよいでしょうか?
具体的にはMSNメッセンジャーの、
文字を入力するテキストボックスのサイズを変えるような感じなのですが・・・

657 :デフォルトの名無しさん:04/12/07 20:51:54
>>656
アンカーじゃだめなのか?

658 :656:04/12/07 21:05:37
現在パネルとDockプロパティで、フォームのサイズ変更時の
引き伸ばしなど行っていますが、やはり、ドラッグでコントロールの
サイズを変更できればと思っているのですが(´・ω・`)

659 :デフォルトの名無しさん:04/12/07 21:07:42
本の記述に、本書で使用されているサンプルコードは、
http://www.gotdotnet.com/
あたりで取得できると書いてある割には、
英語のGotDotNetに接続できません。

数週間前に試した時も駄目だったんですが、
もしかして、見えないのは俺だけですか?

『.NETでのテスト駆動開発』に載っているコードが欲しいのですが。

660 :627:04/12/07 21:08:45
this.textbox1.Size.Width = this.Size.Width * alpha;
this.textbox1.Size.Height = this.Size.Height * beta;
this.textbox1.Location.NeverChange;

661 :デフォルトの名無しさん:04/12/07 21:42:59
>>656
手で実装する。
スケルトン:http://up.isp.2ch.net/up/cd118b9b044a.zip
//ただし存在しない仮想メソッドをオーバーライドしてるのが一つあるから削除する。

裏技的に、
ttp://dobon.net/vb/dotnet/form/formwithinform.html
UserControl代わりの、「FormにTextBoxを乗っけたコントロール」で、と言う手法もできないこともない。
ただ縁が盛り上がってしまうからあんまり美しくない。

>>659
なんかいまGetDotNet.com落ちてるね。

662 :656:04/12/07 22:27:00
スケルトン試してみたいと思います。
ありがとうございました(^-^

663 :374ありがとうございました。:04/12/07 23:35:19
皆様のおかげでようやくソフトが完成しました。
皆様には、
1. DataSet関係
2. Word操作関係
3. imm関係
4. HotKey関係
に関して、有益なアドバイスをたくさん頂きました。
特にimmに関しては、レスを無駄に増やすという
失態をしてしまい、大変ご迷惑おかけしました。
ここに改めてお詫び申し上げます。

いつかソフトつくりの壁にあたったときには、
心より宜しくお願い申し上げます。

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

664 :デフォルトの名無しさん:04/12/07 23:38:48
ドッキングできるウィンドウを探していたため
http://www.codeproject.com/cs/miscctrl/magicdocking.asp
ここのDLLを使用してるのですが
ボタンを押してウィンドウを表示させるとして
すでに表示されていればウィンドウにフォーカスを当てる
などの使い方はできるのでしょうか?

英語が出来ないためここで質問させていただきました。
どうぞご教授願います。

665 :デフォルトの名無しさん:04/12/07 23:44:12
ソース見れば分かるんじゃないの?

666 :デフォルトの名無しさん:04/12/07 23:46:54
For the sake of looking for a window which can make a dock
http://...
I take advantage of the Dll presented at that URL,
While displaying a window with a button pushed,
is it possible to focus the window already shown ?

Thank you.

667 :デフォルトの名無しさん:04/12/07 23:48:23
試しに、664を英訳ソフトで英訳してみました。
このソフト、もしよかったら紹介しましょうか?

668 :デフォルトの名無しさん:04/12/07 23:50:19
それがC#製ソース付きなら是非とも。
そうでなきゃいらん。

669 :デフォルトの名無しさん:04/12/07 23:57:27
DataGridで、任意のセルに配色やフォントの置換をするにはどのようにすれば
いいのでしょうか?
 DataTable dt = new DataTable();などと作っていって
dt.Rows[][]で任意のセルを取ってくることはできますが、
オブジェクト型にキャストすればいいのでしょうか?
とってきてForeColor = Color.Redなどとしたいのですが。よろしく
お願いします

670 :664:04/12/08 00:02:38
う〜ん・・・
DLL経由でないとウィンドウが表示されているかがわからない
ということでしょうか?

671 :663:04/12/08 00:18:53
>>669
http://vbdotnet.fc2web.com/csharp/control/DataGridMenu.htm
http://homepage3.nifty.com/dotnetfan/winmenu.html
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=DataGrid%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB&num=50
http://dobon.net/vb/dotnet/datagrid/
http://www.akadia.com/services/dotnet_arraylist_datagrid.html

僕がDataGrid作るときに、参考にしたサイトです。

672 :デフォルトの名無しさん:04/12/08 01:11:55
C言語でいうstructは、C#だとstructなんでしょうか?classでしょうか?

673 :デフォルトの名無しさん:04/12/08 01:32:17
>>672
structだね。一応MSDN読んでclassとの違いとかを確認しといたほうがいいよ。

674 :デフォルトの名無しさん:04/12/08 02:25:58
インスタンス名の指定に変数をつかって、インスタンスを多数作るには
どのようにしたらよいのでしょうか?

以下のような感じでdt_NNNの部分が変化する数百個のインスタンスを作りたいのです。
(dt_NNNの部分の文字列はstringの配列に入っています)

DataTable dt_123 = new DataTable();
DataTable dt_286 = new DataTable();
DataTable dt_NNN = new DataTable();
・・・
よろしくお願いします。。

675 :デフォルトの名無しさん:04/12/08 02:56:52
>>674
・・・それをどうやってつかうきだ?

676 :デフォルトの名無しさん:04/12/08 03:21:17
そうまでして配列を使わない理由を小一時間(ry

677 :デフォルトの名無しさん:04/12/08 04:23:40
興味アル方メールください

業務内容
サーバ・アプリケーションの設計・開発・運用・保守管理などの業務に取り組んでいただきます。
資 格
学歴不問25〜40歳位迄、下記項目中2項目以上の経験者が望ましい。


Java開発経験者(Tomcat等のJakarta Projectを利用した開発)
DB開発運用経験者(Oracle,PL/SQL,Pro*C,MySQL,PostgreSQLを利用した大規模DBの運用・開発経験者)
Linuxサーバの構築・運用経験者(bind,sendmail,qmail,ネットワーク一般、セキュリティ設定等)
システム開発プロジェクトマネージャー経験者


勤務地
東京都渋谷区


678 :デフォルトの名無しさん:04/12/08 07:33:39
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.yahoo.co.jp");
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

MessageBox.Show("CharacterSet=" + resp.CharacterSet);
MessageBox.Show("Contents Encording=" + resp.ContentEncoding);

とかやっても、CharacterSetとかContentEncordingが取得できません。
この後で、StreamReader使って読み込みたいと思っても、Encodeがわからないので、
日本語のページでは困った事になってしまってます。

これらの簡単な解決方法はないのでしょうか?
HeaderのContent-TypeでCharacterSetまで定義している場合は少ないと思うので、
やっぱり行単位で読み込んでいって、Metaタグで判定してから変換とかになるのですかね?

なんかお知恵をください。


679 :デフォルトの名無しさん:04/12/08 07:34:14
>>674

Hashtable hash = new Hashtable();
hash["123"] = new DataTable();
hash["286"] = new DataTable();
hash["NNN"] = new DataTable();

・・・

DataTable tbl = (DataTable)hash["xyz"]

680 :デフォルトの名無しさん:04/12/08 07:42:34
>>678
簡単な解決があったらブラウザが文字化けする事も無くなってしまうわな。

681 :デフォルトの名無しさん:04/12/08 13:34:13
http://www.csharphelp.com/archives2/archive342.html
↑のソースですが、コンパイルは通るのですが、実行すると
インターフェイス SQLDMO.NameList の QueryInterface に失敗しました。 
となってしまいます。
どなたか、動く人がいましたら教えてください。

682 :デフォルトの名無しさん:04/12/08 13:43:31
>>681
ググってみたけど、「最新のサービスパックを充てろ」って書き込みが多い。
漏れは使ったことないからよく分からんけど。


683 :デフォルトの名無しさん:04/12/08 14:49:47
タブコントロール内でPictureBoxを描画する場合、タブコントロールを
Refreshしなければ描画の表示がうまく表示されないのですが、
リフレッシュさせずに描画を表示させるのはどのようにすればよいのでしょうか?

684 :デフォルトの名無しさん:04/12/08 15:10:59
普通はPictureBoxをInvalidateするものだが。

685 :デフォルトの名無しさん:04/12/08 15:35:37
684
それを使って描画しているのですが…
今やってみると、なんだか描画できたりできなかったりです。汗
tabPageのRefreshとUpDateとInvalidateはどう違うのかが
わからないです…

686 :デフォルトの名無しさん:04/12/08 15:38:47
Invalidate ⇒そのうち OnPaint や何かが動いて再描画される。
Update ⇒ Invalidate されていたら、すぐ再描画する。
Refresh ⇒ Invalidateしてすぐ Updateする。

687 :683:04/12/08 15:54:30
686
なるほどです。
タブコントロール上でアニメーションやタイマーイベントで描画する場合、
アップデートで十分という解釈でよろしいのでしょうか

688 :デフォルトの名無しさん:04/12/08 16:01:14
>>687
どう読めばそうなるんだ... orz

689 :683:04/12/08 16:45:47
今までリフレッシュでやっていたんですが、
どうしても画面がちらつくのが…

690 :デフォルトの名無しさん:04/12/08 17:37:39
俺、FlashでアクションスクリプトつかってHPとかつくったことのある人です。
C#をつかってwindows用のアプリケーションを作りたいと思ってアカデミックかってみたはいいが、アクションスクリプトにくらべてクラスとか種類が多くて大変だね。
1冊本つかって勉強してるんだけど、ひたすらサンプル作ったり問題といたりして土台みたいなの身につきますか?
将来的にはwebアプリケーションみたいなのつくたいんよ。

691 :デフォルトの名無しさん:04/12/08 17:42:17
>>690
2冊目を買ってからのほうが良いよ。一冊で補完しきれない部分とか結構あるから。

692 :デフォルトの名無しさん:04/12/08 17:44:19
>>691
アドバイスTHX。
年末にかけてマターリやってみますヽ(´ー`)ノ

693 :デフォルトの名無しさん:04/12/08 19:02:46
>>692
http://www.amazon.co.jp/exec/obidos/ASIN/477411507X/249-8445994-9536323
これがお勧めです。
内容が非常に浅いですが、こんなこともできるんだってな喜びが得られると
思います。
僕は入門時に、この本にかなり勇気付けられました。
(そのころ、僕はC,C++,VC++,ActionScriptを経験していました)

694 :デフォルトの名無しさん:04/12/08 20:00:38
>>689
Paintイベントで描画してないか?

695 :デフォルトの名無しさん:04/12/08 20:45:04
C#でディスプレイに落書きするソフトを作りたいのですが、
どのAPIを使えば出来そうですか?

696 :デフォルトの名無しさん:04/12/08 21:18:32
大きなフォームを作る。
→透過色を適宜設定
→MouseMoveとかで描画

697 :683:04/12/08 22:28:56
Paintで描画して、Invalidateで再描画しております。
他に描画する方法がありますでしょうか?

698 :デフォルトの名無しさん:04/12/08 22:39:22
>>697
ちらつくのはInvalidate()じゃなくてPaintで描画しているせい
バッファリング汁

699 :683:04/12/08 22:48:14
>>698
調べてみました。
http://www.woodensoldier.info/computer/CSharp.htm
こちらのサイトのGDI+のダブルバッファリングということでしょうか?

700 :デフォルトの名無しさん:04/12/08 23:02:25
yes

701 :683:04/12/08 23:11:53
フォームのダブルバッファリングは知っていたのですが、
ピクチャーボックスにもあったんですね。
皆様ありがとうございました。

702 :デフォルトの名無しさん:04/12/08 23:13:03
>>699
その辺を自前でやるのなら、PictureBox じゃなくて単純なPanelを使ったほうが
考慮すべきことが減ってラクですよ。

703 :デフォルトの名無しさん:04/12/08 23:20:04
昔ダウンロードしたファイルを、どこからダウンロードしたか調べられませんか?
元のurlとかの情報はWindowsには保存されてないんでしょうか?

704 :デフォルトの名無しさん:04/12/08 23:35:21
>>703
それがC#とどう関係あるのかは存じませんが、
よくあることですよね。
拡張子を覚えているなら、テンポラリフォルダで
検索することも可能ですが、
Googleで検索したほうがいいですね。

http://www.amazon.co.jp/exec/obidos/ASIN/4621072943/249-8155793-7711568

705 :683:04/12/08 23:42:23
Panelに描画していくということでしょうか?

706 :デフォルトの名無しさん:04/12/09 00:07:22
>>702
「パネルがちらつきます。ダブルバッファリングしてるのにどうしてでしょうか?」
とかいう質問に3000マリネラ

707 :デフォルトの名無しさん:04/12/09 00:35:48
>703
オレは少しでも役に立ったページは必ずお気に入りに登録するが。
code projectなどは記事毎にお気に入りに登録してるしな・・・


708 :デフォルトの名無しさん:04/12/09 00:46:52
HttpRequestクラスを継承したクラスを作成したいのですが、
コンストラクタ定義した時点で、引数があるにもかかわらず、
HttpRequestに引数は0このメソッドはありませんと出てしまう。
何がいけないのでしょうか?
 やりたいことは、Headerの予約されている要素をデータを設定し
た以後でも自由に改変したいのです。元の動作では、そのまま用意されている
プロパティに値突っ込んでやるとランタイムエラーメッセージが出てしまう。
その仕様を無視させたいので継承したいだけです。
 ヘッダー自由に作成できる別クラスがあればそれでもいいのですガ....

709 :デフォルトの名無しさん:04/12/09 01:10:33
クラスを継承させる場合、基底クラスのコンストラクタが自動的に呼ばれる。
実行されるコンストラクタは指定しない場合基底クラスのデフォルトコンストラクタ(引数無しのコンストラクタ)だ。
で、HttpWebRequestはデフォルトコンストラクタ持ってないから。

じゃあ引数付きのコンストラクタはどうかというと、2つあるのはどっちもinternal。
唯一のprotectedコンストラクタはISerializable用の.ctor(SerializationInfo, StreamingContext)。

事実上、好き勝手な継承はできない。


ところで

>データを設定した以後でも自由に改変したいのです。

ってのがよくわからのだが。

710 :デフォルトの名無しさん:04/12/09 01:24:07
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemnethttpwebrequestclassheaderstopic.asp
コノページで言うとこの各メソッドの呼び出しによって開始した要求の後に Headers プロパティを変更すると、 InvalidOperationException がスローされます。
InvalidOperationException が出るタイミングでも要素を書き換えて、送信したいということです。
 ヘッダーを偽装するようなことをしたいって事だと考えてます。


711 :デフォルトの名無しさん:04/12/09 01:32:55
何に対して偽装するんだ……?

712 :デフォルトの名無しさん:04/12/09 02:18:53
Expect Date Host等のヘッダ情報を書き換えれればいいだけなのですが

713 :デフォルトの名無しさん:04/12/09 02:32:16
>>693
おぉ。ありがとうございます。明日書店で拝見させていただきます。
693さんは、かなり経験豊富みたいですねぇ(〃▽〃)

714 :デフォルトの名無しさん:04/12/09 08:56:10
hoge

715 :デフォルトの名無しさん:04/12/09 14:05:27
>>710
開始した後は変更できないよ。だってもう先方にリクエスト送っちゃってるもの。

716 :デフォルトの名無しさん:04/12/09 23:11:20
Explorerを「詳細」にするとListViewみたいな感じになりますよね。
そのタブの部分が右クリックで表示を切り替えられるようになっていますが
C#のListViewでおなじことをするにはどうしたらよいですか?

717 :デフォルトの名無しさん:04/12/09 23:19:46
>>716


671 :663 :04/12/08 00:18:53
>>669
http://vbdotnet.fc2web.com/csharp/control/DataGridMenu.htm
http://homepage3.nifty.com/dotnetfan/winmenu.html
http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=DataGrid%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB&num=50
http://dobon.net/vb/dotnet/datagrid/
http://www.akadia.com/services/dotnet_arraylist_datagrid.html

僕がDataGrid作るときに、参考にしたサイトです。


718 :デフォルトの名無しさん:04/12/10 00:24:00
タブコントロールで、
その中にタブページを表示すると、その背景がフォームの色になってしまいます。

WindowsXPで、ほかのソフトとかWindowsの設定ダイアログとかを見ると、
タブページの背景はグラデーションがかったものになってます。

こうするためにはなにか設定が要るんでしょうか?
EnableVisualStylesとかしてもダメでした。

719 :デフォルトの名無しさん:04/12/10 11:24:55
CGIへデータをPOST(ENCTYPE="multipart/form-data")するシステムを作成しています。
画像ファイルを送りたい場合、バイナリになりますが
一体どのようにコーディングすれば宜しいでしょうか


720 :デフォルトの名無しさん:04/12/10 11:45:02
>>719
このスレで出てる。

721 :719:04/12/10 12:47:00
>>720
481のことでしょうか?ちょっと異なるのですが・・・。

722 :デフォルトの名無しさん:04/12/10 12:50:54
じゃあ何がどう異なるのかを説明しなよ。
>719の記述は曖昧に過ぎる。RFCを読めとしか言いようがないさ。

723 :719:04/12/10 13:12:29
すいません。
CGIへPOST(ENCTYPE="multipart/form-data")するシステムを
作っています。
WebRequestクラスを使って、POSTへデータを投げようと
思うのですが、POST文字列をどのように作成すれば良いのか
分かりません。
ヘッダーも作る必要があるのでしょうか

724 :デフォルトの名無しさん:04/12/10 13:18:45
ヘッダというか、multipart/form-data の書式を満たした mime multipart のデータ全体を作って投げてやる必要があるよ。
RFC嫁⇒ ttp://suika.fam.cx/~wakaba/-temp/wiki/wiki?RFC%202388

725 :デフォルトの名無しさん:04/12/10 13:37:38
実際に何を送ってるのか分からないと言うのなら、ブラウザで送信してみてそれをパケットキャプチャとかしてみる。

726 :デフォルトの名無しさん:04/12/10 18:05:17
DataSet
DataTable

DataGrid
DataGridTableStyle

に関する質問です。

DataGrid.Source が DataSetであって、
DataGrid.Member が DataTableです。

DataGrid上でDataSetをSortすると、
「DataGrid上でMouseUp.HitTestで取得した行番号」
と、
「そのMouseUpされた行の内容が収められているDataTable内での
行番号」
が一致しません。
ソートしなければ、一致します。
ソートすると、HitTestで検出する行番号が
実際のデータではなく「DataGridに表示された表向きの行番号」
となってしまうのです。
これは、いかにして解決すべきでしょうか。
先輩方、先生方、どうぞよろしゅうお願いいたします。

727 :フナ太郎:04/12/10 18:10:29
もうちっとデータグリッド使い勝手よくなんねーかなー

728 :デフォルトの名無しさん:04/12/10 18:16:32
>>727
わしも、そーおもう。
(古ッ!)

729 :デフォルトの名無しさん:04/12/10 18:23:24
だからこそのDataGridView。
……多機能すぎて使い勝手の面であんまりよろしくないな。

730 :デフォルトの名無しさん:04/12/10 18:23:48
C#で、文字列作成してますが
"を文字列として出したい場合、どうしたらいいんですか

731 :デフォルトの名無しさん:04/12/10 18:24:28
こんどVC#を始めようと思うのですが、お勧めの本を教えてください。
ちなみにVBはやったことがあります。
リア厨でお金が無いんでこれ一冊でIDEの使い方からコンソール、GUIまでOK!みたいなヤツをお願いします。

732 :デフォルトの名無しさん:04/12/10 18:36:24
>>730
\"

>>731
ない。本気で

733 :デフォルトの名無しさん:04/12/10 18:38:24
常時接続環境があるなら、ネットにあるので割と十分。

734 :デフォルトの名無しさん:04/12/10 18:42:05
>>732
じゃあ、一番オススメなのはなんですか?

>>733
一応繋ぎ放題ですがAirH"なんですよ。
結構厳しいです。

735 :732:04/12/10 18:51:30
>>734
む〜……
「IDE」「C# の文法」「GUI」のどれがいいか、せめて選んでくれぬか?

736 :デフォルトの名無しさん:04/12/10 18:54:36
>>734
http://www.microsoft.com/japan/info/press/bookimages/02921.jpg
http://www.microsoft.com/japan/info/press/JPN_ViewMsPress.asp?Book_id=842&list_id=1
http://www.microsoft.com/japan/msdn/net/books/ProgWinCsharp/chapter2.asp
http://www.microsoft.com/japan/msdn/net/books/ProgWinCsharp/contents.asp

737 :736:04/12/10 18:57:12
GUIの基礎本が>>736

C丼の文法で最強にわかりやすく値段もリーゾナブリーなのがコレ
http://www.ric.co.jp/book/contents/covers/book407.gif
http://www.ric.co.jp/book/contents/book_407.html

この本の一部はVS2003のリファレンスにもついてた

738 :デフォルトの名無しさん:04/12/10 18:59:11
>一冊でIDEの使い方からコンソール、GUIまでOK!
これなんかどうかな。
http://images-jp.amazon.com/images/P/4844316222.09.LZZZZZZZ.jpg

739 :デフォルトの名無しさん:04/12/10 19:08:35
>>736
ほえーあの無駄に高いやつかぁ・・・

>>737
それよさげですね。

740 :739:04/12/10 19:25:29
http://www.amazon.co.jp/exec/obidos/ASIN/4774114847/qid=1102673740/ref=pd_ka_1/249-4043623-0986741
これはどうなんですか?
一応連載を読んだこともあるんですが、それなりに値段も安くて、順位も上位でよさそうなんですが・・・

741 :デフォルトの名無しさん:04/12/10 19:43:13
C#でVNCみたいなソフトを作ろうとしているのですが、
windowsにマウスクリックイベントを送信する方法ってわかりませんか?

742 :デフォルトの名無しさん:04/12/10 19:49:40
わかりません

743 :739:04/12/10 19:55:10
>>741
SendMessageじゃないか?

744 :739:04/12/10 19:55:42
あーーーーー癖でAPIを答えてしまったorz
吊ってきます・・・

745 :726:04/12/10 19:56:21
・・・放置しないで・・・たのむ・●rz

746 :デフォルトの名無しさん:04/12/10 20:05:50
>>726
モッコス

747 :デフォルトの名無しさん:04/12/10 20:08:40
>>745
http://pc5.2ch.net/test/read.cgi/tech/1065196964/446-453

748 :741:04/12/10 20:18:02
dllたたくしか方法はないのでしょうか?

749 :デフォルトの名無しさん:04/12/10 20:25:30
>>748
うん

750 :741:04/12/10 20:30:08
レスどうもです。残念です。

751 :726:04/12/10 20:43:12
>>747
天使だな、サンクスコー

752 :デフォルトの名無しさん:04/12/10 21:19:16
>>741
P/Invokeでmouse_event。

753 :デフォルトの名無しさん:04/12/10 21:36:20
#か♯どっちなんですか?

754 :デフォルトの名無しさん:04/12/10 21:37:14
# が正解。

755 :デフォルトの名無しさん:04/12/10 21:45:41
>>754

(゚Д゚)ハァ?

C# C# C♯ C丼 C井 C++++
       ↑
     どうかんがえてもこれだろ          

756 :デフォルトの名無しさん:04/12/10 21:58:13


┌ ++
└ ++

757 :726:04/12/10 22:01:36
>>747
THe Problem has been resolved.

758 :デフォルトの名無しさん:04/12/10 22:09:51
外人が考えたんだからASCIIで表現できるに決まってる。
よって「C#」で決まり。

759 :デフォルトの名無しさん:04/12/10 22:19:05
CωはASCIIじゃないですが・・・

760 :デフォルトの名無しさん:04/12/10 22:20:46
ガラパゴス日本的には♯でいいよ

761 :デフォルトの名無しさん:04/12/10 23:34:11
おれだけのC♭

762 :デフォルトの名無しさん:04/12/10 23:36:37
ωって、英語のOSでも表示できる?

763 :デフォルトの名無しさん:04/12/10 23:52:31
C# ではなくて Visual Studio の質問になってしまいます。
スレ違いであれば誘導お願いします。

あるプロジェクト ABC は EXE で、別の DLL XXX を呼びだそうとしています。

ソリューションで ABC のみ存在している状態で XXX のプロジェクトを追加して
参照の追加で、XXX プロジェクトを追加しようとすると
dll のみが追加できるといったメッセージが表示されて参照の追加ができません。

これとは別で同じように EXE から DLL を呼び出すプログラムでは
EXE ファイルのソリューションにその DLL のプロジェクトを追加して
参照の追加で問題なくプロジェクトを追加できています。

このように、参照の追加でプロジェクトを追加できる場合とできない場合
があって困っているのですが、何が原因で参照の追加にプロジェクトを指定
できないのかわかりません。その為に EXE から呼び出して使用したい
DLL のデバッグができずに困っています。

何かお気付きの点がある方は教えてくださいませんでしょうか?
よろしくお願いします。

764 :デフォルトの名無しさん:04/12/11 00:00:06
実はXXXの出力がWindowsアプリケーション/コンソールアプリケーションになってるとか。

765 :デフォルトの名無しさん:04/12/11 00:06:43
それは確認したのですが、クラスライブラリになっています。
どうしてもその XXX だけがプロジェクトを参照の追加で選択できないんです。
何がいけないのかわからない…。誰か助けてください....

766 :デフォルトの名無しさん:04/12/11 00:08:24
>>762
ギリシャ文字だから表示できるにきまってるだろう
数学じゃπとか使うし

767 :デフォルトの名無しさん:04/12/11 00:26:14
>766

最近じゃラーメン吸ってるようにしか見えなくなってきたorz

768 :最凶VB厨房:04/12/11 00:38:42
ワロタ。そのあほな発想めちゃ好きや

769 :デフォルトの名無しさん:04/12/11 00:41:10
>>726

currencyManager経由でとらないと正しい行番号は取れん

ソートされているのはDataviewでありDataTableではない

よってView上での実際の行の位置は変わるが
Datatableの位置は変わらん
その辺を管理してるのがCurrencyManager

MSDNでCurrencymanagerみてみ

770 :デフォルトの名無しさん:04/12/11 00:43:38
>>769
>>747 >>757

771 :デフォルトの名無しさん:04/12/11 01:57:38
マーシャリングとは一体何を行うことなのでしょうか?

スレッドに固有のインターフェイスポインタに対して処理を行うのはわかるのですが、
ヒープなんかはスレッドごとではなくプロセスで持っているので、
スレッドがどう関係するのかわかりません。
ポインタのオフセット値をどうにかしたりするんでしょうか

772 :デフォルトの名無しさん:04/12/11 02:10:35
受け取り相手が分かる形にデータを整形する事。
COM相手でもWin32API相手でもマーシャリング。
さて貴方のマーシャリングのお相手は?

773 :デフォルトの名無しさん:04/12/11 02:18:12
my wife

774 :デフォルトの名無しさん:04/12/11 04:44:42
Visual Studio に関して質問です.

ユーザーコントロールや,自作コンポーネント(同ソリューション内の別のプロジェクトで作成)を
使用したフォームをエディタで表示するとき,
そのコントロール・コンポーネントが忽然と消えてしまうことがあります.
どんなときにこの現象が起きるかはよくわかっていません.
またコントロール・コンポーネントをフォームに追加しなおせばいいだけの話ですが,大変面倒です.

一部のコンポーネントをツールバー(マイ ユーザー コントロール)に自力で追加する際,
bin/debug 内にあった DLL を追加したのですが,これがまずかったのでしょうか…?
MSDN の記述に従ったつもりなのですが.

775 :デフォルトの名無しさん:04/12/11 06:28:55
RichTextBoxのClearメソッドを呼び出すと、以後スクロールが機能しなくなるんだが、
どう対処したら良い?

776 :デフォルトの名無しさん:04/12/11 08:06:51
>>763
[ファイル]→[プロジェクトの追加]でXXXを追加してから

777 :デフォルトの名無しさん:04/12/11 10:00:41
WebRequestクラスとかで非同期処理するときって
IAsyncResultで非同期作るのと、スレッド立ててブロッキングで処理やらせて
終わったらコールバック受け取るのとどっちがいいのだ?
繰り返し処理すればIAsyncResultだったらスレッドプール使い果たしたり
しないのかな?

778 :デフォルトの名無しさん:04/12/11 10:13:05
>>777
どっちでも好きな方、自分にとって扱いやすい方を。
IAsyncResultの利点はWaitHandle.WaitAllで簡単に一括待機できるなんてのもある。

> 繰り返し処理すればIAsyncResultだったらスレッドプール使い果たしたり
> しないのかな?

BeginGetResponseを使った場合20接続(だったはず)までに制限される。

>>775
再現しない。
取りあえず.NET FrameworkのSPでも当てる。

779 :デフォルトの名無しさん:04/12/11 11:55:04
例えば何処かの掲示板で「こんなツール無いかな?」と言うのを見て、
出向先のPC、VS.NET2003Pro、C#でそのツールを作ってアップロードするとします。

このツールを見る人が見たら会社名や作成したソフトのVerなど
何かしら詳細がばれるのかな?
最悪、「会社に通報しました」何て事になるのかな?
AssemblyInfo.csに気をつけてれば大丈夫?

昼休みに暇つぶしに作ったことがあるけど、アップして良いものか分かりませんでした。

780 :デフォルトの名無しさん:04/12/11 12:09:57
>>779
そんな無駄で余計な機能はない。

781 :デフォルトの名無しさん:04/12/11 12:16:24
デバッグモードでコンパイルしたものをうpとかそんなアホなことをしなければ大丈夫w

782 :デフォルトの名無しさん:04/12/11 12:23:31
>>780-781
やはり大丈夫でしたか。
同じような状況が今後あるか分かりませんが、
次からは気にせずアップすることにします。
レスありがとうございました。

783 :デフォルトの名無しさん:04/12/11 12:29:12
このスレから、タイーホ者が出ないことを切に願う

784 :デフォルトの名無しさん:04/12/11 19:01:59
20万以上通りの条件分岐って、if文とswitch文、どっちがいいんでしょうか orz

785 :デフォルトの名無しさん:04/12/11 19:04:18
>>784
三項演算子

786 :デフォルトの名無しさん:04/12/11 19:09:07
>>784
設計そのものを疑え

787 :デフォルトの名無しさん:04/12/11 19:10:38
>>762
HTMLなら、&omega;でωが表示されるようになってる
ちなみに&Omega;とするとΩになる。
フォントさえ(MSのUnicodeフォントとか)あればOSを問わず表示出来るはず。

788 :デフォルトの名無しさん:04/12/11 19:45:00
XML Schemaによる検証を行いたいのですが、XmlValidatingReaderでは
エラーメッセージをこちらで決めることができないように見えます。

/Data/Item/Priceに文字列が入力されていたら、
「価格は数値で入力してください。」といった形のエラーメッセージにしたい。

エラーの発生箇所とエラーの種類が取得できればこちらで加工して
適切なエラーメッセージにできるのですが、良い方法はありますでしょうか?

789 :デフォルトの名無しさん:04/12/11 20:03:43
>>788
メンバ一覧を見ただけだが、ValidationEventHandlerイベントは?

790 :788:04/12/11 21:38:50
>>789
ValidationEventHandlerイベントの引数になっている
ValidationEventArgsがわりと情報をもっているのですが足りません。
ValidationEventArgsのExceptionオブジェクトが
エラーが発生した行番号と位置をもっています。
行番号と位置からどの要素でエラーになったのかを解析するのは面倒です。

791 :デフォルトの名無しさん:04/12/11 21:47:38
C# で SQL Server と接続しようとしています。
C# というよりは ADO.NET の仕様になるかもしれないのですが、
データベースに接続/切断するタイミングをどうするべきか悩んでいます。
アプリケーションは Windows.Forms です。

今はトランザクション発行単位に接続/切断を行なっているのですが、
(コネクションプーリングに有効活用?)
アプリケーションの最初に接続し、接続しっぱなしにしたほうがよいのか、
それとも SQL 発行毎に接続/切断を行なったほうが効率がよいのか…。

アドバイス頂けないでしょうか?
また、このあたり説明が詳しい URL などあれば教えてください。

792 :デフォルトの名無しさん:04/12/12 00:14:19
>>791
クライアントの数によるんじゃね?

793 :デフォルトの名無しさん:04/12/12 00:20:16
toolBarのAppearanceプロパティをFlatにすると、
他のウィンドウの後ろに現在のウィンドウを隠し、表示すると
他ウィンドウの画面が残ります。
(ツールバーの場所のみ)

こんな症状を解消する方法をご教授ください。。。

794 :デフォルトの名無しさん:04/12/12 00:39:24
>>791
どのようなアプリケーションによるかなので、一概に言えん。

795 :791:04/12/12 01:04:04
>>792
クライアントの数は、せいぜい 20台程度です。増えても 50台程度で使用する
アプリケーションです。

>>794
基本的には伝票入力的な1画面単位で入力/登録を行なうアプリケーションです。
1画面(1アプリケーション)で扱うテーブルの数はせいぜい 10 程度です。
(その中でも更新されるテーブルは多くて 3,4)

こんな感じでアドバイスを頂ける事があればうれしいです。
どうかよろしくお願いします。

796 :デフォルトの名無しさん:04/12/12 01:07:34
>>790
それ以上の情報を取得する手段は特になさそうだね。
senderはXmlReader(XmlValidatingReaderかな?)にキャストできるけど、微妙か。
強いて言えばValidationEventArgs.Messageの解析かな。
何らかのクラスに纏めるには考えられる状況が多すぎると考えたのかねぇ。
ttp://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=3eed038a-9470-4412-8c33-a40a7800a3f3
こんな凝ったのでもバリデーションのメッセージはそのままValidatioinEventArgs.Messageを使ってるし。
ちなみに.NET2.0でXmlValidationgReaderはあっさりとObsolete指定……

>>793
.NET1.0SP3@XPスタイル/クラシックスタイル
.NET1.1@Win98SE
で再現しないんだけど。

797 :デフォルトの名無しさん:04/12/12 13:57:47
親フォーム内に表示されている子フォームについてですが、
子フォームを親フォームの端(子フォームが見切れる位置)に移動させた時に、
親フォームにスクロールバーが表示されるのをやめさせるにはどうすればよいですか?
どうかアドバイスよろしくお願いします。

798 :デフォルトの名無しさん:04/12/12 14:53:32
C# でレジストリに値を書き込もうとしているのだが、何故かすべて文字列として
書き込まれてしまふ。
DWORD では書き込めませんか?

799 :デフォルトの名無しさん:04/12/12 14:57:51
↑すまんできた。勘違い。
設定している値が文字列になっていた。0x00000001 にすれば大丈夫。
あたりまえか。

800 :デフォルトの名無しさん:04/12/12 15:04:55
>>791
帳票出しまくる(しょっちょうSQL発行しまくる )、処理が終わったらすぐPGを終了させる、
クライアントが少ない、とかなら常時接続でも良い。
PG立ち上げたまま放置されたり、時々DB見に行くだけのソフトならその都度接続した方が良いかもしれない。
タイマーで3分くらいでコネクション切ってもいいし。
CALの問題もあるかな。

とりあえず、コネクションは簡単にできるように関数化しておいて
その都度接続版と常時接続版と出来るだけ簡単に変えられるようにしておこう。
ま、こんなの当たり前なんだけど。

MS SQL Server 総合スレ2 http://pc5.2ch.net/test/read.cgi/db/1093012583/
の、186〜でも出てるけど、結局はケースバイケースなのよね。

801 :デフォルトの名無しさん:04/12/12 20:16:08
プラグインが使用できるプログラムが作りたいです。
プラグインを作成する方法として、インターフェイスdllを作成しました。
プログラムホストのインターフェイスも作成し、プラグインからプログラムへも
操作ができる状態です。

プラグインとプログラム間において、メソッドの引数としてクラスを使用したい場合、
インターフェイスのdllにそのクラスを書いて、参照を使い、プログラムとプラグイン両方
で使用するか、
それともintやstringで代用できるならば、(記述が長くなるが)そちらを使うか、
どちらがベターなのでしょうか?

アドバイスよろしくお願いします。

802 :デフォルトの名無しさん:04/12/12 20:27:13
>>801
安全生と利便性を計りにかけてケースバイケース
ま、どれだけメソッドを隠蔽しても C# では殆ど無意味だから、俺は前者の方を選ぶが

803 :デフォルトの名無しさん:04/12/12 21:39:17
その方式のプラグインは、
引渡しとかそんなことよりプラグイン自体のアンロードが出来ないのが最大の問題。
お手軽なんだけどね。

804 :デフォルトの名無しさん:04/12/12 21:43:44
>>803
リソース食うもの以外なら、自力でアンロードせんでもかまわんだろ

805 :デフォルトの名無しさん:04/12/12 21:57:34
現在テキストボックス(複数行)に
a
b
c
と表示されているものをListBoxに同じように出すにはどうしたらいいですか?
データはStringでもっています。

806 :デフォルトの名無しさん:04/12/12 21:59:02
>>805
TextBox.Lines プロパティから行単位で拾って、ListBox.Add で追加
もしくは string のデータを Split('\n') で行単位に分割して、同様に追加

807 :デフォルトの名無しさん:04/12/12 22:26:54
>>805
listBox.Items.AddRange(textBox.Lines);

808 :デフォルトの名無しさん:04/12/12 22:28:07
>>802
どうでも良いけど生は危険だろ。

809 :デフォルトの名無しさん:04/12/12 22:29:51
安全日ですから

810 :788:04/12/12 22:41:27
フォームにDataSetを作成し入力項目とDataSetを関連付け、
入力チェックをXML Schemaで一括して行おうとするのが
間違いなのでしょうか?
一般的に、入力チェックはどのように実装しているのでしょうか?



811 :805:04/12/12 22:48:58
多謝
foreach(String str in output.Split('\n'))
{
this.ListBox1.Items.Add(str);
}
this.ListBox1.DataBind();
でいってみたいと思います。ありがとうございました。

812 :801:04/12/12 23:03:43
プログラム全体で共有できないのはめんどくさいですね。
プラグインなのでしかたないですが(;´д⊂

813 :デフォルトの名無しさん:04/12/13 00:52:20
みなさんはSTAの中で作られたアンマネージドのスレッドの管理とかは
どのような主義で管理しているのでしょうか?作って動いてますだとすげー
不安なので100%動作を把握したいのですが、外部ツールとか使って監視
とかしてますか?私はSoftICEで監視してるのですが、まだ不慣れで
時間がかかってしまい何かもう少し簡便な方法ご存知ないでしょうか?

814 :デフォルトの名無しさん:04/12/13 01:05:46
よーわからんが、スレッドの役目を限定するのがいいんじゃねえの?
あちこちのコンポーネントに触らないように境界設けるとか。

815 :デフォルトの名無しさん:04/12/13 01:15:17
で、なぜSTAというキーワードが出てくるかね。

816 :デフォルトの名無しさん:04/12/13 02:17:12
イニシャライズ時のスレッドID と動作時のID比較して違ったら例外はけば?

817 :デフォルトの名無しさん:04/12/13 11:28:07
マネージドとアンマネージド、セーフとアンセーフの違いがよくわからないの
ですが教えてくださいませ。それぞれの違いはわかるつもりなのですが、
両方混ざると頭が混乱してしまいます。
アンマネージドでセーフってありえるのでしょうか?


818 :デフォルトの名無しさん:04/12/13 11:31:58
何のセーフよ。
例えばスレッドセーフかどうかはスレッドの扱いによるもので、マネージド/アンマネージドとは別のレイヤの話になるし。

819 :817:04/12/13 11:40:55
次の例のようにunsafeキーワードを使った場合のアンセーフです。
static unsafe void FastCopy ( byte[] src, byte[] dst, int count )
unsafeキーワードを使った場合のアセンブリってマネージドなのか
アンマネージドなのかっといったことに迷ってるんです。

820 :デフォルトの名無しさん:04/12/13 11:54:12
>>819
unsafeを付けただけでネイティブコードになったりしたら大変だろう。

C#は検証可能なコードも不可能なコードも出力できるようになっている。
デフォルトでは検証可能。unsafeスイッチを付けてビルドした場合には検証不可能。
ちなみに、MC++のコードはすべて検証不可能、VB,NETは全て検証可能。
当たり前だが一応、これらは全てManagedコード。

821 :817:04/12/13 12:26:41
ILで動いてるもの=マネージドって理解でいいんですね。
検証可能なマネージドコード、
検証不可能(アンセーフ)なマネージドコード、
アンマネージドコード(ネイティブコード)という分類でしょうか。

検証不可能な管理されたコードって変な感じだったので
ILでかつ検証可能なものだけをマネージドってよんでるのかと思ってしまってました。

822 :デフォルトの名無しさん:04/12/13 15:22:02
初歩的な質問なんだが、C#はclassごとにファイルをわけられないのですか?
csファイルはコンパイルするとすべて実行ファイルになりますよね。
ためしにクラスで分けてみたのですが、newするclassがないとエラー起きます。

823 :デフォルトの名無しさん:04/12/13 15:25:33
しかも、class名とファイル名が異なっていてもコンパイルできますね・・・orz

824 :デフォルトの名無しさん:04/12/13 15:28:10
csc.exeに.csを一つしか渡してないとかいうオチじゃないだろうな。
そもそもVS.NET/VC#.NETを使ってるのかコマンドラインコンパイルなのかどっちだ。

> しかも、class名とファイル名が異なっていてもコンパイルできますね・・・orz

だから何?
delegeteの宣言一つに.csを一つ作れと言うの?

825 :デフォルトの名無しさん:04/12/13 15:34:40
>>824
コマンドラインでコンパイルしています。
Javaはclass名前とファイル名がおなじでないと動かないじゃないですか。
そのへんはC#はどうなのかなと思ったのです。
勉強不足です。邪魔してすみませんでした。

826 :デフォルトの名無しさん:04/12/13 15:40:48
排他(・A・)イクナイ!!

827 :デフォルトの名無しさん:04/12/13 16:47:09
どうしてもjavaっぽいことをしたいなら、スタートアップクラス以外を /target:module で
コンパイルして、.netmoduleのクラスを使う場合は /addmodule:xxx.netmodule で
参照を設定する必要がある。この場合もクラス名とモジュール名は一致させる必要は
なく1:1の関係でもない。
まあ普通はこんな使い方はしないけどね。

828 :デフォルトの名無しさん:04/12/13 16:57:09
そうなんですか…。クラス一つにファイル一つという考え方でいままで勉強してきたので、変なかんじです。

829 :デフォルトの名無しさん:04/12/13 17:12:12
すいません、OracleとC#のやり取りに関して質問です。
以下のコードで、実行したのですが、うまくいかないのです…。

Provider=MSDAORA.1;
Data Source=サーバー
User ID=ユーザー
Password=パスワード
Persist Security Info=True


//コネクション作成
OleDbConnection myConn = new OleDbConnection(strConn);

//コネクション確立
myConn.Open();

string myInsertQuery = "insert into TESTDB(NO,NAME,MEMO) values(7,'AAA','ああああ');";
OleDbCommand myCommand = new OleDbCommand(myInsertQuery,myConn);
myCommand.ExecuteNonQuery();

myConn.Close();


↑↑↑のようにC#よりOracle接続を行い、Insert文を実行するプログラムを作ったのですが、
コネクション確立までは問題なく実行できるけど、Inset文が実行できません。
Executeのところで、システムエラーになってしまいます。何か間違っていますでしょうか?

C#より、Oracleのテーブルに登録・更新・削除処理を行うには、どうしたらよいのでしょうか?


830 :フナ太郎:04/12/13 18:00:44
なんだかなー。
おまえら、C#関連の本もってんの?
一冊ぐらい買っといたほうがいいぞ。

831 :デフォルトの名無しさん:04/12/13 18:06:10
じゃあ一つその本から得た知識からご高説を賜ろうか。

832 :デフォルトの名無しさん:04/12/13 18:26:52
>>829
出てるエラーの内容をUPしてね、システムエラーじゃわからん。

833 :デフォルトの名無しさん:04/12/13 18:29:43
>>832

'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。

というエラーです。。。

834 :デフォルトの名無しさん:04/12/13 18:31:52
じゃあ次はその例外をキャッチしてOleDbException.Errorsプロパティから詳細情報を取得。

835 :デフォルトの名無しさん:04/12/13 18:34:42
>>829
そのエラーがOleDBプロバイダの出してるエラーならば、
values(7,'AAA','ああああ'); <- ここのコロンが怪しくないか。

836 :デフォルトの名無しさん:04/12/13 18:36:51
>>834

現在のオブジェクトの情報が有効ではありません。というエラーです…。

837 :デフォルトの名無しさん:04/12/13 21:26:09
>>822
C#の場合(というか.NETの場合)一回のコンパイルでできる.exeなり.dllなりを「アセンブリ」と呼ぶ。
アセンブリには、Javaの.classファイルとは違い、複数のクラスを含めることができる。複数のソースファイル
からひとつのアセンブリを作ることもできる。

その代わり、他のアセンブリに含まれるクラスを使うためには、コンパイラのオプションで明示的に指示して
やる必要があるわけ。

838 :837の続き:04/12/13 21:36:25
そうなっている理由は(推測だけど)、C#がIDEを前提にしているからだと思われ。
コンパイルオプションが煩雑になっても問題ないし、.classファイルを検索しなくてすむ分、コンパイルが速くできるから。

誰かツッコミきぼん。

839 :デフォルトの名無しさん:04/12/13 23:39:19
スレッド関係いろいろ勉強してるのですが、
CThreadはMTAでもSTAでも好きなほうで動かせるのですか?
全然判らないというかMFCを使ったことがないです。



840 :デフォルトの名無しさん:04/12/13 23:44:15
なぜそこでMFCが出てくる?

841 :デフォルトの名無しさん:04/12/14 00:05:29
つーか誤爆だと思われ。
じゃなかったらどうしようもないチンカス

842 :デフォルトの名無しさん:04/12/14 00:28:16
お尋ねいたします。
現在、シェアウェアソフトを公開する準備をしております。

1.不正利用防止のための技術が紹介されているサイトを
  ご存知ないでしょうか。ございましたら、ご紹介願います。

2.不正利用防止のため、myAppliの起動時に起動元PCの
  MACアドレスを自動で私のPCに送付させたいのですが、
  この機能を持たせるためには何が必要でしょうか。
  私の推測ですが、「私のPCに送付させたい」とありますが、
  その利用元のメールサービスを経由することは到底不可能だと
  思います。したがって、例えば迂回路のようなものが必要だと
  考えています。
  もちろん、MACアドレスが完全唯一であるものの
  完全に不正利用を防止できるとは考えておりませんが・・。

以上、みなさまのお知恵を拝借したく。

お願い致します。 関

843 :842:04/12/14 00:30:53
追記です。私のプロバイダーは、フォームデコードが利用できます。
http://support.zaq.ne.jp/homepage/cgi/decode.html


844 :デフォルトの名無しさん:04/12/14 00:31:58
2の条件を見たらスパイウェアとしか思えない。
そんなそのほかに何送るか知れたものじゃないアプリなんて使う気がしない。

845 :842:04/12/14 00:32:54
追記です。私のプログラム知識で以下のような経験があります。
imm.dll user32.dll office.dll visualbasic.dll
この程度です。

846 :デフォルトの名無しさん:04/12/14 00:36:20
>>842
ひとまずメール送付は諦めて鯖にHTTPでGETなりPOSTなりさせるようにするのが無難。
正体不明な相手に対するメール送信は今時のFWでは厳しくブロックされる。
MACアドレスの取得はhttp://www.codeguru.com/Cpp/I-N/network/networkinformation/article.php/c5451を参照。

まあ安心汁。どのソフトか分かれば同機能のフリーウェアを作って対抗してやるから。

847 :デフォルトの名無しさん:04/12/14 00:38:14
>>842
まともなファイアウォールを使っている人間ならば、勝手に情報を
送ろうとしたら遮断するし、その情報はすぐに広まってそんなシェア
ウェアは誰も使わなくなると思うのだが。そして激しくスレ違い。

848 :842:04/12/14 00:41:09
>>844
当然、ご利用者様には了承を得ます。
シリアルが流れて、損害を被りたくないのです。

849 :デフォルトの名無しさん:04/12/14 00:49:53
>>842
・課金
・マシン固有のIDの創出
・その管理
をどうするの?

850 :デフォルトの名無しさん:04/12/14 00:51:10
>>848
無理です。あなたにはシェアウェア開発は無理。
おとなしくフリーソフトにしときなさい。
そんな勝手に個人を特定できる情報を送信する危ないソフトなんて
今時誰も使わない。

851 :842:04/12/14 01:03:33
>>846
GetAdaptersInfoですね、どうもありがとうございます。
さっそくやってみます。

>>849
まぁ、一種の警告ですね。

>>850
無理ではない。おとなしくフリーソフトにする根拠がない。
個人を特定できる情報を送信するソフトなんて誰も使わないのだったら、
WinXPはどうなるのでしょうか。重要なのは、そのソフトが
必要かどうか、ただそれだけだと思います。
不要だと判断され入金されなければ、それまでです。特にありません。


852 :デフォルトの名無しさん:04/12/14 01:08:34
>>850
WinXPはアクチベーションの際にはプロダクトIDのチェックをする
だけで、個人情報は「一切送信されません。」

適当な事書くなハゲ。

853 :842:04/12/14 01:12:02
>>852
え、「一切送信されません」ってみなさん、信じてるの?

854 :デフォルトの名無しさん:04/12/14 01:13:34
うは、終わったな842

855 :842:04/12/14 01:14:42
しょぼーん(´・ω・`)

フリーソフトで出直してきます・・。
英語のHP読めなくて、やる気うせました。

856 :デフォルトの名無しさん:04/12/14 01:15:09
XPは他に選択肢がないから我慢するだろうが、842さんのソフトがそこまで価値あるなら同じように我慢するでしょ。

857 :デフォルトの名無しさん:04/12/14 01:17:05
仮にも比較対象は世界一のPC用OSベンダ、MSなんだから積み上げてきた実績も信頼性も違いすぎる

#ここで信頼性に突っ込むような厨房丸出しな事はやめてくれよ

858 :デフォルトの名無しさん:04/12/14 01:17:52
別にスパイウェアだとか言う噂が広まったって、
困るのは>>842なんだから放っておけばいいと思うけど。

それよりそんなに売れるという自信が羨ましい。

859 :842:04/12/14 01:21:19
>>858
少しくらいは売れますね。
少なくとも5年以内に利用対象ユーザが6万人に増えるのが確実で
且つマイナーな分野なので類似したソフトがない。

860 :842:04/12/14 01:22:52
>>858
スパイウェアだと噂が広まる前に
説明書にスパイウェアの旨を明記しますってば。

861 :デフォルトの名無しさん:04/12/14 01:24:41
今晩のお祭り会場はここですか?

862 :デフォルトの名無しさん:04/12/14 01:26:40
どんな分野よ。
ここまで騒いだんだから差し障りない範囲で情報提供汁。
ここで話してまねされるぐらいようなモンでもないでしょ?

863 :デフォルトの名無しさん:04/12/14 01:28:35
>>846あたりで解決して以降の内容はスレ違いじゃない?
適当にスルーしてよ。

864 :デフォルトの名無しさん:04/12/14 01:30:49
>>860
マニュアルに何を記載しようが、
>え、「一切送信されません」ってみなさん、信じてるの?
という発言が致命的なまでに信用を毀損したと思う。

匿名とはいえ、.NETでマイナーな分野で潜在ユーザが近々6万人で
スパイウェアで類似したソフトがないとなると、さすがに特定されるだろ。

865 :842:04/12/14 01:31:13
>>862
ネットワーク型出会い系ソフトです。
ただで参加されても困るので・・・。

866 :デフォルトの名無しさん:04/12/14 01:32:49
そもそもWinXPとMACアドレスを同系列で論じるのがおかしい。

WinXPのプロダクトIDは、ソフトウェアと「セット」になっているものであり、
個人情報は一切含まれてないが、MACアドレスは、仮初めにも他人の
ハードウェア情報で、その気になれば個人を特定できるシロモノ。

人様の情報を盗み読みしておいて勝手に送信するなんて、スパイウェア
そのものでつね( ´,_ゝ`)プッ

867 :デフォルトの名無しさん:04/12/14 01:34:38
>>865
出会い系?DQNかよ。このスレを荒らさないように、他にスレ立てて
そこでアイディアを募集してくれ。スレが汚染されていくのを黙って
見てられない。

868 :842:04/12/14 01:34:41
>>866
え、個人を特定できなければ、意味なくないですか?
ですから、スパイウェアですってば!!

869 :デフォルトの名無しさん:04/12/14 01:37:58
>>868
出会い系なら、鯖側でIDとパスワードで認証できるようにできんの?
それに違反したら不正アクセス防止法で引っ張れるんだし。

それとも鯖を使わないP2P型出会いソフトか?

870 :842:04/12/14 01:38:47
>>869
発想が貧困だよな。

871 :デフォルトの名無しさん:04/12/14 01:40:17
あのぅ、初心者なんですけど、
HTTPでGetやPostをさせるには
C#ではどうしたらいいのでしょうか・・・お願いします。

872 :デフォルトの名無しさん:04/12/14 01:40:41
2コンマイクに「ポストーーーーーーーーーーー!!!」と絶叫する

873 :デフォルトの名無しさん:04/12/14 01:41:08
>>871
HttpWebRequestクラスを使う。

874 :871:04/12/14 01:41:39
>>873
サンクスコ。

875 :デフォルトの名無しさん:04/12/14 01:41:41
>>870
貧困で結構です。下手をすると犯罪の手引きをするようなソフトを
作ろうとしている君よりは遙かにマシだと思っている。

876 :871:04/12/14 01:43:47
見通しがたったので、今宵はこれにて。
どうもありがとうございました。
自分のソフトが少しでも社会の役に立てればと思います。
今後ともよろしくお願いします。

877 :デフォルトの名無しさん:04/12/14 01:44:54
貧乳ですよね

878 :デフォルトの名無しさん:04/12/14 01:45:08
>>876
社会の糞の役にも立たないから。はいはい行った行った。

879 :デフォルトの名無しさん:04/12/14 01:45:58
>>872
迂闊にもワロタ。

880 :デフォルトの名無しさん:04/12/14 01:46:13
> 犯罪の手引きをするようなソフトを作ろうとしている
自己紹介乙。児童買春は犯罪じゃないのかぁ

881 :842:04/12/14 01:47:10
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemnethttpwebrequestclassmethodtopic.asp

882 :デフォルトの名無しさん:04/12/14 01:47:44
>>871
スレの趣旨に沿った発言者の方が肩身狭そうでワラタ

883 :デフォルトの名無しさん:04/12/14 01:48:30
>>871

>>846
> ひとまずメール送付は諦めて鯖にHTTPでGETなりPOSTなりさせるようにするのが無難。

を受けての>>842による自作自演と読んだが

884 :デフォルトの名無しさん:04/12/14 01:48:56
>>880
おいおい、途中で勝手に人の文を切るな。意味が正反対になるだろ。

885 :デフォルトの名無しさん:04/12/14 01:49:38
>>883
俺も>>876を読んでそう思った。

886 :デフォルトの名無しさん:04/12/14 01:55:30
マ板は相変わらずシェアウェア厨には風当たりが強いでつねw

887 :デフォルトの名無しさん:04/12/14 01:56:34
こちらはム板でございます

888 :デフォルトの名無しさん:04/12/14 01:57:32
こんな時間に元気だなお前ら。

889 :デフォルトの名無しさん:04/12/14 01:58:26
マ板とム板の区別もつかない厨がソフトウェアを作ろうなんておこがましい。

890 :デフォルトの名無しさん:04/12/14 10:31:36
たまに他所様の巨大ソリューションを見せていただくと、
クラスライブラリだけじゃなく、そのクラスライブラリのインタフェースも別プロジェクト
になっていたりします。例えば、MSが公開している例外クラスも、
Microsoft.ApplicationBlocks.ExceptionManagementと、
Microsoft.ApplicationBlocks.ExceptionManagement.Interfacesのように別プロジェクトに。

なんか、ネームスペースを分けたいだけにしても、
本体のプロジェクトの下にInterfacesのディレクトリ作って、そこに入れたらよいような
気がしますが、こうするのには何か理由があるのでしょうか?
そんなの常識っていうようなオブジェクト指向的なお作法のようなものとか・・・


891 :デフォルトの名無しさん:04/12/14 11:15:46
>>890
.netのネームスペースは単に名前空間を分割するだけのもので、
javaと違い.classやアセンブリの物理的な配置とは一致しません。
>本体のプロジェクトの下にInterfacesのディレクトリ作って
というのはまったく意味を持ちません。
単一のアセンブリ(dll)の中に異なるネームスペースを混在できます。
ただし特別の理由がない限り一致させますけどね。

さて、インタフェースと実装などでアセンブリを分ける理由ですが、バージョン
管理の問題だと思います。.netのアセンブリは厳密名を付けることが推奨されて
ます。実装部と同じアセンブリにインターフェイスが含まれている場合は
実装の変更のたびに厳密名が変わってしまい他のプログラムへの影響が大きい
わけです。

892 :デフォルトの名無しさん:04/12/14 11:33:34
インターフェースが普遍ならば追加ありえる実装部分を別プロにするのはイタって普通

893 :デフォルトの名無しさん:04/12/14 12:04:59
COM

894 :890:04/12/14 12:06:34
なるほど、良く分かりました。
インターフェースの意義って、クラス定義を明確にして、
バグを減らすこと程度にしか考えてなかった私が厨房でした・・・

どうも有り難うございました。

895 :デフォルトの名無しさん:04/12/14 12:16:27
C#で、グリニッジの時刻を取得する方法はないでしょうか。
福岡大(?)の時計でもいいです。
なるべく、インターネットへの接続環境の差異に依存しない
(少なくともインターネットに接続されているのが前提)
手法をご紹介いただけないでしょうか。

896 :デフォルトの名無しさん:04/12/14 12:17:31
gmttime

897 :デフォルトの名無しさん:04/12/14 12:21:59
1.ウィンドウズ上で時刻を手動再設定あるいは桜時計などで
  +9GMTの時刻取得による自動再設定があった場合でも、
  常に普遍な時刻の取得方法

2.バイオスの画面で再設定できる時計から独立した時計であって、
  PC内に内在する時計

3.マザーボードのボタン電池を抜いても、動作を継続する時計


以上の3のいずれかに関してご存知でしたら、
助言いただきたく、お願いいたします。 桑原

898 :デフォルトの名無しさん:04/12/14 12:26:56
NTPの使い方を聞いてるのか?

899 :デフォルトの名無しさん:04/12/14 12:29:12
.NETにsntpのクラスはなかったと思うからソケットで直接書くことになると思う。
System.Net.Sockets.UdpClientあたりが使えるかも。

900 :時刻厨房(895):04/12/14 12:30:24
インターネット上で日本標準時を提供しているNTPサービス
http://www.jst.mfeed.ad.jp/

ここから、C#で時刻取得する方法あったらウマーです。

901 :デフォルトの名無しさん:04/12/14 12:31:05
>>897
ほれ
http://vector.aol.co.jp/soft/winnt/prog/se281705.html


902 :時刻厨房(895):04/12/14 12:34:31
>>901
天使ハケーーン!!

903 :デフォルトの名無しさん:04/12/14 12:36:10
>>895
>なるべく、インターネットへの接続環境の差異に依存しない
↑これと、↓これが、矛盾したこと言ってるように思えるのは漏れだけ?
>(少なくともインターネットに接続されているのが前提)


904 :時刻厨房(895):04/12/14 12:38:14
>>Private Sub Command1_Click()
>>
>> '' 時間を取得して表示する。
>> Label1.Caption = "時間 : " & Format(GetNtpTime(), "HH:MM:SS")
>>
>> '' 取得できるのは標準時間だけです。
>> '' 時差の補正、日付の取得はしていません。
>> '' 取得した時間には通信遅れによる誤差が含まれます。
>>
>>End Sub

●rz...日付気盆ヌ

905 :デフォルトの名無しさん:04/12/14 12:39:43
お世話になります。
key=test
の、testだけ取り出したい場合、簡単な方法はないでしょうか。
今、=の位置を見て、その位置から文字の最後まで切り出して・・・みたいな
処理をしてるのですが

906 :デフォルトの名無しさん:04/12/14 12:40:03
>>897
>バイオスの画面で再設定できる時計から独立した時計であって、
>PC内に内在する時計

これも何言ってるかワカンネ


907 :時刻厨房(895):04/12/14 12:40:07
>>903
あまり詳しくないので、間違っていたらご指摘ください。
接続環境に依存しないとは、
プロクシやFW(?)を想定しており、
これらが存在していても問題なくGMTを
取得できるか、それとも個別に設定をmyAppli側で
しなければならないのか、ということをお尋ねしたかったのです。

908 :時刻厨房(895):04/12/14 12:40:50
>>905
String.split

909 :デフォルトの名無しさん:04/12/14 12:42:37
>>907
FWでNTP塞がれてたら駄目だな。

910 :デフォルトの名無しさん:04/12/14 12:42:41
>>905
それもあり。
'='でSplitするとか。
正規表現で"[^=]*?(=.*)"とか。

911 :時刻厨房(895):04/12/14 12:43:18
>>906
日時を取得する方法として、
1.PC内部の時計を参照する
2.NTPサービスを利用する
の2通りが考えられますが、
前者はPC利用者に”人為的に”変更可能であり、
後者はインターネットの接続環境により種々の設定が
アプリケーション側に要求されるので大量に頒布するような
アプリには不向きな恐れを危惧しているのです。

912 :デフォルトの名無しさん:04/12/14 12:45:55
>>895
君にはこれがお薦め
http://akizukidenshi.com/catalog/items2.php?p=1&q=K-00559


913 :デフォルトの名無しさん:04/12/14 12:45:57
その2通りしかないよ。

914 :デフォルトの名無しさん:04/12/14 12:48:17
難読化やってる?

915 :時刻厨房(895):04/12/14 12:50:04
>>912
ピックかよ。基盤はZip圧縮できねーし。
少なくともシリアルをUSBにしないと、今の時代・・・。
電源もUSBからウマー

916 :デフォルトの名無しさん:04/12/14 12:50:31
>>911
>前者はPC利用者に”人為的に”変更可能であり、
>後者はインターネットの接続環境により種々の設定が
>アプリケーション側に要求されるので大量に頒布するような
>アプリには不向きな恐れを危惧しているのです。

これも前者と後者で矛盾した要求をしてるんだよなー。
釣りかも試練。


917 :時刻厨房(895):04/12/14 12:54:21
>>916
人為的な変更が聞かない日時の取得方法を知りたいのが目的です。
前者は人為的な変更が可能(もしかしたら、人為的な変更が
できない時計がPC内にあるかも知れないという希望の裏返し)
後者は当然人為的な変更は不可だが、ネットへ接続する
必要があるので、種々の問題がからむ。

ということを申し上げたかったのです。

918 :デフォルトの名無しさん:04/12/14 13:01:44
またおかしいのが湧いてきたな。

919 :時刻厨房(895):04/12/14 13:03:04
842のことか?
またではないな。

920 :デフォルトの名無しさん:04/12/14 13:06:04
>>917
後者でも人為的な変更は可能なんだが

921 :デフォルトの名無しさん:04/12/14 13:07:18
>>842
>2.不正利用防止のため、myAppliの起動時に起動元PCの

>>907
>取得できるか、それとも個別に設定をmyAppli側で

なるほど

922 :時刻厨房(895):04/12/14 13:08:06
>>920
それはあくまでGMT管理組織のことであって、
日本国内の端末利用者は変更することが無理だと思う。

923 :デフォルトの名無しさん:04/12/14 13:09:28
こういう、論理的な思考ができない香具師はプログラムを組むのを
やめた方がいいね。それもシェアウェアにするなんて、あつかましいにも
程がある。

924 :デフォルトの名無しさん:04/12/14 13:12:22
>>922
アフォ?

925 :デフォルトの名無しさん:04/12/14 13:12:56
有料のソフトウェアを作るのに、情報だけは2ch他で只で得ようってか。
なんて調子のいい香具師なんだろう。

926 :デフォルトの名無しさん:04/12/14 13:13:36
>>895
おまえ女だろ。

927 :時刻厨房(895):04/12/14 13:21:29
そんなにきついことゆうなよ。
あなたたちだって、ソフト作ってがっぽり
設けてるんでしょ!!

928 :デフォルトの名無しさん:04/12/14 13:22:22
以降は放置で。

929 :デフォルトの名無しさん:04/12/14 13:23:45
NPTサービスを識別してるわけではないのだから、同じURLでLAN内の別のネットワークにつなげるように偽装することは十分叶ですが。

930 :元842:04/12/14 13:25:29
>>929
サンクスコ!
なんか難しそうだから、やっぱフリーソフトにしておきます。
靭性、いつも挫折の連続だな。
GMTだかNTPだかよーわからへんし。

931 :デフォルトの名無しさん:04/12/14 13:30:27
誤字の使い方からして自演まる分かりなのに

932 :デフォルトの名無しさん:04/12/14 13:32:19
(´-`).。oO(シェアウェアとか不正使用を防止とかいうキーワードを入れずに質問すればいいのに・・・)

933 :デフォルトの名無しさん:04/12/14 13:32:37
C#で関数を作成するときに、VBのOptionalのような機能ってありますでしょうか?


関数名(引数1,Optional 引数2 = 1000)

↑↑↑引数2は省略可能。省略した場合は、1000が代入される。

934 :デフォルトの名無しさん:04/12/14 13:34:13
>>933
ない。
「それがやりたい場合は、引数構成の異なる同名の関数を作れ」という設計思想らしい。

935 :デフォルトの名無しさん:04/12/14 13:34:16
あるよ

936 :デフォルトの名無しさん:04/12/14 13:45:35
enum test
{
key1 = 0
key2 = 1
}
のtype.key1を、int型で関数に渡す場合
(int)type.key1 と書くのが一般的でしょうか

937 :デフォルトの名無しさん:04/12/14 13:47:12
取りあえず代案を示してみたまえ。

938 :デフォルトの名無しさん:04/12/14 13:51:32
enumのbase-typeになんでstringを指定してーよ

939 :936:04/12/14 14:17:28
>>938
??意味が分りません・・。


940 :デフォルトの名無しさん:04/12/14 14:26:33
上のほうでNTPがどうこうという話が出てたので便乗なのですが
NTPパケットをbyte配列で受信したのを32ビットとか16ビットワードとか
切り分けて読み出すスマートな方法ってないでしょうか?
c/c++だと構造体にキャストして一発なのだが、c#じゃどうやるのが一般的
なんでしょう。

941 :940:04/12/14 14:28:33
c/c++でもエンディアンの問題で一発ってわけでもないですね

942 :デフォルトの名無しさん:04/12/14 14:33:30
一般ユーザ向け商用アプリ(パッケージまたはシェアウェア)でC#ってどうよ
リバースエンジニアリング問題とかどうしてる?

943 :デフォルトの名無しさん:04/12/14 14:35:12
>>914
俺は今作ってるフリーソフトが完成したら難読化して公開するつもり。

944 :デフォルトの名無しさん:04/12/14 14:40:04
>>943
難読化ツール何つかってますか?

945 :デフォルトの名無しさん:04/12/14 14:53:58
>>944
フリーソフトの公開ぐらいだったらVS.NET2003に付いてるDotfuscator CEでいいんじゃないかと思ってます。
徹底的にやりたいのであればPEですが、高い・・・。

946 :名無しさん♯:04/12/14 15:21:06
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1103005153/l50

なんかスレ消費早いですね。( ゚д゚)

947 :デフォルトの名無しさん:04/12/14 15:27:48
前回と言い、微妙にスレ立てが早いな。

948 :デフォルトの名無しさん:04/12/14 15:36:56
950で次スレを立てる国の人なんだろう

949 :731:04/12/14 16:56:00
遅くなりましたが、ありがとうございました。
結局>>745を買ったんですがほとんど文法ばっかりでした…
みなさんのアドバイスを聞かなかったのを反省しています。
それで、もうひとつ本を買うとしたらどれがいいですか?
あまり高くなくてGUI中心のをお願いします。
わがままばかりですが、よろしくお願いします。

950 :デフォルトの名無しさん:04/12/14 17:26:12
ちょっとしたオブジェクトの永続化作ろうと思ってるんですが、知恵貸してください。
大量のオブジェクト使う必要あって、メモリに入りきらないので永続化してファイルに落とそうと思っています。
これはプロセス終了後の永続かもかねます。
動作時に最近使用したオブジェクトをリストの上に上げて下方にあるオブジェクトをファイルに落とすという形をとろうとしてますが、このリストの管理とマルチスレッドに関してどうするか考えてます。

generics<class T> ObjProxi{
T  m_t=NULL;
bool m_isObjectValid;
}

interface Permanentable{
void ToBinary();
void FromBinary();
}
class ConcreateObject:Permanentable{

こんな感じでConcreateに対してのアクセスはProxi 通して行いますが、そこでメモリ上になければファイルからの復帰をするつもりです。
Proxiに対してアクセスした際にオブジェクトの有効順位を上げるつもりなんですが、そこでの効率(・∀・)イイ!!やり方考え中です。マルチスレッドアクセスも考慮するつもりです。
(・∀・)イイ!!知恵あればご教授ください。

951 :デフォルトの名無しさん:04/12/14 17:28:00
>>949
C#は文法がわからないとGUIもわからない。

952 :デフォルトの名無しさん:04/12/14 17:58:19
>>947-948
このスレは950以降は無法地帯

953 :デフォルトの名無しさん:04/12/14 22:12:44
っていうか変な人がいるから危機感のため行動したと思われ

954 :斉藤 ◆kvYxWFRquQ :04/12/15 18:57:50
>>953
ちょっと飲み過ぎた。風に当たってくるよ。

955 :デフォルトの名無しさん:04/12/15 23:41:35
C#でOracle9iのデータベースでプログラムしてます。
OracleDataReader使用してSQLでデータ取得するんですが、
DBの文字コードがUTF8でVARCHAR2の値を取得する場合に
GetOracleString+ToStringで取得します。

この時に"〜"(波ダッシュ)をリッチテキストボックスに表示するんですが文字化けします。
調べたら、書き込み時と読み込み時でコードが変わってしまってます。
大丈夫な部品もありました。

これは自分でコード変換する必要があるんでしょうか?



956 :デフォルトの名無しさん:04/12/15 23:54:23
>>955
ttp://support.microsoft.com/default.aspx?scid=kb;ja;286776
ttp://otn.oracle.co.jp/software/tech/java/jdbc/nlsalart/nlsalart.html
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3526&forum=7&3

有名な問題らしい。
Replaceで置換する事にしたって人もいた。

957 :デフォルトの名無しさん:04/12/16 17:07:05
Forms.DataGridのセル内の文字列を選択不可にしたいのですが、

DataGridTextBoxColumn l_DataGridTextBoxColumn = new DataGridTextBoxColumn();
l_DataGridTextBoxColumn.TextBox.Enable = false;
l_DataGridTableStyle.GridColumnStyles.Add(l_DataGridTextBoxColumn);

などとしても変化がありません。
リストボックスやリストビューのサブ項目のように表示のみで選択も編集もさせないように
することはできないのでしょうか?

よろしくお願いします。

958 :デフォルトの名無しさん:04/12/16 20:58:47
, 8.7663E+00, 1.3733E+00,
, 8.7663E+00, 1.3733E+00,
, 8.7663E+00, 1.3733E+00,
, 8.7663E+00, 1.3733E+00,
な感じのデータ続くCSVにデータを書き加えて
, 8.7663E+00, 1.3733E+00,追加内容1
, 8.7663E+00, 1.3733E+00,追加内容2
, 8.7663E+00, 1.3733E+00,追加内容3
, 8.7663E+00, 1.3733E+00,追加内容4
ってするにはどうしたらいいですか?

やっぱり既存ファイルから読み込みながら新しいファイルに1行ずつ
元の内容+追加内容を書いていくのが一番スマートなんでしょうか?

959 :デフォルトの名無しさん:04/12/16 21:01:28
まあ、そうだろうね。
メモリの圧迫も最小限で済むし。

960 :958:04/12/16 21:18:43
csvからdatasetに読み込んであるのでさくっと追加できないかなー
っと淡い期待を胸に書き込んだんですが、素直に新規ファイルに一行ずつちまちま書きます。

ありがとでした。

961 :デフォルトの名無しさん:04/12/17 14:38:06
マルチスレッドで困ってるのですが、あるフォームを作成したスレッドが現在のスレッドかどうか調べる方法はないでしょうか?

962 :デフォルトの名無しさん:04/12/17 14:41:10
取りあえずInvokeなげとくってわけにはいかんか。

Thread.CurrentThread.Nameでユニークな名前を付けるとか。

どう困ってるのか書けば意外な解決が見つかるかも知れない。

963 :デフォルトの名無しさん:04/12/17 14:57:06
非同期処理としてスレッド推奨なのに、肝心要のフォームがスレッド非対応というのはきついよな、
まだWin32時代の再入の方がスッキリしているというか・・・

964 :デフォルトの名無しさん:04/12/17 15:08:17
InvokeRequiredをトレースしまくれ

965 :デフォルトの名無しさん:04/12/17 17:06:04
>>961
delegate 作って InvokeRequired とかで出来ると思うけど、Invokeが必要かどうかを
実行時に判断しなくてはならないような状況で Invoke 使うときははデッドロックしない
ように気をつけてね。

FormA.a() in ThreadA が FormB.b() in ThreadB を invoke して、FormB.b() 呼び出し
実行中に ThreadA に属する何かの delegate を Invoke しようとするとデッドロックするから。

966 :デフォルトの名無しさん:04/12/17 17:52:02
>>961
GetWindowThreadProcessId()呼び出してウィンドウのスレッドIDと現在のスレッドIDを比較するとかは?

967 :デフォルトの名無しさん:04/12/17 18:16:33
Win32APIから呼び出し可能なDLLをC#で作りたいのですが
そのあたりの資料ってどこにありますか?

968 :デフォルトの名無しさん:04/12/17 19:57:23
COMか?
リファレンスでCOMの資料嫁
どうせ徒労におわるだろうけど。


969 :967:04/12/17 20:06:47
public static int add(int a, int b);
をexportできればそれで十分なんですが
とりあえずCOM周りを調べてみます。
ありがとうございます。

970 :デフォルトの名無しさん:04/12/17 23:22:05
ATLだろ


971 :デフォルトの名無しさん:04/12/18 01:12:39
>>965
少なくともwindowsではGUI作成するスレッドが複数というのは間違ってると思うが

972 :デフォルトの名無しさん:04/12/18 14:39:35
>>971
さすがネイティブ開発陣の言うことは違うな

Java だとスレッド関係ないから('A`)

973 :595:04/12/19 09:14:53
>>597 遅くなりましたが解決しました。ありがとうございました。

974 :デフォルトの名無しさん:04/12/20 13:45:42
>>971
UIスレッドを複数持つのは別に間違っていないと思うけど?
使いどころが少ないのは確かだけど。
マルチスレッドSDI Applicationとか、A/Vアプリとかくらいか。

975 :デフォルトの名無しさん:04/12/20 15:40:01
>>974
んーMFCとか.だとマルチスレッドMDIデータ管理上バグりそうなきガス。NETはしらんが、同じような問題でてこないの?調べてないのですまんそ。

976 :デフォルトの名無しさん:04/12/20 16:08:27
Formで生成されるウィンドウのクラス名って変えられるの?

977 :デフォルトの名無しさん:04/12/20 16:26:18
>>975
他のスレッドが作成したコントロールをいじってはいけない、
というのはこのスレではよく出る話だが、
他は特にないような気がする。

>>976
「Form1」とかいうやつなら変えられるが。

978 :デフォルトの名無しさん:04/12/20 16:28:59
>>977
> 「Form1」とかいうやつなら変えられるが。
GetClassName()で取れる方のクラス名です。

979 :デフォルトの名無しさん:04/12/20 16:34:13
無理だと思ふ。

980 :デフォルトの名無しさん:04/12/20 23:01:24
>>978
クラススタイルがCS_GLOBALCLASSで登録してあるクラスを、
Control.CreateParamsをオーバーライドしてCreateParams.ClassNameに渡すと
任意ではないにしろ変更することはできる。
# クラスが作り直され名前にWindowsForms〜とかいった文字が追加される

クラスが作り直された後のウィンドウプロシージャの細かい動作までは知らん。

981 :デフォルトの名無しさん:04/12/21 00:51:15
class KomattaClass
{
  // どこのスレッドから呼び出されるか分らない
  void MethodA()
  {
    while( MethodB が処理を完了するまで )
    {
      // もしも controlHoge のスレッドより MethodA が呼び出されると
      // controlHoge.Invoke は実行されてることがなくなってしまう
      // そういう時はここで delegateHoge() として実行してしまおうと思っています。
    }
  }
  // ワーキングスレッドより無節操に呼び出される
  void MethodB()
  {
    controlHoge.Invoke( delegateHoge ) ;
  }
}

そこで、MethodA のループ中で controlHoge.Invoke( delegateHoge ) が呼び出されていることを知って、
delegateHoge() を直接実行してしまいたいのです。
ここで MethodB がこの MethodA が controlHoge でのスレッド上で実行されているという事を知らないと切り分けできません。
MethodA() の最初で、ただいま controlHoge スレッド上で実行中フラグを建ててみたのです、
しかし殆ど起こらないと思われますが、このフラグを立てている最中に
controlHoge.Invoke( delegateHoge ) ;
されてしまったら問題があります。
なにか良い解決策はないでしょうか?

マルチスレッド逝ってよし、シングルスレッド万歳!!
だんだん嫌になってきた・・・・


982 :デフォルトの名無しさん:04/12/21 01:20:00
まず日本語からやろうや・・・

983 :デフォルトの名無しさん:04/12/21 02:28:25
>>981
適当に lock とか Monitor.Enter とか使って排他すればOKだと思います。ただ、MethodB の方で問答無用で
Invoke しちゃって平気なんですか?後で実行されますよ?
他スレッドからの処理依頼は object [] { delegate, WaitHandle } なんてのに入れて Queue にでも追加、
処理開始要求のみ Invoke で投げる方が良いと思います(処理開始要求がInvokeされたときと、当該スレッドで
MethodAのwhile中実行時にQueue内のリクエストを処理する)。

COMのRPCだとPeekMessageの空呼び出しでちょうどこのケースをOS側が処理してくれるから簡単なんですけどね・・

984 :デフォルトの名無しさん:04/12/21 10:32:44
C#でネットワークボードのMACアドレスを取得する方法
を教えてください。

985 :デフォルトの名無しさん:04/12/21 11:05:10
>>984
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=16782&forum=7&6

986 :デフォルトの名無しさん:04/12/21 11:12:24
>>985
ありです。
参考にしたいと思います。(^∀^ヾ|

987 :デフォルトの名無しさん:04/12/21 13:31:43
using System;
using System.Management;

public class MainClass
{
public static void Main()
{

ManagementClass mClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection mObjCollection = mClass.GetInstances();

foreach(ManagementObject mObject in mObjCollection)
{
if(mObject["IPEnabled"] != null)
{
Console.WriteLine(mObject["MacAddress"]);
}
}
}
}

988 :デフォルトの名無しさん:04/12/21 14:24:50
using ...っていいよね

#inlude<>ってめんどいもん。

C++は*.h必須だし。

989 :デフォルトの名無しさん:04/12/21 18:22:24
ListViewからドラッグしたアイテムを
デスクトップやエクスプローラで表示されているフォルダにドロップした際に、
このドロップしたフォルダのパスを取得したいのですが方法がわかりません。

ご教授ください。

990 :デフォルトの名無しさん:04/12/22 13:13:09
ここってC++マネージ拡張も質問していいのかなぁ?

System::UInt32 uint32 = 100;
System::Object* obj = uint32;

これをやると
'unsigned int' から 'System::Object __gc *' に変換できません。
って出てうまくいきません。なんか方法があるのでしょうか?

C#でいう感じを書きたい
uint a = 100;
object obj = a;


991 :デフォルトの名無しさん:04/12/22 14:05:56
埋め

992 :デフォルトの名無しさん:04/12/22 14:07:39
>>990
__box使え

次からMC++はこっちへ
http://pc5.2ch.net/test/read.cgi/tech/1014486422/

993 :デフォルトの名無しさん:04/12/22 14:44:11
990も超えたし埋め作業に入るか。

994 :デフォルトの名無しさん:04/12/22 16:08:07
梅(゚д゚)ウメー

995 :デフォルトの名無しさん:04/12/22 17:36:29
最後の5レスだけで雑談しよう。
諸侯ら、年末年始のご予定はいかがですかな?

996 :デフォルトの名無しさん:04/12/22 17:38:56
オーストラリア

997 :デフォルトの名無しさん:04/12/22 17:40:29
田舎

998 :デフォルトの名無しさん:04/12/22 17:45:02
引き篭もり

999 :デフォルトの名無しさん:04/12/22 17:53:43
スキー行きたいけど、実家に帰らないと・・・

1000 :デフォルトの名無しさん:04/12/22 17:56:36
空気嫁

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

263 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)