C♯, C#相談室 Part38

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part37
http://pc11.2ch.net/test/read.cgi/tech/1169110545/

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
2デフォルトの名無しさん:2007/03/13(火) 14:25:09
3デフォルトの名無しさん:2007/03/13(火) 14:25:40
4デフォルトの名無しさん:2007/03/13(火) 14:26:12
5デフォルトの名無しさん:2007/03/13(火) 14:26:43
Visual C# 2005 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

MSDNライブラリ
http://msdn.microsoft.com/library/ja/

MSDN2
http://msdn2.microsoft.com/ja-jp/library/default.aspx

pinvoke.net: the interop wiki!
http://pinvoke.net/

テンプレ終了
6デフォルトの名無しさん:2007/03/13(火) 17:25:47
>>1 乙

∩( ´Α`)< 先生、「・・・」ってどうよ?です。
FormsのControl.Scaleメソッドですがいまいち使いどころがわかりません・・・('A`)
FormのScaleを変えたら、そのままなかのコントロールもその比率で縮小されていってほしいんですが、なんか大きさだけ変わって文字の表示とかそのままだったりレイアウトが崩れたりしてます・・・
Childツリーをぶん回して全部のScaleをいじったりするべきということなんでしょうか?
7デフォルトの名無しさん:2007/03/13(火) 20:51:48
C#でのWindowsアプリケーションの終了確認についての質問です。
先日までVisual Studio .NET 2003での開発環境でしたが、昨日やっと2005に移行しました。
2003で作成したC#コードを2005で作り直していたのですが、
http://www.atmarkit.co.jp/fdotnet/dotnettips/299cancelclose/cancelclose.html
こちらに記載されている終了確認コードが2005では使用できませんでした。
解決策をご存知の方、変更箇所を教えていただけないでしょうか。
よろしくお願いします。
8デフォルトの名無しさん:2007/03/13(火) 21:12:47
とりあえずどうできないのか書かないことには。
9デフォルトの名無しさん:2007/03/13(火) 21:13:31
>>7
>Closing イベントは、.NET Framework Version 2.0 では使用されません。代わりに FormClosing イベントを使用します。
10デフォルトの名無しさん:2007/03/13(火) 21:52:15
説明不足すいません、2003ではコード中に
private void Form1Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (MessageBox.Show(
         "終了してもいいですか?", "確認",
        MessageBoxButtons.YesNo, MessageBoxIcon.Question
        ) == DialogResult.No)
    {
        e.Cancel = true;
    }
}
を追加すると終了時に確認メッセージがでますが、2005だとそれが出ずに終了してしまいます。
記載はForm1.csに追加してあります。
コンパイルは警告なしで成功しますが機能しませんでしたが、
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
これをフォームデザイナで生成されたコードに追加したところ、動作が確認できました。
お騒がせしてすいませんでした。
11デフォルトの名無しさん:2007/03/14(水) 12:50:21
static void Test(IList<TestDelegate> methods) {
 foreach (TestDelegate method in methods) {
  new Thread(delegate() {method();}).Start();
 }
}
こういう関数を書いてみたんですが、このままではリストの最後の要素しか呼ばれません。

 foreach (TestDelegate method in methods) {
  TestDelegate m = method;
  new Thread(delegate() {m();}).Start();
 }
としたところちゃんと全部呼ばれるようになりました。
匿名デリゲートからローカル変数にアクセスする場合デリゲートをnewした時点で
ローカル変数が外部にコピーされると思っていたのですが、
それだと上の方法でも動きそうに思うのですが、なぜ動かないのでしょうか。

そもそもmとmethodは同じスコープの変数なので
同じように振舞うべきのような気がするのですが。
12デフォルトの名無しさん:2007/03/14(水) 13:09:15
ILに落として見てみれば?
13デフォルトの名無しさん:2007/03/14(水) 13:11:03
>>11
とりあえず,このあたりの記事を読んでみては?

匿名メソッドの仕組み
ttp://d.hatena.ne.jp/akiramei/20060503/p2

C#: Anonymous methods are not closures
ttp://blogs.msdn.com/abhinaba/archive/2005/10/18/482180.aspx

匿名メソッドは実際には匿名クラスとそのインスタンスメソッドなのが
ポイント
1411:2007/03/14(水) 14:00:44
>>12-13
どうもです。
つまり
・ローカル変数がコピーされる一時領域(匿名クラス)はデリゲートのスコープではなくてローカル変数のスコープと同じスコープをもつ
・methodは実はmと同じスコープではなくてforeach全体のスコープをもつ
ということですね。
個人的な考えとしてはローカル変数のスコープではなくデリゲートが利用されるたびに匿名クラスもnewすれば
このような問題は起こらないと思うんですがなぜそうしなかったんでしょうね。
ローカル変数が不変という前提なら多少パフォーマンスはよくなるかも知れないですが、
それによって起こる問題のほうが大きいような。
15デフォルトの名無しさん:2007/03/14(水) 23:11:02
VisualStudioImageLibraryのicoを
ImageListに追加して、
リストビュー内に表示させたいんですが、
画像が青く縁取りされたように感じになってしまうのですが。。。
どうすればよいのでしょう。色は48bit、解像度は16*16pxに設定しています
bmpなどもきれいに表示されません。
16デフォルトの名無しさん:2007/03/14(水) 23:49:27
ImageListは鬼門
17デフォルトの名無しさん:2007/03/15(木) 00:16:58
>>14 自分でファンクタークラス作ればいいよ(・∀・)!!
18デフォルトの名無しさん:2007/03/15(木) 00:25:03
>>16
どういうことですか?
19デフォルトの名無しさん:2007/03/15(木) 00:30:27
話とズレるが>>11のIList<TestDelegate> methodsは
マルチキャストを使った方がいいんじゃないの
20デフォルトの名無しさん:2007/03/15(木) 14:00:52
質問です。
WebServiceを使ったファイル転送をしています。
ネットワークとしては

@クライアントPC   
AWebServiceを実行するPC
BファイルサーバーPC 

動作としては
@からAのwebserviceを実行して、
@のファイルをAのwevservice以下の一時フォルダにファイルストリームで転送
AはネットワークドライブでBにファイルをコピー。

このファイルのコピーのところでこけます。
CreateDirectryが失敗するので、
ネットワークドライブのアクセス権限の問題だと思うのですが、
WebService自体はなんという名前のアクセス権限なのでしょうか?
ASPNET と NETWORK SERVICE 権限は追加しています。
21デフォルトの名無しさん:2007/03/15(木) 20:45:17
あるコントロールのマウスイベントを他のコントロールにリダイレクトさせようとして
protected override void WndProc(ref Message m)
{
  if (WM_MOUSEFIRST <= m.Msg && m.Msg <= WM_MOUSELAST)
  {
    if (ctrl.IsDisposed)
      return;
    int lp = unchecked((int)m.LParam.ToInt64());
    int x = lp & 0x0000ffff;
    int y = (int)((lp & 0xffff0000) >> 16);
    Point pt = ctrl.PointToClient(this.PointToScreen(new Point(x, y)));
    IntPtr lp2 = new IntPtr(pt.X | (pt.Y << 16));
    SendMessage(ctrl.Handle, (uint)m.Msg, m.WParam, lp2);
  }
  base.WndProc(ref m);
}
と書いたんですが、MouseMove MouseUp MouseDown あたりはリダイレクトされるんですが
Click イベントが来ません。他に処理しなければならないメッセージがあるんでしょうか?
22デフォルトの名無しさん:2007/03/15(木) 23:43:22
動的にコントロールを追加して
btn.Click += btn_Click;
した後に
このコントロールを削除するとき(アプリは終了させません)
btn.Click -= btn_Click;
は必要でしょうか?
23デフォルトの名無しさん:2007/03/15(木) 23:51:04
(゚听)イラネ
24デフォルトの名無しさん:2007/03/16(金) 00:06:04
やっぱりいりませんか。ありがとうございます。
25デフォルトの名無しさん:2007/03/16(金) 00:08:56
C#ってnewしたもん明示的にdeleteする必要あんのか?
26デフォルトの名無しさん:2007/03/16(金) 00:10:01
deleteなんかないだろ…
27デフォルトの名無しさん:2007/03/16(金) 00:11:38
基本的には放置でおkだけどDisposeが必要な場合もあるので注意
28デフォルトの名無しさん:2007/03/16(金) 01:05:36
>>20
関係すると思われるリンクを紹介すると
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_06/idnfw11_06_01.html
29デフォルトの名無しさん:2007/03/16(金) 08:00:06
>>25
GCのアルゴリズムで勝手にdeleteする
特定のイベントでDisposeすればいいと思う。
30デフォルトの名無しさん:2007/03/16(金) 09:00:39
>>25
明示的に破棄しなければならない何らかのリソースを保持しているってことを示すために IDisposable インターフェイスがある。
これを実装してるクラスでは、Dispose() を呼んでそのようなリソースを破棄してやる必要がある。
(実は例外もあるんだけど、それは考える必要なし)

そうでないクラスは、破棄しなくていいっていうか、プログラマは破棄できない。
31デフォルトの名無しさん:2007/03/16(金) 10:14:34
C#のリソース管理って複雑やね。
デストラクタ、ファイナライザ、Dispose()、Dispose(bool disposing)・・・
MSDN読んでもよくわからん。
Dispose()実装するくらいしかしてないんだがやっぱりこれだとまずいんだろうか
32デフォルトの名無しさん:2007/03/16(金) 11:25:26
確実にDisposeを呼ぶ自信があるか
継承をしないとかならDisposeだけでおk
33デフォルトの名無しさん:2007/03/16(金) 11:51:40
Disposeを実装するならファイナライザでDisposeを呼ぶのは必須だろ
アンマネージリソースを持ってないなら問題ないのかもしれないが
34デフォルトの名無しさん:2007/03/16(金) 12:14:54
IDisposableを実装して、using() {} を使えばとりあえずおk
35デフォルトの名無しさん:2007/03/16(金) 13:42:12
>>33
そうだな。そうしないとDispose()を呼び忘れたときや、呼べないとき困る。
常にusingが使えるわけじゃないしな。

リソース破棄のタイミングを気にする必要がない(最悪プロセス終了まで保持しててもいいとか)なら、
ファイナライザで破棄するようにして、あえてIDisposableを実装しないという手もある。
IDisposableを実装すると、Dispose() した後のことも考えにゃならん。
36デフォルトの名無しさん:2007/03/16(金) 15:09:36
Disposeは実装することはあるけどFinalizeは滅多にない。
37デフォルトの名無しさん:2007/03/16(金) 15:51:31
あれ?Finalizeから暗黙的にDispose呼ばれなかったっけ?
38デフォルトの名無しさん:2007/03/16(金) 16:17:28
んなわきゃーない。
そういう基底クラスは有るが。
39デフォルトの名無しさん:2007/03/16(金) 16:39:24
基底クラスのファイナライザは暗黙のうちに呼ばれるけど、Dispose()は呼ばれない。
40デフォルトの名無しさん:2007/03/18(日) 06:17:31
#define SQLITE_STATIC ((void(*)(void *))0)
なんてマクロが安マネージDLLの引数になっとるんですが、
これ何を使えばええんですか?

41デフォルトの名無しさん:2007/03/18(日) 06:26:10
漏れは SQLITE_TRANSIENT しか使わない覚悟で IntPtr にした。

つか多少オーバースペックでもいいならこういうのの方が早いよ:
ttp://adodotnetsqlite.sourceforge.net/
42デフォルトの名無しさん:2007/03/18(日) 06:41:30
メンテ中すな・・・

ところでこの2種類のマクロっていったい何に使ってるんでしょうか。
デストラクタタイプって記述をどこかで見たんですが。
43デフォルトの名無しさん:2007/03/18(日) 06:45:21
>>42
見えるよ?

スレ違いだし、このへん嫁。
ttp://www.sqlite.org/capi3ref.html#sqlite3_bind_text
44デフォルトの名無しさん:2007/03/18(日) 06:50:39
>>43
英語ムリス
スレチガイだった?まぁSqliteの話題ならそうか。
でもタンクス

private const int SQLITE_STATIC = 0x00000000;
private const int SQLITE_TRANSIENT = 0xffffffff;
でヤッテミル。


45デフォルトの名無しさん:2007/03/18(日) 06:55:07
普通は渡したメモリをDLL側が解放するためにコールバックする関数を指定するところを、
・SQLITE_STATIC なら、静的なメモリだから解放いらね
・SQLITE_TRANSIENT なら、コピーとって自分でやってくれ
という指示をするための値。

もうなますおやすも。
46デフォルトの名無しさん:2007/03/18(日) 20:26:40
\r\nと普通の\nって何が違いますか
47デフォルトの名無しさん:2007/03/18(日) 20:31:25
普通の \n ってのが意味分からん
\r は CR
\n は LF
Windows は普通改行には CRLF を使う

C/C++ ではリテラル \n をコンパイル時に環境に合わせて CRLF に置き換えたりすることもある
48デフォルトの名無しさん:2007/03/18(日) 20:47:49
意味分かってるじゃん
49デフォルトの名無しさん:2007/03/18(日) 21:42:31
クライアントにC#のフォームアプリを使うことになりました。
サーバ側はJavaでつくってC#<->JavaをHTTPでやり取りするみたいな感じです。
1つ問題があって、C#を誰も使ったことがないのです。
言語それぞれにコツみたいなのがあると思うのですが、C#やるならこれは常識だろみたいなのを教えていただけませんか。
50デフォルトの名無しさん:2007/03/18(日) 21:44:44
エントリポイントはmainじゃなくてMain
51デフォルトの名無しさん:2007/03/18(日) 21:45:53
取りあえず @IT の C# 入門でも読めばどうかね
52デフォルトの名無しさん:2007/03/18(日) 21:48:19
川俣氏のあれか。
内容は意外といいよね。
人物はちょっとアレだけどw
53デフォルトの名無しさん:2007/03/18(日) 21:55:38
http://msdn2.microsoft.com/ja-jp/library/ms228602(VS.80).aspx
Javaを知ってるならここ
妙に気合の入ったドキュメントだw
54デフォルトの名無しさん:2007/03/18(日) 22:03:21
>>50
thx。基本的に大文字で開始なのがわかった。

>>51
thx。とりあえず有名どこは読んでみてます。
Javaやってたからソースはよめるけど書けっていわれると最初はきびしいかな。
明日オライリーの本を買ってみる。

>>53
thx。いまからよんでみます。
55デフォルトの名無しさん:2007/03/18(日) 22:38:17
>49
get、setのメソッドの代わりにプロパティ。
Equalsじゃなくて==で比較すること。
でも、だいたいはJavaと同じような雰囲気なのですぐ慣れるよ。
56デフォルトの名無しさん:2007/03/18(日) 23:18:47
・記述スタイルはcamelStyleではなくPascalStyle。
・パッケージでなく名前空間。ソースのディレクトリ階層と名前空間は
 一対一に対応している必要は無い。
・値型は自動的にboxingされるので、intに対するIntegerみたいなものは
 無いし要らない。
・あまり使わないかもしれないが、値型として構造体が存在する。
・コレクションをiterateするときにforeachが使える。
・usingを使うことで、try〜finallyによるリソース解放パターンより
 記述が簡易化される。
・Javaと違ってメソッドはデフォルトでバーチャルではない。
 継承とオーバーライドを使ってポリモーフィズムをやりたければ
 明示的にキーワードで指定しなければならない。
・プロパティやインデクサ、演算子オーバーロードが存在する。
 これらを利用することで記述が簡易化される。
・C++の関数ポインタ風のデリゲートが存在する。ただしただの関数ポインタ
 よりはるかに便利。
・組込みのeventメカニズムがある。クライアント側の開発ということなので、
 eventとデリゲートについては学ぶべきでしょう。
57デフォルトの名無しさん:2007/03/18(日) 23:20:14
osekkai
58デフォルトの名無しさん:2007/03/19(月) 00:06:07
>>55
==を使うのか。これは引っかかりそうだ。thx

>>56
大量の情報thx。
Javaにはない便利そうな機能があるなぁ。だが、メンバーには使わせられん。危険すぎるw
演算子のオーバーロードはおもろいなぁ。
C#だと XXX.add(yyy) とかより XXX + yyy のほうが主流なの?
後者のほうが直感的な気もするけど、Javaにないのを使わせるとろくなことにならなそうだからなぁ。
59デフォルトの名無しさん:2007/03/19(月) 00:19:42
演算子のオーバーロードなんて、直観的だと思える場面はむしろ例外的だと思うけどな。
60デフォルトの名無しさん:2007/03/19(月) 00:43:08
==のオーバーロードはstringのようなimmutableなオブジェクトの場合だけの推奨じゃなかった?
61デフォルトの名無しさん:2007/03/19(月) 00:55:00
Javaのストリームはビッグエンディアンだが、C#は普通プロセッサのエンディアン、結果的にリトルエンディアンだから注意。
62デフォルトの名無しさん:2007/03/19(月) 01:29:29
== は基本的な型でしか使わないな。整数及び実数、後は真偽値でのみ

組み込み参照型や値型は全てEqualsを使う。
nullである可能性がある場合はstaticなEquals
==は結局Equals呼んでるんでしょ。?

ちなみにインタプリタパターン使ってC#内で実に言語作るときに
演算子をオーバーロードできるのは凄い便利
パーサ作るときなんかも便利だな。
63デフォルトの名無しさん:2007/03/19(月) 01:44:37
TCPでソケット通信でファイルのやり取りをしているのですが、
NetworkStreamのReadメソッドの戻り値が読み込んだバイト数を正しく返してくれないです

具体的には読み込んでいない部分を読み込んだものとして返してきます。
int readCount = stream.Read(buf, 0, buf.Length);//bufのサイズを100Mにしてみて実験
readCountは10,000とかの値を返すが、先頭の500くらいしか値が入っていない。
(readCountは読み込んだバイト数が返ってくることを期待している。)

通常のFileStreamで同様のことをすると問題ないのですが、NetworkStreamを使うとうまく報告されないようです。
どのようにすれば、期待したとおり、読み込んだバイト数を取得できるのでしょうか?
64デフォルトの名無しさん:2007/03/19(月) 01:49:03
取りあえずバッファ大きすぎ。ネットワーク相手なら 4k-8k がベスト。

んー、そんな経験無いなぁ。
65デフォルトの名無しさん:2007/03/19(月) 01:50:51
>>62
値型でEquals使うとボックス化が発生しちゃわない?
66デフォルトの名無しさん:2007/03/19(月) 02:02:33
しちゃわない。
67デフォルトの名無しさん:2007/03/19(月) 02:14:54
>>66
Equalsってobjectを引数にとるのしかないっしょ。staticのも非staticのも。
ためしにSize.Equalsしてみたらちゃんとボックス化されてたぞ。
==はオーバーライドされてるので当然ボックス化されない。
68デフォルトの名無しさん:2007/03/19(月) 02:18:11
ああすまん。IEquatable.Equalsと勝手に脳内補完しとった。
同名関数たくさんあるときはプロトタイプかいといてちょ
69デフォルトの名無しさん:2007/03/19(月) 02:24:24
>>68
ん?それってIEquatableを実装した値型じゃないと意味ないんじゃ?
>>62に書かれてるのはもっと一般的な話だと思うのだが・・・
70デフォルトの名無しさん:2007/03/19(月) 02:39:28
ああ、あと参照型についても==は命令レベルで比較するのに対して
Equalsはメソッド呼び出しが必要だからやっぱり==を使うべきだと思う
71デフォルトの名無しさん:2007/03/19(月) 05:21:08
==だとGenericsではじかれるのよね・・・
72デフォルトの名無しさん:2007/03/19(月) 05:23:53
うむ。Genericsと演算子相性悪すぎ
73デフォルトの名無しさん:2007/03/19(月) 09:40:48
IComparableを実装させればいいだけじゃん。
74デフォルトの名無しさん:2007/03/19(月) 10:02:24
あふぉか?
75デフォルトの名無しさん:2007/03/19(月) 10:06:00
それでいいなら、EqualityComparer.Defaultでいいだろ
76デフォルトの名無しさん:2007/03/19(月) 10:15:50
ただし当然インターフェイス経由になるので、
最大限のパフォーマンスは得られない。
ジェネリックだとこれくらいが関の山だが。
77デフォルトの名無しさん:2007/03/19(月) 11:13:18
これくらいってどれくらい?
78デフォルトの名無しさん:2007/03/19(月) 11:30:32
最大限の実行パフォーマンスが欲しければアセンブラでも何でも書くといい
79デフォルトの名無しさん:2007/03/19(月) 11:38:46
ジェネリックで書けてかつできるだけパフォーマンスが良いのは
これくらいのやりかたしかないってこと。
80デフォルトの名無しさん:2007/03/19(月) 12:40:11
Windows FormのComboBox用の汎用的なアイテムのジェネリッククラスってやっぱりないのかな?
つまりDataSourceにList指定するとして、そのListのアイテム用の汎用クラスって意味ですが。

まあ自分で作ってもたいした手間じゃないんだけど。
81デフォルトの名無しさん:2007/03/20(火) 04:18:57
treeviewの+マークの位置って取得できますか?

フォームのデザイン時の奴みるとできるっぽいんですが
それらしいプロパティがありません。
とりあえずクリックされてるのが+なのかラインなのかノードなのかが
わかればいいんですが。
82デフォルトの名無しさん:2007/03/20(火) 04:24:15
つ TreeView.HitTest
83デフォルトの名無しさん:2007/03/20(火) 14:08:18
なんでマイクロソフトはframework2.0をwindows updateの重要な更新の方に入れてくれないの?
誰もインストールしてないじゃん。
84デフォルトの名無しさん:2007/03/20(火) 16:20:09
パッケージなら同梱してランタイム判定後ウィザードでインストールさせればいいじゃないか
85デフォルトの名無しさん:2007/03/20(火) 16:46:24
ウィザードも飛ばして問答無用でインストールすることもできた気がする
86デフォルトの名無しさん:2007/03/20(火) 17:24:17
多態性

なんて読むの?
87デフォルトの名無しさん:2007/03/20(火) 17:54:02
たたいせい
88デフォルトの名無しさん:2007/03/20(火) 18:03:06
エンジニアは大抵横文字使って一般人に解らなくするの好きだから ポリモーフィズムと読んでおけば良い
89デフォルトの名無しさん:2007/03/20(火) 18:14:50
別に一般人に解らなくするのが目的じゃないと思うけど・・・
90デフォルトの名無しさん:2007/03/20(火) 18:30:24
ここはどんな糞レスにもマジレスする仕様ですか?
91デフォルトの名無しさん:2007/03/20(火) 20:17:26
多熊性

なんて読むの?
92デフォルトの名無しさん:2007/03/20(火) 20:20:18
たくま しょう
93デフォルトの名無しさん:2007/03/20(火) 20:25:00
>>90
そういう仕様でした。
94デフォルトの名無しさん:2007/03/20(火) 21:23:14
すまん、>>80に書いたようなクラスってライブラリにはやっぱり存在しない?
95デフォルトの名無しさん:2007/03/20(火) 21:32:16
>>94
無いからとっとと自分で作れよ
96デフォルトの名無しさん:2007/03/20(火) 22:00:57
>>94
俺は必要性を感じない。
だからない。
97デフォルトの名無しさん:2007/03/20(火) 22:17:11
必要性は普通感じるでしょ。

っていうか、DisplayMemberだのValueMemberだの、このListBox系のコントロールの
この辺りの仕様はやっつけにしてもちょっと醜過ぎるね。
98デフォルトの名無しさん:2007/03/20(火) 22:40:31
>ListBox1.DisplayMember = "LongName" ;
>ListBox1.ValueMember = "ShortName" ;
必要な人には便利なんじゃないの?

俺は使わないけど。
99デフォルトの名無しさん:2007/03/21(水) 00:55:37
>83
でかいから。
100デフォルトの名無しさん:2007/03/21(水) 01:03:00
>>83
さすがにそれやっちゃうと独禁法でゴネられても仕方がないだろ。
101デフォルトの名無しさん:2007/03/21(水) 01:09:48
Vistaでは3.0が標準搭載ですが
102デフォルトの名無しさん:2007/03/21(水) 01:12:51
(@@)ドッキン
103デフォルトの名無しさん:2007/03/21(水) 01:41:27
>101
2003Serverでは1.1が標準だったが2.0が出てしまった。
Vistaで標準で3.0が入ってようが3.0が普及する頃には新しいバージョンが出てしまうのではと思うよ。
104デフォルトの名無しさん:2007/03/21(水) 01:44:30
(@@)ホゥ
105デフォルトの名無しさん:2007/03/21(水) 05:08:23
プ 3.0って全然使わないWPFが追加されただけじゃん
106デフォルトの名無しさん:2007/03/21(水) 08:06:49
>>105
正確には2.0+WPF+WCF+WFだけどな
リリースされたばかりで判断するのは早い
iPodやDSのリリース直後の評価を見ればわかると思う
107デフォルトの名無しさん:2007/03/21(水) 08:09:23
>>105
TBS+MSねつ造作成アプリに騙された馬鹿がここにもいたか
TBSがSI事業するわけないだろ常識的に考えてw
108デフォルトの名無しさん:2007/03/21(水) 08:19:46
CardSpaceも忘れないで下さい(X)
109デフォルトの名無しさん:2007/03/21(水) 16:12:46
普通のネイティブアプリはバイナリパッチで改造したりするらしいけど、
.netのアプリをクラックする場合はどうやるんすか?

ソースコード丸見えならクラックされ放題な気が。
110デフォルトの名無しさん:2007/03/21(水) 16:15:58
スレ違いだが、中身がオブジェクトコードかCILバイトコードかが違うだけで、やることは同じ。
111デフォルトの名無しさん:2007/03/21(水) 16:44:27
>>110
アセンブリのヘッダにハッシュが含まれてるんじゃないっけ?
整合性とれなくならない?
112デフォルトの名無しさん:2007/03/21(水) 16:49:15
>>109
ヒント:難読化
113デフォルトの名無しさん:2007/03/21(水) 16:53:10
>>111
それも書き換えりゃいいじゃん。

電子署名されてたら別だけど
114デフォルトの名無しさん:2007/03/21(水) 18:24:18
例えば64*64ピクセルのjpg画像3つをリソースに読み込みます。
読み込んだ画像をそれぞれgazou[0]、gazou[1]、gazou[2]のように、配列として扱うにはどうすればよいでしょうか。

また、pictureboxを3つ作って、コードの中でpicturebox[n]のように書いたらエラーになってしまいました。
115デフォルトの名無しさん:2007/03/21(水) 18:29:38
まず、Graphicsを覚えましょう
116デフォルトの名無しさん:2007/03/21(水) 18:42:50
graphicsですか……。線を引いたり三角を出したりするものだと本に書いてあります。画像の配列と関係がここにあるのですね。調べてみます。
117デフォルトの名無しさん:2007/03/21(水) 18:44:18
とりあえずGraphicとかってレベルじゃないっしょ

Bitmap[] gazou = new Bitmap[3];
gazou[0] = HogeResource.HagePic1;
gazou[1] = HogeResource.HagePic2;
gazou[2] = HogeResource.HagePic3;
……

ってことじゃないの
118デフォルトの名無しさん:2007/03/21(水) 18:58:01
おぉ、やってみたらできました!
そうか、ビットマップという型の配列を定義するんですね。int[] num = new int[3]と同じようなもので、整数を定義するのと同じことなのですか。
おかげさまでスッキリしました。ごくごく初歩的なことに付き合わせてしまい、申し訳ありませんでした。
119デフォルトの名無しさん:2007/03/21(水) 19:47:23
int[]とBitmap[]を同一視するのは危険だぞ
…まあその段階ならまだ気にしなくていいか
120デフォルトの名無しさん:2007/03/21(水) 20:22:48
Bitmapがクラスだと覚えておけばいいんじゃね?
121デフォルトの名無しさん:2007/03/21(水) 21:00:46
分かりました。調べておきますね。
122デフォルトの名無しさん:2007/03/21(水) 22:36:24
ふらっとに行ったほうがいい希ガス
123デフォルトの名無しさん:2007/03/22(木) 18:34:16
スレ違いな気もするけど他に見つからなかったので質問させてください。
WinのC#を使ったアプリでQuickTimeSDKを使って動画からフレームを
バイナリで取得し静止画で吐き出させたいのですが(notクリップボードでのコピー)、
QTのコンポーネントを把握して無いためやり方が分かりません。。。(C#も初心者だが、、)
CのGworldみたいなオフスクリーンのバッファとかってあるのでしょうか?
よろしくお願いします。
もしくはコレを解決できるチュートリアル的なページがあればよろしくです。
124デフォルトの名無しさん:2007/03/22(木) 22:09:09
ググレカス
h
t
t
p://developer.apple.com/samplecode/QuickTime/idxQuickTimeforWindows-date.html
125デフォルトの名無しさん:2007/03/23(金) 10:33:53
↑は既に一通り読んでたがこういうのは無い。
コレだろがボケというのがあるなら示して。
126デフォルトの名無しさん:2007/03/23(金) 21:03:34
javaでいうとこのcommons digesterみたいなのってありませんか?
xml <-> DTO を設定ファイルだけでできるような。
127デフォルトの名無しさん:2007/03/23(金) 21:10:48
バインディングならもっと便利な機能がいくらでもあると思うが
128デフォルトの名無しさん:2007/03/24(土) 00:35:56
すいませんが、C#は今現在形で、どんなアプリケーションに使われてますか?
ちょっと具体的に教えてください。
Webでもなさそうだし、バッチ処理でもなさそうだし。
なんに使うのかなあ?
129デフォルトの名無しさん:2007/03/24(土) 00:53:44
>>128
拡張子がaspxのwebは、C#かVB.NETで作られてる。(ほかの言語の可能性もあるけど)
130デフォルトの名無しさん:2007/03/24(土) 00:54:57
Windowsで動かすもので、使っちゃダメって言われなければ、なんにでも使おうとする。
好き嫌いは抜きにしてとりあえず楽だから。
131デフォルトの名無しさん:2007/03/24(土) 00:57:02
アメリカじゃ、いままでVB6で作られてたような分野のソフトは、VB.NETよりC#に移行してるところが多いって記事も見たな。
132デフォルトの名無しさん:2007/03/24(土) 01:03:16
C#をWebのどこに使うの?
133デフォルトの名無しさん:2007/03/24(土) 01:09:42
JavaとかPHPとかと同じようなところに。
134デフォルトの名無しさん:2007/03/24(土) 01:09:43
サーバ側処理全般
135デフォルトの名無しさん:2007/03/24(土) 01:54:19
JavaのサーブレットやBeansのかわりのC#ですか?
PHPは画面系ということですか?
136デフォルトの名無しさん:2007/03/24(土) 01:56:12
もうちょっと勉強してこいよ
137デフォルトの名無しさん:2007/03/24(土) 01:58:34
キーワードはASP.NET
ぐぐれ
138デフォルトの名無しさん:2007/03/24(土) 02:03:36
>>135
ASPは2.0から、PHPみたいにHTMLにコードを埋め込んだりしなくなったな。
PHPもフレークワークとかどんどんでててきてそういう流れだろ?
139デフォルトの名無しさん:2007/03/24(土) 07:43:09
プログラム言語でなく、.NETFrameworkがWebで動作している。
.NETFrameworkはC#・VB・C++等を利用することができる。
ASP.NETはActive Server Pagesでタグで記述を行う。
タグで記述されたWebコントロールの制御を主にC#等が行う。
MVCモデルで記述するとViewがASP・ModelとControlがC#等で作成する。
Contorlはアプリケーションの制御・Modelはデータの読み書き等を行うプログラムである。
.NETFrameworkの制御はイベントドリブンを採用している。
140デフォルトの名無しさん:2007/03/24(土) 08:24:09
日本語でおk
141デフォルトの名無しさん:2007/03/24(土) 09:14:44
>>128
SQLServer2005のマネージャー。
142デフォルトの名無しさん:2007/03/24(土) 10:04:50
string.equals(a,b)
a.equals(b)

両者はまったく同じことですか?
違いはありますか?
143デフォルトの名無しさん:2007/03/24(土) 10:08:12
>>142
aがnullの場合、後者はヌルリ

普通に a==b と書け
144デフォルトの名無しさん:2007/03/24(土) 11:08:56
String.Equals( string str1, string str2 )のほうが速い(はず)
145デフォルトの名無しさん:2007/03/24(土) 11:11:49
何と比べて?
146デフォルトの名無しさん:2007/03/24(土) 11:11:52
常識的に考えて静的メソッドの方が早いわな
147デフォルトの名無しさん:2007/03/24(土) 11:29:48
でも独自メソッドや言語仕様で固めると他の言語使いからは読み辛いよね
148デフォルトの名無しさん:2007/03/24(土) 11:32:51
なにも莫迦にあわせることはない
149デフォルトの名無しさん:2007/03/24(土) 11:40:23
比較演算子使うより比較メソッドを推奨する。
a = nullの場合は String.IsNullOrEmpty(a)で調べる。
150デフォルトの名無しさん:2007/03/24(土) 11:46:02
String.Equals メソッド (String, String)
>objA が objB と同じインスタンスである場合、両方のインスタンスが null 参照の場合、
>または objA.Equals(objB) が true を返す場合は true。それ以外の場合は false。

String.EqualsやStringに対する == も同じ実装なんじゃない?
151デフォルトの名無しさん:2007/03/24(土) 11:54:54
そもそも==とEqualsで性能が変わるってどんだけショボイPCか判定いくつあんだよって感じだな
152デフォルトの名無しさん:2007/03/24(土) 11:59:51
コンパイル時かJITで差がなくなると思うが、
あったとしても全体の1%に満たない部分に労力をつぎ込んでその部分の性能を倍にしましたっていう話。
153デフォルトの名無しさん:2007/03/24(土) 12:06:28
んでそのわずかな差のためにFrameworkのVerが変わる度にコーディング変えるわけ?
「このメソッドは2.0から追加されたから使用」とかコメントに書いてんの?
154デフォルトの名無しさん:2007/03/24(土) 12:07:29
>>153
お前だけ言ってることがずれてるわけだが
155デフォルトの名無しさん:2007/03/24(土) 12:12:29
どっかで==のがはやいって話を読んだ気がするな。
確か.NETのStringはsealedでimmutableでdefault internだろ。
純粋にアドレス比較でいいはず。
156デフォルトの名無しさん:2007/03/24(土) 12:16:53
逆にアドレス比較じゃダメだろ。

String.op_Equality メソッド
>この演算子は、Equals メソッドを使用して実装されます。つまり、比較対照値の参照と値が等しいかどうかがテストされます。
>この演算子は、序数に基づく比較を実行します。
これの実装にはString.Equals メソッド (String, String)が使われている。
関数が二重に呼ばれることになるが、最適化で変わらなくなる。
157デフォルトの名無しさん:2007/03/24(土) 12:21:42
>>155
String.op_Equality は String.Equals(String, String) を呼んでるだけ
おそらくJITコンパイル時にインライン化されるはず

String.Equals(String, String) はまず参照を比較し、参照が異なった場合は
長さを比較し、長さが等しければポインタを使ってデータを比較してる
158デフォルトの名無しさん:2007/03/24(土) 14:16:37
stringの場合は==もstring.Equals()もほぼ同じ。
それ以外のあらゆる型では型名.Equals()は==より比較にならないほど遅い。ちょっと前にも出てたけど。
他の型と統一性を考えたらstring.Equals()を使うメリットなんてないはず。
159デフォルトの名無しさん:2007/03/24(土) 14:27:23
早い遅い以前に意味が違う(違いうる)と思うんですけど。。。
160デフォルトの名無しさん:2007/03/24(土) 14:27:34
型安全じゃない
161デフォルトの名無しさん:2007/03/24(土) 14:30:10
なんでSizeやPointはEquals(Size)やEquals(Point)を実装してないんだろ
推奨してるはずなのに
162デフォルトの名無しさん:2007/03/24(土) 14:31:37
推奨なんかしてたか?
163デフォルトの名無しさん:2007/03/24(土) 14:31:47
値型だから。
レベル低すぎるな
164デフォルトの名無しさん:2007/03/24(土) 14:38:00
>>159
例えば?
165デフォルトの名無しさん:2007/03/24(土) 14:43:08
>>164
系統だてて説明するの面倒だなあ。。

その辺のことは、例えばアスキーから出てるartonって人の書いたc#の入門書に
詳しく書いてあるから興味があったら読むといいと思う。
166デフォルトの名無しさん:2007/03/24(土) 14:43:15
>>163
DateTime.Equals(DateTime)は実装されてるぞ。
167デフォルトの名無しさん:2007/03/24(土) 14:49:36
比較のパターン
1.値型 比較演算子 値型
2.オブジェクト.メソッド(変数1, 変数2)
1の場合は値の比較なら問題なし
2の場合は指し示すポインタ・型などを比較する場合に用いる
168デフォルトの名無しさん:2007/03/24(土) 14:54:43
構造体の場合は IEquatable<T> を実装することが推奨だしょ
169デフォルトの名無しさん:2007/03/24(土) 15:05:21
結局>>161と同じだけど,System.Drawingの構造体は実装してないみたいだな
なんでなんだろ
170デフォルトの名無しさん:2007/03/24(土) 16:00:21
>>139
サンクス。
よくわかったよ。
171デフォルトの名無しさん:2007/03/24(土) 17:15:20
>>161
値型はまた別では。参照比較しても意味がないし。
172デフォルトの名無しさん:2007/03/24(土) 17:27:14
>>171
ボクシングが発生しないだろ
173デフォルトの名無しさん:2007/03/24(土) 18:00:06
なるほど。整理すると
値型は迷わず == を使った方がよい。
参照型は == が値の比較になってるか参照の比較になってるかは実装しだいだから用心深く使い分ける。
Stringなどわかり切ってるものは == でいい。

IDEで値型と参照型を色違いで区別してくれるくらいのサポートは欲しいの。
174デフォルトの名無しさん:2007/03/24(土) 18:21:09
オブジェクト指向の場合は継承でis-aの関係なども
考慮して比較しないといけない場合もある
例:TextBox is Control
175デフォルトの名無しさん:2007/03/24(土) 18:30:35
文字列の場合、case sensitiveじゃない比較したいときにはよく使うな>Equals()
176デフォルトの名無しさん:2007/03/24(土) 18:39:57
>>173
ツールのオプション
ユーザーの種類(値の型)で型の色は変えられる。変数の方は無理っぽい。
それからなぜかこの項目でVBのソースの色は変わらなかった。
177デフォルトの名無しさん:2007/03/24(土) 19:00:20
>>171
『プログラミング .NET Framework 第2版』「6.1.3 値型によるEqualsの実装」に詳しく書いてあるね。

値型でEqualsをオーバーライドしない場合は
System.ValueType.Equalsでオーバーライドされた実装が呼ばれるんだけど、
この実装ってのがリフレクション経由でフィールドを全部列挙して、
それぞれに対してEqualsを呼び出すというものだったりする。

比較のたびに毎回リフレクション使われるとパフォーマンス的に悲惨なので、
値型は可能ならEqualsをオーバーライドすべしといわれていると。
178デフォルトの名無しさん:2007/03/24(土) 19:02:31
番組始まったけど、亀田のボクシング発生するまであと何分くらいかかるんだ。
179デフォルトの名無しさん:2007/03/24(土) 19:29:08
>>178
オレはチャンネル変えた。
180デフォルトの名無しさん:2007/03/24(土) 21:14:17
>>177
単純な型だとリフレクション使わずバイナリで比較されるはずだが
181デフォルトの名無しさん:2007/03/24(土) 21:57:43
>>180
System.ValueType.Equals見てみたけど確かにそうっぽいね。

てことはデフォのSystem.ValueType.Equals(object obj)の欠点は
内部でRuntimeTypeを生成するコストがかかることと
引数がobject型のせいで確実にboxingが発生することぐらいか。
182デフォルトの名無しさん:2007/03/24(土) 22:03:15
まあそんなとこでボクシングしてたら値型使う意味が無くなるけどな
183デフォルトの名無しさん:2007/03/24(土) 22:04:17
ひょっとしてどこでボクシングが発生してるか全部調査してコード書いてるの?
184デフォルトの名無しさん:2007/03/24(土) 22:05:28
おおう!ボックス化と亀をかけてたのか。いまごろ気付いたwww
185181:2007/03/24(土) 22:06:35
もうちょっと調べてみたけどRuntimeTypeは1回作ったら使い回しみたいね。
Equalsの回数に比例してRuntimeTypeのインスタンスが作られるわけじゃないと。
というわけでRuntimeType生成コストも気にしなくていいみたい。
186デフォルトの名無しさん:2007/03/24(土) 22:12:50
>>183
調査してって、意識してればどこでボックス化が発生するかくらいわかるべ。
それにかなりコストが高いから意識するだけの価値はある。
187デフォルトの名無しさん:2007/03/24(土) 22:17:31
レス予想

「パフォーマンス気にするならC++使えばいいじゃんバカジャネーノ」
188デフォルトの名無しさん:2007/03/24(土) 22:23:25
パフォーマンスを気にしてるから値型なんて使うわけで
ボクシングが発生しないように配慮するのは当然
189デフォルトの名無しさん:2007/03/24(土) 23:56:32
いつも思うのだがパフォーマンスが気になるヤツが何を作ってるのかも言って欲しい。
どうせ
190デフォルトの名無しさん:2007/03/25(日) 00:00:53
>>189
多くの場合、あんまり神経質になる必要がないのも事実だけど、
パフォーマンス関係のことってちょっとルーズにやる過ぎると
とんでも遅くなって使い物にならなくなることも普通にある。
191デフォルトの名無しさん:2007/03/25(日) 06:34:39
ジェネリック型の型パラメータの制約として「デリゲートである」ことを指定できないのかな?
192デフォルトの名無しさん:2007/03/25(日) 08:39:58
>>191
何がしたい?
デリゲートを指定できるメリットが分からないけど。

public class Test<T>
{
 public delegate void func(T x);
}

みたいなこと?
193デフォルトの名無しさん:2007/03/25(日) 09:23:13
できないよ
194デフォルトの名無しさん:2007/03/25(日) 09:43:09
>>192
組み込みのイベントが使いづらい(自由にinvokeや連結ができない)もんで
デリゲートをカプセル化して
public class MyEvent<T> where T: delegate
{
 T _handlers;
 public void Add(T handler) { _handlers += handler; }
 public void Remove(T handler) { _handlers -= handler; }
 public void Invoke(params object[] parameters) { _handlers.DynamicInvoke(parameters); }
}
みたいなクラスを定義できたらいいなーと思って。

これができないとなると
protected MouseEventHandler _mouseDownHandler;
public void AddMouseDownHandler(MouseEventHandler handler) { this._mouseDownHandler += handler; }
public void RemoveMouseDownHandler(MouseEventHandler handler) { this._mouseDownHandler -= handler; }
public void InvokeMouseDownHandler(params object[] parameters) { this._mouseDownHandler.DynamicInvoke(parameters); }
みたいなコードをイベントごとに記述するしかないのかな。

195デフォルトの名無しさん:2007/03/25(日) 09:47:19
ん? カスタムイベントとか Component.Events とか知らない?
196デフォルトの名無しさん:2007/03/25(日) 10:09:39
よっぽど請ったアルゴリズムのコアルーチンならまだしもそこまで気をつかわナイトいけないならC#使わないでほかの使ったほうがいいんじゃないかと・・・
197194:2007/03/25(日) 10:23:00
>>195
すみませんコンポーネントについてはよく知らないんですが、
ざっと調べた限りではComponentを基底にもつクラスの話ですよね。
>>194の例では別に基底クラスを規定してないので使えないような気がします。
198デフォルトの名無しさん:2007/03/25(日) 11:37:26
いや、それは本質ではない。そういう実装の仕方があるという話。
199デフォルトの名無しさん:2007/03/25(日) 12:27:37
>>194

public event EventHandler MyEvent
{
add{this.Events[eventKeyMyEvent].
}
200199:2007/03/25(日) 12:29:07
途中書き込みすまん
public event EventHandler MyEvent
{
add{this.Events[eventKeyMyEvent].AddHandler(value);}
remove{this.Events[eventKeyMyEvent].RemoveHandler(value);}
}
みたいに書けるのは知ってるの?
201デフォルトの名無しさん:2007/03/25(日) 13:42:47
( ・∀・)つ〃∩ ヘェーヘェーヘェー
202194:2007/03/25(日) 19:41:52
>>200
ああ、>>194のうちAddMouseDownHandlerとRemoveMouseDownHandlerが
public event MouseDown {
 add { _mouseDownHandler += value; }
 remove { _mouseDownHandler -= value; }
}
のように書ける、ということですか。
でも手間としてはあまり変わってないような。Invokeのためのメソッドはやはり必要でしょうし。
203デフォルトの名無しさん:2007/03/25(日) 20:15:08
つうか 何 が し た い ん だ
204デフォルトの名無しさん:2007/03/25(日) 20:17:39
キュウリの古漬けが食いたい
205デフォルトの名無しさん:2007/03/25(日) 20:21:51
public class MyEvent<T> where T: class
{
 T _handlers;

static MyEvent()
{
if (!typeof(T).IsSubclassOf(Delegate)) throw new NotSupportedException("ゴルア");
}

 public void Add(T handler) { _handlers = (T)Delegate.Combine((Delegate)_handlers, (Delegate)handler); }
 public void Remove(T handler) { _handlers = (T)Delegate.Remove((Delegate)_handlers, (Delegate)handler); }
 public void Invoke(params object[] parameters) { ((Delegate)_handlers).DynamicInvoke(parameters); }
}
206デフォルトの名無しさん:2007/03/25(日) 20:24:16
まあその前に何がしたくてそんなことする必要があるのか分からんが。
207デフォルトの名無しさん:2007/03/25(日) 20:31:46
どうせワンパターンなんだから>>202+Invokeメソッドのコードスニペットを作っとけばいいだろ
208194:2007/03/25(日) 20:44:05
>>205
おお、いいですね。
一見スマートじゃなさそうですがうまく動きますね。外から見れば>>194とまったく同じですし。
ちなみにTとDelegateの間でキャストができないので (T)(object)Delegate.Combine(...) などとする必要があるようです。
というわけで使わせてもらいます。レスくれた方々どうもでした。
209デフォルトの名無しさん:2007/03/25(日) 20:50:53
超絶な変態プレイだな
210デフォルトの名無しさん:2007/03/25(日) 20:52:56
というかイベントとデリゲートを混同してる気がするんだな
211デフォルトの名無しさん:2007/03/25(日) 21:04:37
AppendTextと+=って何が違うの?
212デフォルトの名無しさん:2007/03/25(日) 21:16:28
「C♯, C#相談室 Part34」
http://pc11.2ch.net/test/read.cgi/tech/1162467959/
から(今度こそ)誘導されました。

.Net Framework 2.0 の System.Security.Cryptography; 以下のクラスでRSA暗号を
扱うときのことに関して質問があります。
まず、秘密鍵K 、Kから生成され予め配布された公開鍵P、Kで暗号化された
データCがあります。今から実装するプログラムにおいて、
RSACryptoServiceProvider.FromXmlString() を用いてPを読み込み、それによって
Cを復号したいのです。質問内容は、

1. そもそもこの処理は実装可能か
2. Kで署名されたデータSを、Pから作られた RSACryptoServiceProvider の
VerifyData() で検証することには成功した。しかし、Encrypt() や Decrypt()
では鍵が違うと文句を言われたが、別のメソッドを用いるべきか。あるいは何か
留意すべきことがあるか

実行環境としては WindowsXP Proなんですが、 OAEP パディング は無しでやっています。
以上、何かアドバイスがあれば、よろしくお願いします。
213デフォルトの名無しさん:2007/03/25(日) 21:28:52
>>194
CIL書く知識があれば、型パラメータのセカンダリ制限にSystem.Delegate指定できるよ。
214デフォルトの名無しさん:2007/03/25(日) 21:33:16
s/セカンダリ制限/プライマリ制約/;
215デフォルトの名無しさん:2007/03/25(日) 21:38:33
>>211
TextBoxのこと?
長い文字列になるとAppendTextの方が速いみたい
216デフォルトの名無しさん:2007/03/25(日) 21:57:32
>まず、秘密鍵K 、Kから生成され予め配布された公開鍵P
おおそれはすごい。
ついにRSAもハックされたか。
217212:2007/03/25(日) 23:07:58
>>216

良く読んでくださいね。表現がまずかったですか?
218デフォルトの名無しさん:2007/03/25(日) 23:19:03
よく読めも何も、

>Kから生成され予め配布された公開鍵P
KからPを生成したと読めるから冗談で突っ込んだだけなんだが…
219デフォルトの名無しさん:2007/03/25(日) 23:22:55
冗談だけじゃなんなので。

何でCを復号する必要があるの?
RSACryptoServiceProviderは公開鍵での復号機能は持ってないみたいだな。
暗号化と復号が同じ処理ならEncryptでもいけるのかも知れんけど、実際どうなんだっけ?
よく知らない(もしそうであったとしてもRSACryptoServiceProviderで本当にできるのかはもちろん知らん)。

少なくともDecryptじゃ無理なのは間違いないわな。
220デフォルトの名無しさん:2007/03/25(日) 23:25:20
ところで検証に成功したなら、もう一回ダイジェストとれば同じデータになるんじゃないの?
221212:2007/03/26(月) 00:31:05
>>218

$ openssl rsa -pubout

上記のコマンドから得られる結果も何かの冗談ですか?
秘密鍵→公開鍵の処理に必要な計算量をどんなに多く見積もっても、
公開鍵→秘密鍵のそれに比較すれば、無視できる程度で計算可能なはずですが。
恐らく、O(1) くらいで。


>>219

> 何でCを復号する必要があるの?

冷静に考えてみると、復号する必要はないです。PHPの関数に
openssl_private_encrypt() というのがあったため、興味本位で調べていたら、
はまってしまったようです。素直に署名で何とかします。お騒がせしました。


>>220

これは私の説明不足ですね。VerifyData() のくだりは、「鍵ペアがおかしいわけではない」
という意味で書きました。ですので、これを書いた時点では、署名やダイジェストを
どうにかしたいわけではなかった、ということです。すみません。
222デフォルトの名無しさん:2007/03/26(月) 01:17:34
秘密鍵ってほんとの秘密鍵の部分だけの話かとおもたよ…
223デフォルトの名無しさん:2007/03/26(月) 01:21:58
ああ、普通に秘密鍵から公開鍵を生成っていうんだな。
すまんかったorz
224デフォルトの名無しさん:2007/03/26(月) 11:41:33
すまんがsealedの意義を教えてくれ。
継承を禁止されるおかげでちょっと独自の動きをさせたいことに多大な制限がかかるんだが。
あほがうかつに継承することでシステムが複雑になりうることは理解できるけれどそれを暮らす設計者が禁止するほどお前は設計についてすべてを見渡せるのかと子一時間。
225デフォルトの名無しさん:2007/03/26(月) 11:58:19
・ちょっとパフォーマンスが上がるかも
・かなり汚い実装してるから継承しても無駄!(Graphicsみたいに)
226デフォルトの名無しさん:2007/03/26(月) 12:03:26
>>224
設計者が意図していない継承をさせたくない場合に役立つ。
こういうのは流行やいろいろ考え方はあるのだろうけど、
C#はこういう面では非常に保守的で、
overrideだってクラス設計者がvirtualと宣言してなきゃ出来ないわけだ。
利用者が機能拡張したいなら委譲と包含が基本だろうな。
227デフォルトの名無しさん:2007/03/26(月) 12:12:18
>>224
うかつに継承することでシステムを複雑することが無いほどお前は設計についてすべてを見渡せるのかと子一時間。
228デフォルトの名無しさん:2007/03/26(月) 12:18:03
System.Drawingのsealedの嵐は
さすがにもう少しなんとかならなかったのかと思う
229デフォルトの名無しさん:2007/03/26(月) 12:18:18
Formを継承させたクラスを継承したフォーム作るとデザイナが不具合起こすのが多くて嫌だね
230デフォルトの名無しさん:2007/03/26(月) 12:42:42
>>224
よくよく考えてみると確かに疑問だね。
継承を許すと問題が起こりうる場合というのを考えてみたけど
ちょっと思い浮かばない。
231デフォルトの名無しさん:2007/03/26(月) 13:00:46
下手に拡張されてライブラリのバグだなんて言われてはたまらない。
232デフォルトの名無しさん:2007/03/26(月) 13:02:16
>>226 委譲や包含は多態には向かんのよ。
233デフォルトの名無しさん:2007/03/26(月) 13:50:07
javaのハウツー本の一部には継承する予定のないクラスは
取り合えずfinalにしておけといった記述も見受けられるが、
C#の場合virtual overrideの仕組みがあるから、
あえてsealedにしなくても予期できないような拡張はされにくい。
234デフォルトの名無しさん:2007/03/26(月) 13:59:03
sealedが必要なのはimmutableなクラスぐらいかな
235デフォルトの名無しさん:2007/03/26(月) 16:56:23
要はね、デフォルトでは素人がいじれない仕組みなんだけど玄人向けにはその抜け道が必要だと思うのよ。
そうでないといろいろ言語上の制限で記述ができなかったりおかしくなったりすることが多々ある。
いきすぎるとC++のような変態コード生成機になるけれどあながちそれも悪いとはいえないとおもふ。
236デフォルトの名無しさん:2007/03/26(月) 17:12:44
しかし素人ほど玄人の真似事をしたがる
237デフォルトの名無しさん:2007/03/26(月) 17:19:35
どっちかっつーとMSのサポセンに素人の下らない苦情が来ないように
厳しい仕様にしたってだけじゃないのかねぇ。

Javaのデフォルトバーチャルな世界や動的言語のダックタイピングと
真逆な方向性なわけだけど、Javaがデフォルトバーチャルで誰か困ったか?
むしろC++がデフォルトバーチャルでなくて素直に継承とポリモーフィズムが
適用できず、不便に感じるケースの方がずっと多いんじゃないか?

まーC++にはテンプレートメタプログラミングという逃げ道もあるわけだけどさ。
238デフォルトの名無しさん:2007/03/26(月) 17:21:29
.NET Frameworkだと,Win32やGDI+やinternalクラスやinternalメソッドに
べったり依存しててどうしようもないものはsealedになってる場合が多いみたいだな
239デフォルトの名無しさん:2007/03/26(月) 19:42:04
C++のGDIの変態コードを実装したことがある人はC#のGDI+が不便でも可読性と生産性が高いことが
理解できると思う。
初級PGにGDIコード書かせるとよくわかると思う
240デフォルトの名無しさん:2007/03/26(月) 22:31:27
え、デフォルトvirtualで困ったことないの??
プログラムの可変な場所を明示的に書けるC#のスタイルの方が生産性が高いと思う。
テンプレートメソッドパターンでサブクラスを人に見せるOr渡すときとか
ライブラリ設計しててvirtualだとさらに柔軟になるだろうけど、わざと変更範囲を閉じるとか。
(virtaulにしてoverrideして実装すると危なそうなことを明示する)

実作業レベルではvirtualが限定されているおかげでIDEでoverrideと打つ拡張方法が楽
241デフォルトの名無しさん:2007/03/26(月) 23:33:43
Javaの@Overrideがその証拠だな
242デフォルトの名無しさん:2007/03/27(火) 00:35:15
>224
世の中あほが非常に多いんです。
継承とnewとoverrideとインターフェースの明示実装を駆使して全部実装が違っていて
全部実装が間違っているDisposeとか目の当たりにするとあほ防止の機能は重視した方がいいんです。
243デフォルトの名無しさん:2007/03/27(火) 09:31:28
一般的なWebブラウザのブックマークみたいにメニュー項目上で右クリックしてさらにメニューを表示させるというのは
.NET Frameworkでは不可能でしょうか?
ToolStripMenuItemのMouseDownイベントで右クリックイベントは捕捉できるんですが
そこからさらにContextMenuStripを作成して表示すると古いメニューが消えてしまいます。
244デフォルトの名無しさん:2007/03/27(火) 09:57:15
>>243
コンテクストメニューを表示するタイミングでToolStripMenuItem.DropDown.AutoClose=false
そして、消えるときに元に戻してやればいい
245デフォルトの名無しさん:2007/03/27(火) 10:07:34
気合で全部自前描画
246243:2007/03/27(火) 11:23:13
>>244
どうもありがとうございます。そんなプロパティがあったとは気づきませんでした。
しかしこのままだと問題があって、古いメニューの方も操作できる状態になってしまいました。
で、GetWindowLong/SetWindowLongで古いドロップダウンのウインドウプロシージャをすげ替えて
マウスイベントを排除することで古いメニューを操作できなくしました。
基本的に解決ですが、もし他にスマートな方法があればお願いします。

247デフォルトの名無しさん:2007/03/27(火) 12:16:58
サブクラス化するなら最初からやっておいても同じじゃない?
以前やったやつ。必要十分かどうか確かめてないが

ToolStripDropDownMenuを継承、OnMouseUpで右クリック補足
→フラグ立てる。
  フラグが立っているときは
   PreProcessMessageでfalseを返す
   WndProcでWM_MOUSELEAVEを無視する
→右クリックのイベントを起こす
→フラグ降ろす
248デフォルトの名無しさん:2007/03/27(火) 16:28:01
C++で作られたプログラムと、C#で作るプログラム間でWM_DATACOPYを
使ってデータをやり取りする部分を考えていますが、実際にSendMessage
を行う際の お互いのWindowハンドルというのはどのように取得すれば
いいのでしょうか?
HWND_BROADCASTを使うと当然のごとく、いろいろなアプリが反応します。
249デフォルトの名無しさん:2007/03/27(火) 16:45:50
>>248
FindWindow() で自己解決しましたm(_ _)m
250デフォルトの名無しさん:2007/03/27(火) 21:46:24
一応言っておくと、HWND_BROADCAST は普通 RegisterWindowMessage と組み合わせて使う。
251243:2007/03/27(火) 23:05:25
>>247
レスどうもです。ToolStripDropDownMenuを継承したらP/Invokeを使わずにできました。
(継承できたら楽だなとは思ってたんですが実際に継承できるとは思ってませんでした)
ただ、PreProcessMessageに制御がこなかったのでWndProcをかわりにオーバーライドしました。

なんだかんだでP/Invokeを使わずに色々なことができるようになってるんですね。
25235:2007/03/28(水) 15:21:01
質問です。TreeViewを継承したクラスを作成しているのですが、
ダブルバッファリングの処理を入れたところ、
OnPaintの呼び出しは確認できているんですが、描写されません・・・。
これって何故でしょうか・・・。 以下がコードです。

public class MultiSelectableTreeView : TreeView
{
/// <summary>
/// コンストラクタ
/// </summary>
public MultiSelectableTreeView()
{
this.InitializeComponent();
this.SetStyle(ControlStyles.ResizeRedraw, true);
//ダブルバッファリングを有効にします
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}

/// <summary>
/// 描写
/// </summary>
protected override void OnPaint(PaintEventArgs e)
{
Debug.WriteLine("Start - OnPaint");
base.OnPaint (e);
}
}

宜しくお願い致します。
253252:2007/03/28(水) 15:22:34
↑なんか名前が35になってしまいましたが、このスレの>>35じゃないです。
254デフォルトの名無しさん:2007/03/28(水) 16:45:55
yieldつかってマイクロスレッドとかやってる人おる?
255デフォルトの名無しさん:2007/03/28(水) 16:52:45
yield いらね
256デフォルトの名無しさん:2007/03/28(水) 18:47:08
>>252
精神分裂症的な、何がしたいのかよくわからんコードだ。

自分でベースクラスに対して「俺様が描画するからお前黙ってろ」って命令してるんだから
描画されるわけがないと思うんだが。。

ひょっとしてベースクラスに対して「ダブルバッファリングを使ってお前が描画しろ」
と言いたいつもりなのかな?
だとしたらそんなことはたぶん簡単にはできない。
257デフォルトの名無しさん:2007/03/28(水) 20:11:53
>>254
yieldでデリゲートを返すようにしたらスクリプトみたいでおもしろいんじゃね
258デフォルトの名無しさん:2007/03/28(水) 20:41:21
おもしろくともなんともない
259デフォルトの名無しさん:2007/03/29(木) 00:52:30
>>258
死ね
260デフォルトの名無しさん:2007/03/29(木) 01:57:23
>>256
(統合失調症に改称)
261デフォルトの名無しさん:2007/03/29(木) 10:32:13
>>256
回答ありがとうございます。この件は解決したのですが、
後学のために教えてください。

>自分でベースクラスに対して「俺様が描画するからお前黙ってろ」
これってオーバーライドしたOnPaintの中でbase.OnPaintを呼び出しても
処理は実行されないんですか?

>ひょっとしてベースクラスに対して「ダブルバッファリングを使ってお前が描画しろ」
そのとおりです。
262デフォルトの名無しさん:2007/03/29(木) 11:26:01
>>261
http://msdn2.microsoft.com/ja-jp/library/3t7htc9c(VS.80).aspx

On**は基本的に**イベントを発生させるためのもの
ついでに,派生クラスでオーバーライドしたらイベントハンドラを追加しなくても
カスタム動作を加えることができるようにしてあるだけ
263デフォルトの名無しさん:2007/03/29(木) 11:38:11
>>262
なるほど、On**はイベントを発生させるためだけ(描写処理を呼び出すだけ)のもので、
その中に描写処理は含まれてない。

だから、>>252のソースでは
UserPaintで、描写処理は自分で行うぜ!(既存の描写は無視)という風にしているから、
描写処理が行われなかったわけですね。

OnPaint自体が描写処理を行うと勘違いしてました・・・。
ありがとうございました!!
264デフォルトの名無しさん:2007/03/29(木) 11:47:12
OnPaintは描画処理していいし、base.OnPaintを呼び出せば基底クラスの描画処理が実行されるよ・・・
265デフォルトの名無しさん:2007/03/29(木) 12:13:27
そうなってることもあるがTreeViewを含めそうなってないこともある
266デフォルトの名無しさん:2007/03/29(木) 13:57:35
extern って DllImport と組み合わせずに使うことってあるの?
267デフォルトの名無しさん:2007/03/29(木) 14:45:10
MethodImpl属性と組み合わせて使うことはあるみたい
268デフォルトの名無しさん:2007/03/29(木) 16:39:30
System.Windows.Forms.TimerのインスタンスをつくってStartしてもティックがこない・・・(´・ω・`)
DLLのクラスライブラリから呼び出すとティックが来ないなどあるんでしょうか?
269デフォルトの名無しさん:2007/03/29(木) 16:48:36
>>268
System.Windows.Forms.Timerを使うにはスレッドがウィンドウを持っていてメッセージを処理してる必要がある。
http://msdn2.microsoft.com/ja-jp/library/tb9yt5e6(VS.80).aspx
ここ読んどけ
270デフォルトの名無しさん:2007/03/30(金) 01:06:02
WebServiceでタイムアウトしてしまうので
非同期のメソッドにして処理をしたいのですが
ぐぐるとMSDNのところくらいしかまともな回答に
たどり着きません。
しかし、そのMSDNで RemoteService クラスを使ってますが
そのクラスがどこにもありません。。。
どの空間にあるのでしょうか?
また、他に非同期にする手段はありますでしょうか?
よろしくお願いします。
271デフォルトの名無しさん:2007/03/30(金) 01:29:18
いや、Timerスタートの呼び出しはメインスレッドから行われてる。
そのコードがDLLにあるだけ。
272デフォルトの名無しさん:2007/03/30(金) 01:47:58
どうやらおまいさんしか分からない前提が多数あるようだ
273デフォルトの名無しさん:2007/03/30(金) 02:09:28
メインスレッドがブロックされてるんじゃない?
274デフォルトの名無しさん:2007/03/30(金) 09:34:15
DataGridViewについて質問させて下さい。

Viewに100件のデータがあるとします。
Timerで一定時間ごとに1件削除→コミットするのですが、
コミットのタイミングでスクロールバーをダブルクリックすると、
DataGridViewが最大化されてしまうのです。
何とか回避したいのですが、良い方法は無いでしょうか?
275デフォルトの名無しさん:2007/03/30(金) 18:03:38
DataGridViewのコミットってなに?
コミットのタイミングでダブルクリックってなんでわかるの?
DataGridViewが最大化って?

・・・
276デフォルトの名無しさん:2007/03/30(金) 18:26:31
おれ用語禁止と何度いったら……
277デフォルトの名無しさん:2007/03/30(金) 18:30:55
それは不可能でしょ
俺様用語矯正スレでも立てたら
278デフォルトの名無しさん:2007/03/30(金) 18:35:18
矯正スレ立てると無くなるんだ。へー。
279デフォルトの名無しさん:2007/03/30(金) 20:11:05
IPAddressコントロールを使いたいんですが、ToolBox にありません。
なんかの参照を追加しないといけないんでしょうか?
280デフォルトの名無しさん:2007/03/30(金) 20:12:48
そのコントロールは自作かなにかですか?
281279:2007/03/30(金) 20:20:29
クラス WC_IPADDRESS のコモンコントロールだと思ってたのですが、標準のものではなかったでしょうか?
MFC には ToolBox に出てたと思うのですが・・・
282デフォルトの名無しさん:2007/03/30(金) 20:30:03
標準ではラッパ用意されてないから自分で作れ
283279:2007/03/30(金) 22:42:09
>>282
なるほど、標準では使えないのですね・・・
ラッパを作るってのをやったことないのですが、どんな手順で作るものなのかヒントをもらえないでしょうか。
何かの基底クラスを派生させて、いくつかのメソッドをオーバーライドしていく、みたいな感じで作れたりするものでしょうか?
284デフォルトの名無しさん:2007/03/30(金) 22:57:05
そんなもんラッパ書くより自分で実装した方が早いんじゃないの?
285デフォルトの名無しさん:2007/03/30(金) 22:58:51
このレベルで充分だろw
ttp://mnow.wankuma.com/cs_usercontrol15.html
286デフォルトの名無しさん:2007/03/30(金) 22:58:56
ちょいとぐぐれば普通に実装が見つかっちゃったぜ
ちなみに WC_IPADDRESS は SysIPAddress32 って文字列の別名
287デフォルトの名無しさん:2007/03/30(金) 23:04:25
中国結構凄いな。
ポップアップがいっぱい開くのはやめていただきたい。。。
288デフォルトの名無しさん:2007/03/31(土) 11:49:06
C#の入門書で良書と言ったら何がありますか?
289デフォルトの名無しさん:2007/03/31(土) 11:54:40
プログラミングC# 第4版
290デフォルトの名無しさん:2007/03/31(土) 11:59:21
日経BPのプログラミング書籍ははずれが少なく良書が多い。
ただし、プログラミング初心者向けではないが。
291288:2007/03/31(土) 14:09:13
皆さん、ありがとうございます

>>289
オライリーの本ですね

>>290

日経BPの書籍でC#と言ったら
Petzold著のC#によるプログラミングWindowsとかですかね
292デフォルトの名無しさん:2007/03/31(土) 18:04:09
サルでもわかるC#
293デフォルトの名無しさん:2007/03/31(土) 18:08:42
本当の初心者には基本情報技術者とC言語のお勉強からしてもらいたけどね。
参照型と値型にポインタ等この辺を理解できてないうちにプログラミング
されても戦力にならないからな。
294デフォルトの名無しさん:2007/03/31(土) 18:21:26
C#に入門書なんか要るのか?
295デフォルトの名無しさん:2007/03/31(土) 18:39:54
>>293
どれもC#使いながら覚えても大してかわらん。
むしろC#の方が初心者が無茶な書き方できないから良いと思うんだが。
本当の初心者がC#上でポインタ使えるようになるのは相当先の話だろ。
296デフォルトの名無しさん:2007/03/31(土) 20:06:30
ポインタ使うくらいならC++使えよ
297デフォルトの名無しさん:2007/03/31(土) 20:38:20
Cのdllのラッパーを書くときには使うよ
298デフォルトの名無しさん:2007/03/31(土) 21:21:43
C#からWin32API呼び出すくらいのことができないで
プログラマーを名乗るのはやめてほしいくらいだな。
Formsでコントロール貼り付けるだけならエンドユーザーでも
できるからな。
299デフォルトの名無しさん:2007/03/31(土) 21:25:25
P/Invoke ごときで何言ってんのww
300デフォルトの名無しさん:2007/03/31(土) 22:10:08
そうだね、プロテインだね
301デフォルトの名無しさん:2007/03/31(土) 22:19:21
P/Invoke出来ない人が実際に多いけどな。
VB上がりだと理解すらできないと思われるが。
どの程度だとベテランと呼ばれる領域なのか?
同期制御やManagedDirectXを使いこなせる位か?
302デフォルトの名無しさん:2007/03/31(土) 22:20:44
>>298
そんな事言う割にここの回答キツイよね
303デフォルトの名無しさん:2007/03/31(土) 22:25:48
P/Invokeはできれば避けるものだろ
304デフォルトの名無しさん:2007/03/31(土) 22:35:11
>>301
VB 上がりはむしろ慣れてる気がする
305デフォルトの名無しさん:2007/03/31(土) 22:38:31
P/Invokeなんて瑣末なWin32API呼び出す技術より、
ポインタ扱えるとかメモリ管理とかコンピュータサイエンスの基礎レベルは知っておいてもらいたい。
なんだかんだできっちり情報やった人とそうでない人ですごい品質の差があるような気がする。
306デフォルトの名無しさん:2007/03/31(土) 22:42:28
そうかな。技術ヲタクにまともそうな人間は少なく感じるけどな。
必要とされるのは顧客が求める物を求める期間で作れる事だよ。
これまでもこれからも。
307デフォルトの名無しさん:2007/03/31(土) 23:59:24
>>306
仕様の理解力はものづくりには必要だな。
だけど、技術的な知識はコーディングする上で
最低限知っておいてもらわないと仕事にならないよ。
308デフォルトの名無しさん:2007/04/01(日) 00:06:03
>>301
友達でも作って、もっと見聞を広げなさい。
309デフォルトの名無しさん:2007/04/01(日) 00:10:29
C#のプログラミングできる人が少ないのが現状だな。
Javaなら腐るほどいるけどな。
310デフォルトの名無しさん:2007/04/01(日) 00:24:30
俺もC#の友達少ない。みんなC++とかJAVA。
そういう俺も仕事ではC++なんだけど。
311デフォルトの名無しさん:2007/04/01(日) 00:26:09
大規模システムにC#及びWindows系サーバを採用することはあまり聞かないから、
大抵は小規模の開発になるよな。
小規模になると担当者は限定的にならざるを得ない。
312デフォルトの名無しさん:2007/04/01(日) 00:32:37
中規模は?
313デフォルトの名無しさん:2007/04/01(日) 00:56:50
C#でプログラム経験初→C++っていう流れは、アリですよね?
314デフォルトの名無しさん:2007/04/01(日) 01:12:13
>>313
ありだけど、とんでもないプロジェクトだったりするからな・・・
新規でC++は大抵、携帯機器かファームウェアだろうな。
速度重視の一部パッケージがC++で作成しようと思うだろうけど、
大抵は.NETで作成するだろう。
WebアプリはJavaか.NETになる。

315デフォルトの名無しさん:2007/04/01(日) 01:16:38
>>314
なんとなく日本語に違和感あり
316デフォルトの名無しさん:2007/04/01(日) 01:24:08
ありあり、低レベルからやるよりとっつき易いから学習パスとしてはかなり効率的だと思う。

>>309
>Javaなら腐るほどいるけどな。
ほんとですか?、まともなJava経験者にあんまりあったことがない・・
(Javaに限定されない話かもしれませんが)
317デフォルトの名無しさん:2007/04/01(日) 01:30:57
偽装請負でまともな技術者が少ないからな。
Java言語習得者は現在で一番大量に湧いている。
318デフォルトの名無しさん:2007/04/01(日) 09:47:01
Close() したフォームインスタンスのプロパティを取得できるのは何故ですか?
モードレスで開いたフォームが閉じられていることを確認するために Visible 値を
確認するなんてことをやっているのですが、よくよく考えたら閉じたインスタンスに
アクセスしてエラーとならないのが不思議です
もしかして閉じただけではインスタンス自体は破棄(Destroy)されないですか?
(Close したら Destroy されるという認識があるのですが・・・)
319デフォルトの名無しさん:2007/04/01(日) 09:53:35
>>318
Dispose()メソッドを呼ぶのとDispose()行ったオブジェクトは利用しない
これだけ覚えておけば良い。
詳細はMSDNライブラリを読めばわかるだろうけど。
320デフォルトの名無しさん:2007/04/01(日) 10:07:11
>>319
ありがとうです

なるほど C# では明示的に破棄していない場合は大丈夫なのですね?
あと Destroy ではなく Dispose なのですね
覚えておきます
321デフォルトの名無しさん:2007/04/01(日) 10:57:41
>>311
http://slashdot.jp/articles/06/10/16/0815224.shtml

世界の金持ち企業の55%はWindowsサバを使ってるみたいですが。
322デフォルトの名無しさん:2007/04/01(日) 11:07:22
>>320
モードレスで開いたFormはCloseすると自動的にDisposeされる。
しかしインスタンスは参照がなくなってGCで回収されるまで有効なので
Closeした後でも一部のプロパティやメソッド以外は使用できる。
Disposeで無効になるプロパティやメソッドを使用するとObjectDisposedExceptionが発生する。
323デフォルトの名無しさん:2007/04/01(日) 13:54:12
大丈夫な場合もあるといっても,やらないほうがいいけどな
324デフォルトの名無しさん:2007/04/02(月) 07:25:07
>>322
それ本当?
ShowDialog() が戻ってきた後、そのダイアログで操作された内容をオブジェクトからプロパティやメソッド経由で読み出すってことをよくやるんだが、それはいけないってこと?
その方法がダメだったら、そのダイアログの結果を受け取るためのクラスを作って、ダイアログ開く前にそのインスタンスを渡してやるとかしないといけないの?
てか、FileDialog とかどうなるんだべ?
いちいちイベントハンドラ設定して受け取る?
325デフォルトの名無しさん:2007/04/02(月) 07:29:53
Close の解説をご覧
326デフォルトの名無しさん:2007/04/02(月) 07:37:21
>モードレスで開いたFormはCloseすると自動的にDisposeされる。
「モードレス」で
327デフォルトの名無しさん:2007/04/02(月) 07:41:33
>>325
うわーマジだー!
ダイアログに置いた ListView とかの選択情報を後から読み出したりしてたんだが、これはアウトっぽいね・・・
自分で明示的に Close を呼ばなくても、×ボタンで閉じられたりとか、AcceptButton や CancelButton を押されたときもダメなんだよね?
うわー・・・ orz
328327:2007/04/02(月) 07:43:40
>>326
あ、勘違いした。
ダイアログはモーダルですね。
よかった。
とんだ恥さらしでスマソ
329デフォルトの名無しさん:2007/04/02(月) 11:03:01
327と同じ興奮を漏れも味わったw
330デフォルトの名無しさん:2007/04/02(月) 11:38:02
ダイアログはDispose忘れが多い俺ダメっこ
331デフォルトの名無しさん:2007/04/02(月) 11:44:19
using使えよ
332デフォルトの名無しさん:2007/04/02(月) 11:44:35
ダイアログってデザイナで追加してオブジェクトを使いまわすものなの?
それともusingでそのつど作るのが普通?
333デフォルトの名無しさん:2007/04/02(月) 11:47:06
プロパティ設定するのめんどくさいから前者
334デフォルトの名無しさん:2007/04/02(月) 15:36:23
Component追加するとForm1.resxとかって糞リソースができない?
なんかドロップした場所とか記録してるやつ。
あれが嫌いなんであんまりデザイナで追加したくない。。
335デフォルトの名無しさん:2007/04/02(月) 16:18:20
>>334
WPFで今度はXAMLというXMLベースのファイルに変わるから安心しろ。
336デフォルトの名無しさん:2007/04/03(火) 11:30:27
VisualStudioでタブウィンドウを使ってるんだがデバッグの開始・停止を繰り返すたびにボーダーがどんどん左にずれてく・・・(´・ω・`)
337デフォルトの名無しさん:2007/04/03(火) 23:45:45
>>336
IDEスレで愚痴った方がよくないか?もしかしたら解決策もっている人がいるかも
338デフォルトの名無しさん:2007/04/04(水) 01:15:39
再インストールって言われそう。
ためしに、新規プロジェクトで最小限のコードで
同じ現象が再現するか試してみたら?
339デフォルトの名無しさん:2007/04/04(水) 10:06:59
了解です。IDEすれ?で愚痴ってきますです。
解決策あったら報告するです。
340デフォルトの名無しさん:2007/04/05(木) 12:53:05
>>254
やってるよ。

// ここはメインスレッドで実行
yield return delegate()
{
// ここは別スレッドで実行
};
// 別スレッドの処理が終わったらメインスレッドで実行

みたいな感じでスレッドを切り替えられるようにして使ってる。
341デフォルトの名無しさん:2007/04/05(木) 13:49:53
>>340
試してないけどかなり軽くなるというのでいいかも。
独自のスレッド管理手法みたいなのも作れるし(゚д゚)ウ-(゚Д゚)マー(゚A゚)イ-…ヽ(゚∀゚)ノ…ゾォォォォォ!!!!
342デフォルトの名無しさん:2007/04/05(木) 14:47:20
>>340
全然分からないんだけど。
その別スレッドが動作中はメインスレッドはスリープ状態になるんだよね?
どういう使い方をするものなの?
343デフォルトの名無しさん:2007/04/05(木) 17:03:17
>>340のいう「スレッド」はいわゆるマルチスレッドのスレッドのことじゃなくて
マイクロスレッド(コルーチン)のことを指してるのか?
344340:2007/04/05(木) 17:37:54
改めて考えてみると、マイクロスレッドとはちょっと違ってたかも。

>>342
別スレッド実行中は、
別のマイクロスレッドもどきのメインスレッドで実行する部分を実行するか
メッセージループを回してる。
345340:2007/04/05(木) 17:40:24
例えば、
IEnumerable<Work> WorkA(){
A1();
yield return delegate(){A2();}
A3();
}
IEnumerable<Work> WorkB(){
B1();
yield return delegate(){B2();}
B3();
}
void Run(){
works.Add(WorkA());
works.Add(WorkB());
}
で、Run()を実行すると
メインスレッドでA1
メインスレッドでB1、バッググラウンドでA2
メインスレッドでA3、バッググラウンドでB2
メインスレッドでB3
の順に実行される、といった感じ。
346デフォルトの名無しさん:2007/04/05(木) 17:59:21
状態が保存されてるだけで複数スレッドで同時に実行されるわけじゃないんじゃないの?
347デフォルトの名無しさん:2007/04/05(木) 18:29:52
interface IWork{void Work();bool Async{get;}}
class WorkImpl : IWork{
public WorkImpl(MethodInvoker invoker, bool async){略}
public void Work(){this.invoker();}
}
IEnumerable<IWork> WorkA(){
yield return new WorkImpl(delegate{A1();}, false);
yield return new WorkImpl(delegate{A2();}, true);
yield return new WorkImpl(delegate{A3();}, false);
}
void Run(){>>345と同じ}
(IWork.Asyncがtrueなら非同期呼び出し,falseなら同期呼び出し)
こんな感じにした方が意味がはっきりすると思う
348デフォルトの名無しさん:2007/04/05(木) 18:42:22
何につかいたいかさっぱりわからん……
ファイバーやスレッドプールに比べての利点は?

仕様から見て、yield構文はあくまで列挙子ジェネレータを手軽に書ける
ようにするため「だけ」のモンだと思ってたんだけど
349デフォルトの名無しさん:2007/04/05(木) 19:41:27
>>348
C#でファイバーって使えたっけ?

> スレッドプールに比べての利点は?
処理を実行するタイミングと、実行する内容を分離して記述できるのが利点かな。

例えば、
「キャンセルボタンを押したら途中で処理を中終了する」
「ボタンを押すと一時的に処理を中断し、もう一度押すと再開する」
など、スレッドの実行方法を実行内容と分離して再利用できる。
350デフォルトの名無しさん:2007/04/05(木) 19:56:38
けっきょく、>>340でいうメインスレッドやら別スレッドやらっていうのは、
本物のスレッドの事を言ってるんじゃないんでしょ。
351デフォルトの名無しさん:2007/04/05(木) 20:12:29
Implementing Coroutines for .NET by Wrapping the Unmanaged Fiber API
ttp://msdn.microsoft.com/msdnmag/issues/03/09/CoroutinesinNET/default.aspx
352デフォルトの名無しさん:2007/04/06(金) 01:29:02
スプラッシュウィンドウを作成しているのですが、少し困ったことになりました。
と言いますのも、ウィンドウが表示される瞬間ラベルコントロールが真白になり、
ウィンドウを台無しにするという現象を未だに解決できずにいるからです。

スプラッシュウィンドウの構成はとてもシンプルです。
フォームの背景に黒系をメインとした画像を設定し、その上にタイトルと
著作権表示用のラベルコントロールを配置しているだけです。
ラベルコントロールの背景色は Transparent(透過)で文字色は White です。

ウィンドウが表示された一瞬ではありますが、色の関係でとても目立ちます。
個人趣味のプログラムなのですが、できるだけ良いものを作成したいという
気持があります。

何か解決策はないものでしょうか?
(画像を白系をメインとしたものに変更するのは不可です。)
353デフォルトの名無しさん:2007/04/06(金) 02:01:58
解答じゃないんですが。嫌味のつもりじゃないんですが。

できるだけ良いソフトウェアを目指すなら、
スプラッシュ不要なものを設計してください。
354デフォルトの名無しさん:2007/04/06(金) 02:07:22
設定によってスプラッシュウィンドウ表示を無しにできるように設計してあります。
従って、2回目以降の起動時には完全に表示しないようにできます。
355デフォルトの名無しさん:2007/04/06(金) 02:32:17
スプラッシュウィンドウにそんなに苦労するなんて馬鹿馬鹿しいと思いますが

・スプラッシュを表示してるあいだ重い起動処理をしない
・画面外に表示してスレッドタイマーで中央にもって来る
・アルファ0で描いて次第に不透明になるカッコイイ処理を加える
・文字も画像に書き込んでしまう
・スプラッシュウィンドウなんて止める

まあ最後のやつがマジお勧め
356デフォルトの名無しさん:2007/04/06(金) 03:19:11
ダブルバッファ有効にしてもだめ?
357デフォルトの名無しさん:2007/04/06(金) 03:40:38
表示したあと定期的にDoEventsを呼んでいないとかで、
再描画のイベントが発生してないということはない?
358デフォルトの名無しさん:2007/04/06(金) 04:45:05
いいこと教えてやろうか
スプラッシュを動画にするんだよ
可変部分は毎回エンコードすればいい
vfw使えば簡単
359デフォルトの名無しさん:2007/04/06(金) 05:08:58
javaの話で恐縮だけど、SE6のスプラッシュ考えた奴は天才だと思うわ。
java -splash:splash.jpeg hogehoge
360デフォルトの名無しさん:2007/04/06(金) 07:14:00
まあ目から鱗的なところはある。
CreateProcessとWaitForInputIdleを組み合わせれば同じようなものを作れそう。
361デフォルトの名無しさん:2007/04/06(金) 09:20:39
>>352
Vista専用にすれば解決だよ。
362デフォルトの名無しさん:2007/04/06(金) 09:22:18
ビデオドライバをフックして直描きする
363デフォルトの名無しさん:2007/04/06(金) 09:29:09
すごい昔、まだC#なんぞなかった頃、
スプラッシュウィンドウだけ別アプリにしたことがある。
364デフォルトの名無しさん:2007/04/06(金) 18:26:55
え…スプラッシュウィンドウを別アプリにして

更新確認−なし→通常起動
└あり→確認してアップデート→新しい方起動

とかやるのは今時普通じゃないんですか
365デフォルトの名無しさん:2007/04/06(金) 18:29:39
起動時にチェックして,置き換えるときだけ別アプリを起動すればいいだけだろ
366デフォルトの名無しさん:2007/04/06(金) 23:03:56
>>352

フォームのバックグラウンドが白になってるだけだろ?

投下職を勘違いしてるだけじゃないかな
テストフォームでも作って灯火の意味を調べてみ。
367デフォルトの名無しさん:2007/04/06(金) 23:13:38
ともしび…
368デフォルトの名無しさん:2007/04/06(金) 23:24:05
スプラッシュで思い出したんだけどさ、俺の知人でさ、起動時にさ、
必ずモーダルなスプラッシュを表示させる香具師が居るんだが・・・
どう思う?馬鹿じゃね?
看板とか言っていたけどさ
369デフォルトの名無しさん:2007/04/06(金) 23:24:23
び、 ビリケン。
370デフォルトの名無しさん:2007/04/06(金) 23:43:05
モードレスじゃないスプラッシュなんてスプラッシュじゃねえ
ただのダイアログだ
371デフォルトの名無しさん:2007/04/07(土) 00:00:08
>>368
カッコイイと思ってやってるんだからそーっとしておいてやれ
372デフォルトの名無しさん:2007/04/07(土) 00:03:43
凝ったスプラッシュを出すくらいなら
起動速度の高速化に注力してスプラッシュが不要なようにして欲しいと思う。
373デフォルトの名無しさん:2007/04/07(土) 00:05:25
ひょっとして平気でビジーループか?
374デフォルトの名無しさん:2007/04/07(土) 00:20:41
良いじゃん別に
モーダルなスプラッシュを1〜3秒くれーなら表示してもさ
アプリの名前や著作権情報を表示して主張するのもアリでしょ
テレビ番組とか映画とかでいうオープニングシーンみてーなもんだよ
ゲームで言うならタイトル画面かな
ゲームやっててコンティニュー選ぶのまんどくせーって奴はあんまりいねーじゃん
まあ、よく使うアプリで毎回起動時にモーダルで数秒取られるのはきついがな
その辺は上で誰か書いてたみてーに非表示設定できれば問題なしじゃね?
そんなもんだよ
375デフォルトの名無しさん:2007/04/07(土) 01:07:22
全然よくないしそんなの普通じゃねーよ。
376デフォルトの名無しさん:2007/04/07(土) 01:08:42
起動が遅いのを体感的に緩めるために、スプラッシュ画面を表示してみましょう。
モーダルでビジーループで3秒表示してみました。
あほかといいたい。
377デフォルトの名無しさん:2007/04/07(土) 01:11:45
きもいヲタ絵を表示すると得点がさらに倍
378デフォルトの名無しさん:2007/04/07(土) 01:36:43
業務アプリで、立ち上げ時にサーバから情報を取ってくるのが遅かったので
性能対策でプログレスバーつきのスプラッシュつけた。

が・・メンテナンス時に落とす以外は数ヶ月間立ち上げっぱなし、まぁどうでもよかった
379デフォルトの名無しさん:2007/04/07(土) 02:35:08
フォームが表示されているのかいないのかを判断するにはどうすれば良いですか?
フォームがまだロード処理中なのかそれとも既に表示されているのかを知りたいです。
380デフォルトの名無しさん:2007/04/07(土) 05:42:55
表示と非表示のイベントでフラグ制御してそれを見ればいいだろが
381デフォルトの名無しさん:2007/04/07(土) 08:37:58
>>379
表示されてアイドル状態になったかどうかなら Form.Shown イベントを使う。
1.x ならApplication.Idle イベントでがんばれ。
382デフォルトの名無しさん:2007/04/07(土) 10:30:47
char[] 掛け声 = "あたっ";

このように書くとエラーになるんですが、どうすればいいですか?
383デフォルトの名無しさん:2007/04/07(土) 10:34:27
char[] と string は別物
384デフォルトの名無しさん:2007/04/07(土) 10:38:45
>>382
string s = "あたっ";
char[] ch = s.ToCharArray();
385デフォルトの名無しさん:2007/04/07(土) 11:08:16
>>379-381
Visibleプロパティを参照ではあかんの?
386デフォルトの名無しさん:2007/04/07(土) 12:31:38
>>382
string 叫び声 = "あたっ";
char 声 = 叫び声[0];
387379:2007/04/07(土) 13:40:09
>>.380-381
ありがとうございます。

>>385
ありがとうございます。

FormのLoadイベント処理の中で結構時間が掛る処理をやっているのですが、
別スレッドからそのLoadの処理が終わった(処理が終わってFormが表示された)か否かを知りたいのです。
Formび途中の段階でVisible値がfalseになっていれくれれば良かったのですが、
確認してみたところ何故かtrueになっていました。(なので今回のケースでは使えないです。)
IsDisposed(破棄されているか否か)のようなプロパティがあれば一番楽なのですが・・・。
388デフォルトの名無しさん:2007/04/07(土) 13:42:44
自分でイベントを定義してそのLoadの処理の最後に発生させればいいだろ
389デフォルトの名無しさん:2007/04/07(土) 13:43:48
>387
OnLoadの終わりでvolatile boolなフラグでも立てとけよ。
390デフォルトの名無しさん:2007/04/07(土) 13:44:32
> FormのLoadイベント処理の中で結構時間が掛る処理をやっているのですが、
これを止めれば万事解決

つか Load イベントの最後でフラグ立てればいいだけの話じゃね?
そもそもワーカスレッドが Form の状態に依存すること自体微妙だが。
391デフォルトの名無しさん:2007/04/07(土) 13:50:03
>>388-390
ありがとうございます。

フィールドにBOOL型のフラグを持たせるようにしてForm::Loadの始めと終わりで変更するようにします。
処理自体を見直すのも検討してみます。
392デフォルトの名無しさん:2007/04/07(土) 14:07:31
・コンストラクタでフラグ初期化
・重い処理の最後でフラグセット

たったこれだけじゃねーか。
なんで「表示されたかどうか」って発想になるのか…
393デフォルトの名無しさん:2007/04/07(土) 23:43:24
設定保持クラスのProperties.Settingsをinternalでなくpublicとかにしたいんですけど
どのようにすればよいでしょうか?(簡単にはできないということはやっちゃまずいんでしょうか・・)

プロジェクトをまたいで設定を共有したいのですがどのようにすればよいでしょうか?
394デフォルトの名無しさん:2007/04/08(日) 04:14:48
>>393
http://forums.microsoft.com/msdn/showpost.aspx?postid=117187&siteid=1
ここで同じようなこと聞いている人がいるけどうまくいってないみたい?
SettingsProviderの派生クラスを自作して、これを複数のアプリケーションで使うようにして、
同じファイルを見に行くようにすればいいのかな。
395デフォルトの名無しさん:2007/04/08(日) 09:17:41
あの、きっとすごく簡単なことだと思うんですが、
アプリケーションを多重起動防止にして、かつ 2つ目以降が起動された時には、1つ目に SendMessage したいです。
なので 1つめのウィンドウハンドルを知る必要があるのですが、こういうことの実現方法を教えてください。
ヒントでも結構ですので、よろしくおねがいします。
396デフォルトの名無しさん:2007/04/08(日) 11:27:47
多重起動 禁止 C#
でぐぐれかす。

397395:2007/04/08(日) 11:31:53
>>396
質問するまえにぐぐって、多重起動防止の方法自体は見つけてあるのですが、
1つめのインスタンスのウィンドウハンドルを取得する方法は発見に至っていないのです。
398デフォルトの名無しさん:2007/04/08(日) 12:10:02
>>397
Process.GetProcessesByName()
Process.MainWindowHandle

.NETならSendMessageを使うよりリモーティングを使ったほうがいいと思うけどね。
399デフォルトの名無しさん:2007/04/08(日) 13:24:34
>>398
リモーティング便利だよね。
チャネルにTCPでよくつかうけど、

ローカルでのプロセス間通信としてしかつかったことないんだよね。
セキュリティとかかんがえると、TCPよりは、unixドメインみたいなので
実装あると便利なきがするんだけど
400デフォルトの名無しさん:2007/04/08(日) 13:27:18
2.0 で IpcChannel が増えたが?
401デフォルトの名無しさん:2007/04/08(日) 15:23:14
IpcChannelって何を使用して実装されてるんだろうね。
気にする必要ないことではあるが。
402デフォルトの名無しさん:2007/04/08(日) 16:54:03
名前つきパイポ
403399:2007/04/08(日) 17:09:14
ナッナンダッテー(AA略
いつの間に・・・

きがつかなかった
404デフォルトの名無しさん:2007/04/08(日) 20:03:07
フォームのロードメソッドの中でApplication.DoEvents()すると
まだロードメソッドの途中なのにフォームが表示されるんですが、
何でですか?
Application.DoEvents()の直前でフォームのVisibleをfalseにしたら
一応防げたんですが・・・
フォームのロードメソッドの中でそのフォームのVisibleをfalseに
するのは処理的におかしいですか?
405デフォルトの名無しさん:2007/04/08(日) 20:07:59
たまたまそういう仕様だからとしか言いようがないだろ
一体何がしたいんだ
406デフォルトの名無しさん:2007/04/08(日) 20:13:28
C#でオートメーションサーバを作成したいのですが
方法が良く分らないです。
どなたかヒントを教えてもらえないでしょうか。
407デフォルトの名無しさん:2007/04/08(日) 20:33:11
OLEなの?
COMじゃなくて?
408デフォルトの名無しさん:2007/04/08(日) 20:34:24
>フォームのロードメソッドの中でApplication.DoEvents()すると
なんでそんなことするんだよ。
409デフォルトの名無しさん:2007/04/08(日) 20:45:51
今ならactiveX だろ
オートメーションサーバは
410デフォルトの名無しさん:2007/04/08(日) 20:50:49
>>408
メインフォームをロードする中でプラグインの開始処理を呼んでいるんですが、
そのプラグインの中にメインフォームが表示されるまでNow Loading...とか表示する
小さなフォームを表示するやつがあるんですよ(一種のスプラッシュみてーなもん?)
で、そいつは小さいフォームのペイント処理の中でちょっとした描画をやってる関係で
ペイントメッセージ(WM_PAINT?)を処理させる必要があるんですね
で、その小さなフォームを呼んでいるとこ(プラグインの本体クラス)で、件の
Application.DoEventsをかましているってワケですよ
そしたらなぜか知らんのですがメインフォームの野郎が表示されやがるんですよ
(メインフォームの表示メッセージまで処理されてる?)
小さなフォームはメインフォーム表示を判断して消えることになってんで
仕方ねーなーってことでメインフォームをVisuble=falseしてるんですよ
でも表示処理の中でfalseすんのもどーかなーってことで相談した次第であります
で、どうなんですか?
やっぱfalseはまずいですかね?
実際の動きはまあまあ良いんですが、理論的にダメなら次バージョンでどーにか
別手段を考えようかなーって思ってるんですが・・・
411デフォルトの名無しさん:2007/04/08(日) 20:54:48
あ、ちなみに、Visible=falseしてるのはApplication.DoEvents()の前です
同じプラグインの本体クラスの中で親フォームいじくってやってます
(オブジェクト指向的にも問題あり?元々VC++ユーザなんで分らんです)
412デフォルトの名無しさん:2007/04/08(日) 20:57:21
>>410
冗長な割には結局何がしたいのか要領がつかめない文章だね。
最終的にどういう動作を「お望み」か、それを書こうよ。
誰もエスパーじゃないことが理解できるのなら。
413デフォルトの名無しさん:2007/04/08(日) 20:59:45
一応言っておきますが、趣味プログラミングです
(業務中じゃC#なんて絶対使わねーし)
414デフォルトの名無しさん:2007/04/08(日) 21:01:33
>>412
メインフォーム表示前に小さななフォームがちゃんと描画された状態で
表示されれば問題なしです
あ、ちなみに、文字表示にラベルとか使うのはナシですよ
415デフォルトの名無しさん:2007/04/08(日) 21:02:40
はぁ?
416デフォルトの名無しさん:2007/04/08(日) 21:02:53
つまり設計ミスだろ
417デフォルトの名無しさん:2007/04/08(日) 21:04:51
>>402
IPCってぐらいだから、SystemV IPCのメッセージキューと共有メモリじゃないのか?
418デフォルトの名無しさん:2007/04/08(日) 21:05:17
アプリのメインフォームのコンストラクタでプラグインをロードするって設計が腐ってるんだよハゲ
プラグインを管理するクラスでやれよハゲ
419デフォルトの名無しさん:2007/04/08(日) 21:09:26
ってか、俺が何をどー作ってるかなんてどーでも良いんですよ :-(
肝心なのは質問の部分ですよ
フォームの表示中(ロード処理)の中でそのフォームの
Visibleがfalseになるのはマズい?ってことなんですよ
Visibleをtrueに戻さなくても勝手に表示されるってのも気になりますがね
この辺の仕組みを知ってる人は教えて下さい
420デフォルトの名無しさん:2007/04/08(日) 21:14:14
DoEvents を Load で呼び出すのが拙い
421デフォルトの名無しさん:2007/04/08(日) 21:17:16
そうだね、プロテインだね
422デフォルトの名無しさん:2007/04/08(日) 21:17:18
今日もにぎやかだな
423デフォルトの名無しさん:2007/04/08(日) 21:25:36
>>420
えー、でもさ、そうしねーとペイントできないじゃん
他にペイントさせる手段があるなら教えて下さいよ
424デフォルトの名無しさん:2007/04/08(日) 21:27:39
だが断る
425デフォルトの名無しさん:2007/04/08(日) 21:36:33
ケチだなー :-(
426デフォルトの名無しさん:2007/04/08(日) 21:38:09
>>420に賛成。
427デフォルトの名無しさん:2007/04/08(日) 21:42:57
もしかしてVC++のInvalidate+UpdateWindowみたいなのがあるってこと?
428デフォルトの名無しさん:2007/04/08(日) 21:43:38
もう帰れよ
429デフォルトの名無しさん:2007/04/08(日) 21:45:21
>>427
C++で書いてろよw
430デフォルトの名無しさん:2007/04/08(日) 21:47:17
知っ、役に立たん連中だ
もういい、自分で考える
431デフォルトの名無しさん:2007/04/08(日) 21:49:11
<お宅>は退室しました
432デフォルトの名無しさん:2007/04/08(日) 21:51:23
<お宅>.Visible = false;
433デフォルトの名無しさん:2007/04/08(日) 21:57:52
<お宅>.Dispose();
434デフォルトの名無しさん:2007/04/08(日) 22:13:18
>>432
まだそこらにいるってことか。
435デフォルトの名無しさん:2007/04/08(日) 22:26:43
GC.Collect();
436デフォルトの名無しさん:2007/04/08(日) 22:38:55
お宅 <お宅> = new お宅();
GC.SuppressFinalize( <お宅> );
437デフォルトの名無しさん:2007/04/08(日) 23:02:25
???
描画したいだけなら Refresh() 呼ぶだけで良いんじゃね?
438デフォルトの名無しさん:2007/04/08(日) 23:25:08
>>437
RefreshはoverridableなのでInvalidate, Updateで
439デフォルトの名無しさん:2007/04/09(月) 00:20:24
???
overridable だと何か問題あったっけ?
440395:2007/04/09(月) 01:00:09
>>398
トンクスです!
リモーティングに興味しんしんです。
さっそくやってみます。
441デフォルトの名無しさん:2007/04/09(月) 01:21:00
>>439
動作を変えられる。つまりRefreshは描画のみの意味ではなくて
もっと抽象度の高いメソッド。標準動作で描画なので勘違いしている
人が多いが。
例えばWebBrowserコントロールだと再読み込みとなる。

この場合、「画面を描画してくれ」の意味で呼ぶのだから(Invalidate),
Updateが正解。
442デフォルトの名無しさん:2007/04/09(月) 03:59:33
ある関数で、クラスの型(System.Type) を受けとっています。
この型を元に、そのクラスの static なメソッドを実行したりすることはできるでしょうか?

こんなクラスと

class testclass
{
 public static string method1() { return "test"; }
}

こんな関数を用意して、

string testfunc(System.Type t)
{
 return t.method1(); // こんな風に、t のクラスの static メソッドを呼び出したい
}

呼び出しはこんな感じ

 string result = func(typeof(testclass));

443デフォルトの名無しさん:2007/04/09(月) 04:16:28
>>442
public void test(Type t) {
MethodInfo method = t.GetMethod("test2");
if (method.IsStatic) {
method.Invoke(null, null);
}
}

public static void test2() {
Console.WriteLine("月曜日が襲ってきます");
}
444442:2007/04/09(月) 04:32:52
>>443
おー!どうもありがとう!
445デフォルトの名無しさん:2007/04/09(月) 04:41:08
月曜日が問題
446デフォルトの名無しさん:2007/04/09(月) 10:04:46
>>414
亀レスだけど、プラグインの開始処理は↓のようにメインフォーム作成前に
やるのじゃ駄目なの?

[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// プラグインの開始処理
.......
Application.Run(new Form1());
}
447デフォルトの名無しさん:2007/04/09(月) 16:44:19
なんでIntPtrってconst宣言できないの?
448デフォルトの名無しさん:2007/04/09(月) 16:48:29
リテラルがないから。
449デフォルトの名無しさん:2007/04/09(月) 17:44:03

他の特定のアプリケーションのウインドウがアクティブ/非アクティブに
なったときにある処理を行いたいのですが、
他のアプリケーションの状態を取得したりイベントにすることはできるのでしょうか。
FW2.0 WinXPです。
450デフォルトの名無しさん:2007/04/09(月) 19:09:16
>>447
そんなときは readonly static。
451デフォルトの名無しさん:2007/04/09(月) 20:36:22
>>449
ぐぐれ: サブクラス化 NativeWindow
452デフォルトの名無しさん:2007/04/09(月) 23:23:42
453デフォルトの名無しさん:2007/04/10(火) 00:24:13
454デフォルトの名無しさん:2007/04/10(火) 14:16:06
メインフォームからスレッドを作成して、別スレッドで
File.Copy を実行中、thread.Abort(); してもCopyが完了
するまでthread.Join()から抜けてきません。
大きなサイズのファイルのとき終了までフォームが固まります。
File.Copyを途中でばっさり完了させることはできないでしょうか?

455デフォルトの名無しさん:2007/04/10(火) 14:34:24
もっと低級な方法で実装するしかないだろうな。
456デフォルトの名無しさん:2007/04/10(火) 14:36:11
プロセスを分けてみるとかはダメかね?
457デフォルトの名無しさん:2007/04/10(火) 15:04:34
Win32 API の CopyFileEx を使って、中断可能なファイルコピーを実装する。
458デフォルトの名無しさん:2007/04/10(火) 15:08:53
で、そのコールバック関数の中で、CurrentThread の ThreadState が AbortRequested だったら
PROGRESS_CANCEL を返すようにする、ではダメかな。

試しにコード書いてみっか。
459デフォルトの名無しさん:2007/04/10(火) 15:13:25
入出力処理をスーパバイザに要求してた処理が終わるまで
OSの待ち行列にプロセスが入るからだろ?
一時ファイル作成して最後にマージする処理に変えるとか
考えた方が良いんでないか?
460デフォルトの名無しさん:2007/04/10(火) 15:19:05
演算子のオーバーロードを実装するとき、

public class Counter {
int i;
public Counter( int i ) { this.i = i; }
public static Counter operator ++( Counter c ) {
Counter ret = new Counter(c.i + 1);
return ret;
}
}

という風に、一度新しいオブジェクトをnewしてからreturnするのが通例なようですが、
なぜc.iを直接書き換えると駄目なのでしょうか?
461デフォルトの名無しさん:2007/04/10(火) 15:38:46
>>460
通例なようですがって、
classでそれやったらもとのインスタンスと別物になっちまうだろが。
structならそれでもいいが。
462461:2007/04/10(火) 15:41:59
補足
「それやったら」って、newすることね。
463デフォルトの名無しさん:2007/04/10(火) 16:16:07
>>460
直接書き換えるとまずい例としては
hoge = counter++ が正しく処理されない。
464460:2007/04/10(火) 16:55:52
レスありがとうございます。
>>461-462
別物になってしまうから、なぜnewしなければならないのかわからないのです。

>>463
ホントだ。
やってみたら、できなかった。
なんで?
465454:2007/04/10(火) 17:22:08
みなさんありがとうございました。
とりあえず早急に対応したかったので
FileSteamで、ReadOpenとWriteCreateして256Kbyteバッファで
ちまちまコピーして、ThreadAbortExceptionでCopy中なら、
rw close,途中ファイルdeleteという実装で逃げました。
速度的にどうかという検証はあとでやることにして・・・
466デフォルトの名無しさん:2007/04/10(火) 17:30:11
最終更新日とかセキュリティ情報とかのメタデータが保存されないことの方が問題な気が。
まあそういう情報がどうでもいいファイルならいいけど。
467454:2007/04/10(火) 18:04:12
>>466
はい、それは必要だったので、コピー完了してclose後、
Creation,Access,WriteTimeをFile.Get... してFile.Set... という
段取りで対応しました。
468デフォルトの名無しさん:2007/04/10(火) 18:06:08
サブストリームとか気になるな
まあ、それでいいんならいいんだが。
469454:2007/04/10(火) 18:13:02
ありがとうございます。だんだん心配になってきますがw
通常のファイルだけを扱うので大丈夫だと思います。
サブストリームの名前もしらなかったくらいなんで・・・

470デフォルトの名無しさん:2007/04/10(火) 22:28:38
16進数で表記されている数を10進数に変換したいのですが、
Convert.ToInt32を使えばできるそうなのですが、いまいち使い方が
よく分かりません。どなたか教えて下さい。
471デフォルトの名無しさん:2007/04/10(火) 22:30:23
int i = Convert.ToInt32("2A", 16);
472デフォルトの名無しさん:2007/04/10(火) 22:46:24
指定した基数での数値の String 形式を等価の 32 ビット符号付き整数に変換します。

パラメータ
value:数値を含んでいる String。
fromBase:value 内の数値の基数。これは 2、8、10、または 16 である必要があります。

どこをどう読んだら分からんのか分からん・
473デフォルトの名無しさん:2007/04/10(火) 22:48:47
基数を基教と読んだ…
474デフォルトの名無しさん:2007/04/10(火) 22:50:59
読んだまんまだと思うけど、分からないならInteger.Parse使えば?
おまけに、確かこっちの方がパフォーマンス10倍ぐらい良かったはずだよ。
なんで同じことするのにこんなにパフォーマンス差があるのか不思議なんだけど。
475デフォルトの名無しさん:2007/04/10(火) 22:58:09
ごめん、Int32.Parseだね。
最近仕事でVBばっかりだもんで
476デフォルトの名無しさん:2007/04/10(火) 23:17:09
うろ覚えだけど、
16進HEX文字、数値の相互変換、

プロファイラ使って性能対策したとき、
結局、statick readonlyの配列かHashで256ケース用意して昔ながらのindex変換したほうが速かったような

標準のParseメソッドは、
多言語対応とかでCharacterSetの変換とかでもやってるのかな?
477デフォルトの名無しさん:2007/04/10(火) 23:20:58
16進文字列の数値変換がボトルネックになるってのもレアケースだと思うがね
478デフォルトの名無しさん:2007/04/11(水) 00:03:38
>>476
そりゃindexで変換するのが速いのは速いだろ。
そこまで求めることがあるかどうかってだけで。
479デフォルトの名無しさん:2007/04/11(水) 00:07:32
いやー例えば計測機器とか簡単な機器の制御なんかではアスキーでデータ送受信したりするわけで、
一台相手ならどうということはないが複数台になるとマズい処理だとCPU時間喰いまくって
よろしくないんだよ。
480デフォルトの名無しさん:2007/04/11(水) 00:09:47
いきなり語りださなくても…
481デフォルトの名無しさん:2007/04/11(水) 00:14:13
>>476-478
それはないと思うけどね。
Hex => Binなんて普通にニブルごとに引き算して変換した方が絶対早いと思うよ。
482476:2007/04/11(水) 00:27:17
>>479
同業者?

シーケンサーとかメモリマップドIOな機器とやりとりするとなると、バイナリーデータの通信になるから、
ログ出力にHEXダンプとかよくやるよね。
うちの場合は、セッションとかコネクション管理はUNIX鯖いれるけど、
GUIとか紙媒体扱うとこはWindowsだね〜
483デフォルトの名無しさん:2007/04/11(水) 02:10:48
C# に限った話ではないかもしれないが、無関係ではないので質問
Visual Studio に標準で付いているアイコンとかあるじゃん
カット、コピー、削除とかいった標準のやつ
あとフォルダのアイコンとかもあるな
ああいったのってさ、無断で使っても良いのかな?
商用/非商用とかでも何かあるのかな?
484デフォルトの名無しさん:2007/04/11(水) 06:12:02
VisualStudioImageLibrary.zip のことか?
485デフォルトの名無しさん:2007/04/11(水) 08:19:38
>>483
ドキュメントに書いてあるじゃん
486デフォルトの名無しさん:2007/04/11(水) 17:06:36
すみません。
フォームのサイズを変更したときなどにコントロール内の文字がチラつくのですが
チラつきを防ぐにはどうすればよいのでしょうか?
487デフォルトの名無しさん:2007/04/11(水) 19:35:52
指で押さえる
488デフォルトの名無しさん:2007/04/11(水) 19:42:46
リサイズ中目を瞑る
489デフォルトの名無しさん:2007/04/11(水) 20:01:32
>>487
>>488
真面目に答えてやれよ!




さあどうぞ
↓↓↓↓↓
490デフォルトの名無しさん:2007/04/11(水) 20:12:28
C#やめる
491デフォルトの名無しさん:2007/04/11(水) 20:13:24
ここは俺に任せろ!!
492デフォルトの名無しさん:2007/04/11(水) 20:50:01
ふっ、お前にだけ良い格好させられるかよ!
493デフォルトの名無しさん:2007/04/11(水) 21:16:31
>>486
同じことを文面変えていろんなところで聞いてないか?w

だからそんなくだらないことは気にしないのが一番だと思うが、
どうしてもと言うならSetStylesでダブルバッファリングを有効にした上で
全部自力で描画すればいいんじゃない?

っていうか、そんなにちらつきが気になるコントロールなんてあったかなあ。。。
494デフォルトの名無しさん:2007/04/11(水) 21:29:34
サイズ変えてる間は画面真っ黒にしとけばいいんじゃね
495デフォルトの名無しさん:2007/04/11(水) 21:42:37
もしかしてFillとかにしてる?
もしそうだったらAnchorをTop, Bottom, Left, Rightにしたら直るかも
496デフォルトの名無しさん:2007/04/12(木) 11:02:30
Contorl.FlickerEnable=false;
497デフォルトの名無しさん:2007/04/12(木) 23:31:15
コンテキストメニューにショートカットキーを設定するのって変?
例えば「検索(&F)」ってメニューに Keys.Control | Keys.F を設定って感じで
498デフォルトの名無しさん:2007/04/12(木) 23:52:03
499デフォルトの名無しさん:2007/04/12(木) 23:54:52
>>493
多分ラベルやボタンが100個ぐらいあるんだよ。

>>486
使ってる専ブラのサイズゆっくり変えてみな。
タブのあたりちらついてないか?
500デフォルトの名無しさん:2007/04/13(金) 00:02:17
>>498
じゃあさ、リッチテキストボックス上で Ctrl+F が押されたら、
コンテキストメニューにあるのと同じ検索画面を開きたい場合はどうすれば良いの?
いちいちキーイベントを拾って自分で判断するの?
501デフォルトの名無しさん:2007/04/13(金) 00:06:19
どこかにwindowsの動作のルールというか、作法書いたページがあったような…
502デフォルトの名無しさん:2007/04/13(金) 00:54:44
どうすれば良いのか教えれ
いや、教えてください先生
503デフォルトの名無しさん:2007/04/13(金) 01:07:53
なんでgoogle先生に聞かないでこんな所で聞くんだろう
504デフォルトの名無しさん:2007/04/13(金) 01:10:24
逆google八分でもしてんだろ。
505デフォルトの名無しさん:2007/04/13(金) 01:11:33
google 先生に嫌われているからです
俺が質問しても遠回しにしか回答してくれません
しかも回答が間違っている場合が多いです
やっぱり人間の先生が一番です
506デフォルトの名無しさん:2007/04/13(金) 01:13:22
いちいちキーイベントを拾って自分で判断する。

グローバルで効かしたいときはFormのProcessうんちゃらKeyメソッドを
オーバーライドしたような
507デフォルトの名無しさん:2007/04/13(金) 01:13:36
>>505
お前以外スクリプトだよ
508デフォルトの名無しさん:2007/04/13(金) 01:49:58
FormのLoad処理中にそのFormのTopMostをtrueにすると
タスクバーが表示されなくなるのですが、これは.netのバグですか?
別のウィンドウを選択するなどして一度Formをアクティブではなくして
それからFormを選択してアクティブにすると表示されます
ShowInTaskbarはtrueになっていることは確認したのですが
なぜそうなるのかは分かっていません
509デフォルトの名無しさん:2007/04/13(金) 02:21:50
>>508
再現しませんでした。
510デフォルトの名無しさん:2007/04/13(金) 04:38:31
初心者のうちから処理系のバグとか言ってると、ろくな大人にならない。
511デフォルトの名無しさん:2007/04/13(金) 09:22:17
-質問-
初心者用のC#のお勧め本ありますか?
512デフォルトの名無しさん:2007/04/13(金) 09:29:02
プログラミングC# 第4版じゃオラー!
513デフォルトの名無しさん:2007/04/13(金) 15:47:20
>>500
Windows95のガイドラインだと、インターフェイスを簡潔にする目的で
ショートカットキー(Ctrl+Fとか)はコンテキストメニューには表示しない
ことを推奨してます。たぶん。XPやVistaでも変わってないかどうかは謎。
Ctrl+Fはあくまでメインメニューの[編集(E)]-[検索(F) Ctrl+F]が拾って
処理します。そこでActiveControlとかから動作を判断すればよい。

え?メインメニューがない?それは困った。
514500:2007/04/14(土) 01:58:40
ってことはさ、メインメニュがない場合さ、


private void richHoge_KeyDown(object sender, KeyEventArgs e) {
  if (!e.Control) {
    return;
  }
  switch (e.KeyCode) {
    case Keys.F:
      if (this.findForm != null) {
        if (!this.findForm.IsDisposed) {
          this.findForm.Activate();
          return;
        }
        this.findForm = null;
      }
      this.findForm = new FindForm(this.richHoge);
      this.findForm.Show(this);
    default:
      break;
  }
}


ってな感じで KeyDown イベントで対応するしかない?
515514:2007/04/14(土) 02:07:45
あと、イベントハンドラについて質問


hoge..Shown += new EventHandler(this.Hoge_Shown);
hoge..Shown += new EventHandler(this.Hoge_Shown2);


ってやってみたら2つの関数が共にキックされたんだよね
驚きももの木ってやつで興味津津
でね、疑問に思ったんだけどさ、コレっていくつまで追加できるの?
通常は1つか2つだろうけどさ、インプリの仕方によっては10とか
20とか50とか追加したい場合あるよね
(プラグインとか使う場合かな?)
100以上でもできますかね?
516デフォルトの名無しさん:2007/04/14(土) 02:10:11
試せ
517デフォルトの名無しさん:2007/04/14(土) 02:30:09
とりあえず5つまで動いくことを確認した
ま、動かなくなったら考えるってことでいいや

ってか KeyDown の方の質問に回答プリーズ
おながいします
518デフォルトの名無しさん:2007/04/14(土) 03:09:50
すげーな。
今時の子は「携帯電話っていうの使ったら、離れた人とお話できたよ!」
とかいってびっくりしちゃうんだ。
519デフォルトの名無しさん:2007/04/14(土) 03:32:00
全然例えになってなくてワロタ
520デフォルトの名無しさん:2007/04/14(土) 03:35:55
>>518
今時の子て・・・おま、俺は30超えてるって
521デフォルトの名無しさん:2007/04/14(土) 07:28:19
頭は子供
522デフォルトの名無しさん:2007/04/14(土) 09:23:40
メインメニューを普通に作って非表示にしとけばいい。
523デフォルトの名無しさん:2007/04/14(土) 19:21:14
特定のコントロールの特定のイベントを発生させるにはどうすれば良いですか?
例えば、ボタンのClickイベントやテキストボックスのKeyDownイベントなどです
(もちろんgoogleで検索してみましたが、良い情報が見つかりませんでした)
524デフォルトの名無しさん:2007/04/14(土) 19:46:08
>>515
つデリゲート
525デフォルトの名無しさん:2007/04/14(土) 19:50:46
一般的にはない。
継承してOnXxxを呼ぶか、GUI関連のイベントなら対応するようなメッセージを投げるか。
526デフォルトの名無しさん:2007/04/14(土) 20:18:57
>>525
ありがとうございmす
527デフォルトの名無しさん:2007/04/14(土) 20:25:19
っていうか、「イベントを発生させる」って問題意識が
そもそも勘違いの産物だと思う。8割方。

筋の悪い初心者にありがちな勘違いなんだよねこれ。
528デフォルトの名無しさん:2007/04/14(土) 20:39:53
まあクリック程度ならメソッド作るの面倒くさいときとか
PerformClick()とかあるし、やっちゃうけど。

テキストボックスのKeyDownってのは頂けないような。
必要な状況が想像できない。
FocusしてTextプロパティを設定すれば済むんじゃ?
529デフォルトの名無しさん:2007/04/14(土) 20:45:43
>>528
コピーとか元に戻すとかの機能を実装したポップアップメニューを作りたかったのです
テキストボックスにCtrl+CやCtrl+Zを投げることができれば、Windows標準機能を利用してできるかなと考えたのですが間違いでしたか
Copy()とかUndo()とかを使う手も考えたのですが、それだとWindows標準のと本当に同じなのか不安でしたので・・・
530520:2007/04/14(土) 20:49:31
>>522
そこまでしなくちゃできんもんなんだな・・・
じゃあなんかすっきりしないけど KeyDown でやっとくよ
トンクス
531デフォルトの名無しさん:2007/04/14(土) 20:50:42
ほら勘違いだよいわんこっちゃない。
イベントなんて何の関係もない話じゃないか。
532デフォルトの名無しさん:2007/04/14(土) 20:52:30
>>531
KeyDownイベントに乗せてキーを送ろうと考えたんですよ
それ以外にキーを送る手段があるのですか?
533デフォルトの名無しさん:2007/04/14(土) 20:56:21
イベントっていうのはコントロール「が」他のオブジェクト「に」対して何かを通知するためのもの。
コントロール「に」他のオブジェクト「が」何かを命令するためのものじゃないでしょ。
534デフォルトの名無しさん:2007/04/14(土) 20:57:38
KeyDownイベントに乗せて送っても、
届くのはあなたが設定したKeyDownイベントのハンドラだけ。
TextBox自体には届かない。
そこんとこよろしく
535デフォルトの名無しさん:2007/04/14(土) 20:58:51
なんかレスが交錯してるような
536デフォルトの名無しさん:2007/04/14(土) 21:01:16
>>529
Copy()とかUndo()はWM_COPYとかEM_UNDOとかを投げてるだけだよ
537デフォルトの名無しさん:2007/04/14(土) 21:55:03
>>509
マジっすか?
もしかしてVistaでやってるのが・・・いや、初心者が処理系のせいにしてはいかんのでしたね
どうにも解決方法が見つからないので悩んでおります
538デフォルトの名無しさん:2007/04/14(土) 21:55:55
プロジェクトうp
539デフォルトの名無しさん:2007/04/14(土) 23:03:28
>>538
それはちと厳しいですね。
FormのLoadの中で設定ファイルを読み込む処理をしてまして、
それをもとにFormのTopMostや位置、サイズをセットしてるだけなんですよ。
ブレーク張ったりコメントアウトしたりしてやってみた結果、
TopMostをセットしているところが原因だったという次第です。
はぁ、何がいけないのかさっぱりさっぱり。
540デフォルトの名無しさん:2007/04/14(土) 23:06:12
とりあえず、書いた部分だけでも張ってみたら?
541デフォルトの名無しさん:2007/04/14(土) 23:22:31
C#でダブルバッファリングってどーやるの?
JavaだとBufferStrategyで一発なんだけど
542デフォルトの名無しさん:2007/04/14(土) 23:24:51
>>539
スケルトンから、
> FormのLoad処理中にそのFormのTopMostをtrueにする
だけのコードを書いてみたら?
543デフォルトの名無しさん:2007/04/14(土) 23:28:46
544デフォルトの名無しさん:2007/04/14(土) 23:47:06
>>543
おう、そうだよね
自分で調べるのは常識だよね
スマンかったYO
545デフォルトの名無しさん:2007/04/14(土) 23:52:23
>>542
やってみました。
そしたら特に問題はなかったです。
益々今の現象が不思議で仕方がなくなりました。
明日情報処理試験だというのにこれが気になって気になって・・・
諦めます(両方とも)。
546デフォルトの名無しさん:2007/04/15(日) 00:16:02
両方諦めてどうするw
547デフォルトの名無しさん:2007/04/15(日) 02:25:48
「元に戻す」「やりなおし」「切り取り」「コピー」「貼り付け」「削除」

これらには標準的なアイコンが存在すると思いますが、
どこで手に入れることができますか?
またそのアイコンを使ったプログラムを無断でフリーソフトとして
公開してしまっても著作権違反にはならないでしょうか?
548デフォルトの名無しさん:2007/04/15(日) 02:30:41
>>547
著作権違反云々の前に、とりあえず、マルチはマナー違反になるってことを覚えておこうな。
549デフォルトの名無しさん:2007/04/15(日) 04:17:55
C++→C#へ構造体を送信したい為、以下のコードを書いたのですが
上手くいきません。ご教授お願いします。

====C++送信側====
typedef struct Status {
int Hp;
int Mp;
int Sp;
}Status;

Status s;
s.Hp = 101;
s.Mp = 800;
s.Sp = 505;

hWnd = FindWindow(NULL,"C#受信側");
PostMessage(hWnd, 0x8101, 0,(LPARAM)&s);
550デフォルトの名無しさん:2007/04/15(日) 04:18:58
====C#受信側=====
private struct Status{
public int Hp;
public int Mp;
public int Sp;
}
protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case 0x8101:
Status s = (Status)m.GetLParam(typeof(Status));
MessageBox.Show(m.LParam.ToString());
txtHp.Text = s.Hp.ToString();
txtMp.Text = s.Mp.ToString();
txtSp.Text = s.Sp.ToString();
break;
}
base.WndProc(ref m);
}

====結果====
txtHp.Text = 1244916
txtMp.Text = 1
txtSp.Text = 1360384
551デフォルトの名無しさん:2007/04/15(日) 05:02:33
Marshal.PtrToStructureとか調べれば良いんじゃないか?
552デフォルトの名無しさん:2007/04/15(日) 05:15:00
s = (Status)Marshal.PtrToStructure(m.LParam, typeof(Status));

にしても上手くいきません><
何がおかしいんでしょうか・・・
553デフォルトの名無しさん:2007/04/15(日) 09:53:07
>>550
いやな予感がするんだが別プロセスだったりする?
だったらポインタはプロセス固有なので渡すの(原則)無理だし
VistaだとWM使った通信はややこしい面があるので別の方法を
推奨。

…まぁこんなこと基本中の基本なんで違ったらごめんね。
554553:2007/04/15(日) 10:02:40
追記。まぁそれ以前にスタック領域のアドレスポインタをPostMessage
するなよなぁと言う気もする…
555デフォルトの名無しさん:2007/04/15(日) 13:02:10
>552
デフォルトではC++は4byteごとでC#は8byteごとに配置されるからずれる。
556デフォルトの名無しさん:2007/04/15(日) 13:09:43
そのアラインメントの話ってMSDNライブラリの誤記だった気がしたけど、違ったかな
実際はデフォで4byteだったような
557デフォルトの名無しさん:2007/04/15(日) 13:28:52
初心者のおれも知りたい。Packのデフォルト値って32bit環境だといくつなん?

↓こんなん関係ある?

MessageBox.Show( Marshal.SizeOf( typeof( TEST ) ).ToString() );
unsafe
{
    MessageBox.Show( sizeof( TEST ).ToString() );
}

[StructLayout( LayoutKind.Sequential )]
struct TEST
{
    public int i1;
    public int i2;
}

/*
どっちも8
*/
558デフォルトの名無しさん:2007/04/15(日) 13:31:25
ああ、なんか勘違いしてるっぽ
559デフォルトの名無しさん:2007/04/15(日) 13:33:25
構造体のIntPtrを取得するにはどうすれば良いですか?
できればスタック上のものを取得したいです。
560デフォルトの名無しさん:2007/04/15(日) 13:43:15
意味不明です
561デフォルトの名無しさん:2007/04/15(日) 13:48:19
>できればスタック上のものを取得したいです。
・・・
562デフォルトの名無しさん:2007/04/15(日) 14:25:00
>>549-550
俺もアライメントかなーと思ったんだけど、
全て16進にしてみても何も共通点がないんだな。

前の人が言ってるように、別プロセスとか、
あるいはアパートメントスレッド同士のように、
全く別のアドレスを指してることはあるかも。

ストリームで解決したらあかんか?
563デフォルトの名無しさん:2007/04/15(日) 14:35:08
>>562
別プロセスが濃厚(FindWindowとかやってるし)かと思うが、
ローカルにとってPostMessageしているのを見るとこれが
原因の可能性も。

>>549 == >>559 だとしたらもう絶望的に駄目駄目なので
お前じゃ無理を結論とするのがよかろうかと。
564デフォルトの名無しさん:2007/04/15(日) 15:10:04
メッセージの0x8101てなんだっけ。WM_COPYDATAが安全ではないかい。
565デフォルトの名無しさん:2007/04/15(日) 15:12:05
WM_APP + 0x101
566549-550:2007/04/15(日) 15:39:10
549-550です。皆さんの助言により
SendMessageに変えWM_COPYDATAで解決しました。

===送信側===
COPYDATASTRUCT cd;
cd.dwData = 0;
cd.cbData = sizeof(s);
cd.lpData = &s;

SendMessage(hWnd, 0x4a, 0,(LPARAM)&cd);

===受信側===
COPYDATASTRUCT cds = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT));
Status s = (Status)Marshal.PtrToStructure(cds.lpData, typeof(Status));
567デフォルトの名無しさん:2007/04/15(日) 17:46:38
C#でゲームを作りたいと思いManaged DirectXに関するサイトなどを探していたのですが
あるサイトでXNAという開発環境があることを知りました。

そこで質問なのですがこの二つにそれぞれメリットがあるとすればどういった所なのでしょうか。
ご教授お願いします。
568デフォルトの名無しさん:2007/04/15(日) 20:02:26
MS 的には、MDX の後釜のつもりで XNA 作ってるんじゃない。
569デフォルトの名無しさん:2007/04/15(日) 20:02:51
比較も糞もMDXアボーン→XNA Frameworkなので、ほとんどを切り捨てて
いるもののMDX3.0 = XNA Frameworkみたいなもの。
570デフォルトの名無しさん:2007/04/15(日) 20:04:33
DirectXのthin wrapperが欲しかっただけなのに・・・
571デフォルトの名無しさん:2007/04/15(日) 20:13:48
>>545
今日が試験だって事を忘れてたうっかりさんがココに
毎日スレ覗いてたのに、たまたま昨日だけ見ずに寝たら・・。

ソフ開受けれなかったよ。・゚・(ノД')・゚・。
572デフォルトの名無しさん:2007/04/15(日) 20:14:27
オレなんて受験票なくしたぜ!
573デフォルトの名無しさん:2007/04/15(日) 20:17:56
基本情報の時に「何でこんなに空席があるんだ?」と思ってたら、自分も似たような事になるとはなぁ

受験票、PC横に置いてたのに!
574デフォルトの名無しさん:2007/04/15(日) 20:32:10
>>568
なるほど…MDXがコケたので後継を作った、という事なんですね。
では、XNAの入門書や解説サイトでお勧めのものはありますでしょうか?
重ね重ね申し訳ないですがお願いします。
575今日のソフ開:2007/04/15(日) 20:58:29
                           ┗(^o^ )┛
  ___                         ┗┃ ヽヾ\  
 |←SW|                              ヽ\\        
  ̄ || ̄                                    三二= 
    ||                                       三二=   
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                 | ̄ ̄ ̄ ̄
                       ∧∧∧∧∧∧∧∧∧∧∧    午前
                           午後1
  ___
 |←SW|           ミエタ! 
  ̄ || ̄        ┗(^o^ )┓三 彡  
    ||           ┏┗  三 ∠                          
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                 | ̄ ̄ ̄ ̄
                       ∧∧∧∧∧∧∧∧∧∧∧ 
                            午後1

             §  ティウンティウンティウン
              §
          | | .§ |  |
  ___     | | |. §◎|  | 午後2 
 |←SW|   __◎§__◎      
  ̄ || ̄    |____ ◎_ _| 
    ||     ▼◎▼ ▼◎ ▼◎                            
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                 | ̄ ̄ ̄ ̄ ̄
                       ∧∧∧∧∧∧∧∧∧∧∧ 

576デフォルトの名無しさん:2007/04/15(日) 21:04:26
>>574
入門書はない。日本語の解説は徐々に増えてきたけど、まだまだ足りない。

誰かに聞いても教えてもらえない事を覚悟する必要がある。
それと、英語アレルギーがあるなら諦めた方がいいと思う。

>>575
今回も午後2が鬼門だったのか。
577デフォルトの名無しさん:2007/04/15(日) 21:07:17
なんつうかXNAはXBox360用な臭いを感じる
578デフォルトの名無しさん:2007/04/15(日) 21:10:32
箱コントローラ以外使えないし、終わってる
579デフォルトの名無しさん:2007/04/15(日) 22:13:56
>>576
VS05EEベースって事はかなり最近ですから、当たり前といえば当たり前ですよね…
英語は余り得意でないので暫く様子見としてMDXを使ってみることにします、ありがとうございました。

>>577,>>578
箱コントローラー以外使えないとはDirectInput(相当)で箱コントローラーしか認識しないということですか?
580デフォルトの名無しさん:2007/04/15(日) 22:23:27
581デフォルトの名無しさん:2007/04/15(日) 22:55:59
>>579
というかコントローラとかは本家DirectX準拠なので。
本家も基本的にDirect3D以外は終了だから。コントローラは
XInputという新しいやつになる。X-Box360コントローラ専用。
まぁ、DirectInputは自由すぎて微妙なところも確かにあったし。

こういうマルチメディア周りは基本的にVistaで一新されるから、
今はちょうど移行期になってしまっていて、初心者には辛い
ですな。Direct3Dも名前が一緒なだけで大幅に変わるし。

XNAの目標が「玄関開けたら5分でゲーム」らしいんで、初心者向け
も目指してはいるんで、「出来る!XNA」とか出るらしいんでそれで行けば
いいんじゃない?確かに驚くほど簡単なライブラリではあるので。

長くなったけど最後に一つだけ。
ttp://higeneko.com/diary.php
ttp://blogs.msdn.com/ito/
今のMSの情報は開発者blogが多くなってて、XNAチームには日本人も
いて英語が苦手ならとりあえずここを。あとはNyaRuRu氏とかを適当に。
582デフォルトの名無しさん:2007/04/16(月) 02:02:08
>>580
ありがとうございます。
XNAについて殆どわかっていなかったので大変参考になりました。
これからの技術ということなので定期的に調べていきたいと思います。

>>581
あ、確かにそうでした。
Vista導入でDX関連はかなり変更されていたんでしたね…
尚更、MDXでやろうかなって思います…w

NyaRuRu氏は時々拝見させて頂いてます。
他の方のブログも定期的に見るようにしますね

それにしても「出来る」シリーズでプログラミング言語とは凄いですね。
本のレベルがそういった域に来てるのかそれだけ言語が簡単なのか…


ともかく、遅くまでお答え頂きありがとうございました。
583デフォルトの名無しさん:2007/04/16(月) 10:49:18
>>535
人生までオワルナ
584デフォルトの名無しさん:2007/04/17(火) 14:42:43
XNAは結構厳しい動作環境を要求するので注意
ゲームする奴だったら大体大丈夫だろうけど
585デフォルトの名無しさん:2007/04/17(火) 16:30:19
System.Collections.ObjectModel.Collection<T>みたいに
動作をカスタマイズできるようになってるIDictionary<T>はないの?
586デフォルトの名無しさん:2007/04/17(火) 16:35:58
System.Collections.DictionaryBase<,>
587デフォルトの名無しさん:2007/04/17(火) 19:17:12
うそをつくなw
588デフォルトの名無しさん :2007/04/17(火) 20:29:13
初心者スレの方で聞いた方が良いかもしれませんが
教えてください。
TabControlにRichTextBoxを描画していまして
新たにTabPageをAddしてRichTextBoxをそのTabPageにAdd
したとき、focusをそのRichTextBoxに設定してるんですが
2つ目以降のTab生成時そのTabを前面に出るようにするには
どうしたら良いんでしょうか。
分かりづらい質問だと思いますが、どなたか教えてください。
589デフォルトの名無しさん:2007/04/17(火) 20:40:14
SelectedTab
590デフォルトの名無しさん :2007/04/17(火) 23:08:36
>>589
ありがとうです
591デフォルトの名無しさん:2007/04/18(水) 01:16:04
キーコンフィグ用のアプリを作成しているのですが
ただのフォームアプリなのでできればDirectXを呼びたくないのですが
DirectInputを用いずにゲームパッドのキーコードを取得する方法はないでしょうか。
592デフォルトの名無しさん:2007/04/18(水) 01:31:56
.NET1.1とC#で勉強を兼ねてワードパットのようなモノを作っているのですが、
RichTextBoxで一般的なWindowsアプリにあるようなダブルクリックによる
単語選択ができません。

トリプルクリックによる行選択は出来るのですが、ダブルクリックでは1文字だけが
選択されてしまいます。

また、ドラッグによるテキスト選択を行おうとすると、カーソルの彼方の方まで選択
してしまったりと、謎の挙動で困っております。

このような場合は、どのようにしたらいいのでしょうか?
593デフォルトの名無しさん:2007/04/18(水) 02:10:52
>>591
.NETにそのものの機能はない。

joyGetPosとかRawInputとかでぐぐる。
594デフォルトの名無しさん:2007/04/18(水) 12:47:42
基底クラスのコンストラクタから呼び出されている仮想メソッドがあって、
その仮想メソッドをオーバーライドして動作をカスタマイズしたいんですが
そのメソッドから派生クラスのコンストラクタ引数に間接的にでもアクセスすることって可能でしょうか?
595デフォルトの名無しさん:2007/04/18(水) 13:44:46
それが基底クラスのコンストラクタ引数でもあるなら可能。出なければミリ。
596デフォルトの名無しさん:2007/04/18(水) 13:59:03
>>594
> 基底クラスのコンストラクタから呼び出されている仮想メソッドがあって、
> その仮想メソッドをオーバーライドして動作をカスタマイズしたいんですが
> そのメソッドから派生クラスのコンストラクタ引数に間接的にでもアクセスすることって可能でしょうか?

質問の意味を勘違いしてるかもしれないが…

派生クラスのコンストラクタで、引数をインスタンス変数に記憶しておけばいいのでは?
↓こんな感じで。

abstract class BaseClass {
protected abstract void Foo(int x);
}

class DerivedClass {
private int mArg;

public DerivedClass(int arg){
mArg = arg;
}

protected override void Foo(int x){
return x + mArg; // この辺は適当な処理にあてはめて。
}
}
597デフォルトの名無しさん:2007/04/18(水) 14:01:34
>>593
お返事ありがとうございます!
ただ、キーの割り当てが一つとは限らない上
キーボードとパッドを同時に設定する場合もあるので
キーボードはKeyDownハンドラ内でフォーカスもってるコントロールを調べて
そこに対して処理、という風にしていたのですが
joyGetPosはイベント化できないので少し悩んでいます…。
598デフォルトの名無しさん:2007/04/18(水) 14:08:32
>>596 先にベースのコンストラクタが呼ばれるからミリ
599デフォルトの名無しさん:2007/04/18(水) 14:10:14
>>597
RawInputでぐぐったらWM_INPUTっての出てこなかった?
600596:2007/04/18(水) 14:51:16
>>598
ああ。そうか。
よく考えてみればそうですね。了解。
601デフォルトの名無しさん:2007/04/18(水) 15:14:49
>>594
ふと思ったんだけど、オーバーライドしたメソッドでやりたい処理を
派生クラスのコンストラクタのなかでやったら駄目なの?
602デフォルトの名無しさん:2007/04/18(水) 15:19:45
>>599
わ、ごめんなさい、joyGetPosでの認識が簡単だったのでそっちでばかり考えていました…。
RawInputでWM_INPUT取得するサンプルソース、すぐに見つかりました。
なんとかなりそうです、ありがとうございました。
603デフォルトの名無しさん:2007/04/18(水) 17:53:16
複数のボタンのTEXTプロパティを読み出して別のテキストボックス内に書きこみたいんですが
ボタンのハンドラを一つにしてsenderの情報にTEXTが入ってるのを利用しようと思ったんですけど
欲しいのはコントロールのTEXTプロパティだけなんで他の情報が邪魔です。
そこで、stringに代入してSubstringを使おうと思ったのですがうまくいきません。

こういうときはどうしたらいいでしょうか、お知恵をお貸しください。
604デフォルトの名無しさん:2007/04/18(水) 18:04:24
普通にsenderをキャストしてTextプロパティとればいいじゃないか。
605デフォルトの名無しさん:2007/04/18(水) 18:12:16
string substr = (string)sender; ということですか?
これを行うとこのコードが実行される所でそのまま落ちてしまい、デバッカが
型 'System.Windows.Forms.Button' のオブジェクトを型 'System.String' にキャストできません。
とエラーを出してしまいます。。
606デフォルトの名無しさん:2007/04/18(水) 18:41:22
string s = ((Button) sender).Text;
607デフォルトの名無しさん:2007/04/18(水) 19:03:48
C#で.NET Remotingについて質問です

クライアントプログラムでライブラリをロードし,
以下のコードを実行しました

TcpChannel tcc = new TcpChannel();
ChannelServices.RegisterChannel( tcc, true );
Hoge obj = ( Hoge )Activator.GetObject( typeof( Hoge ), "tcp://localhost:4649/Hogetest" );

としたとき,GetObjectのラインで以下のエラーが出ます
RemotingExceptionはハンドルされませんでした。
プロキシを非バインド型で作成しようとしています。

エラーメッセージでググってもヒットせず,
StackTraceを見たところ,RemotingServices.Unmarshal(Type classToProxy, String url, Object data)
のエラーらしいのですが,それ以上がわかりません

何をしたら解決できるでしょうか?
608デフォルトの名無しさん:2007/04/18(水) 19:44:59
>>606
なるほど!自分の欲しいものが貰えるようにキャストすればいいんですね。
ありがとうございました
609デフォルトの名無しさん:2007/04/18(水) 20:07:11
>>602
少し教えて貰いたいんですがパッドの情報を取得するUsagePageとUsage値は何にしました?
1と2でマウスデバイスを指すのはわかるんですがパッドを取得するときはどうするんですか?
610607:2007/04/18(水) 20:22:05
すいません,自己解決しました
System.MarshalByRefObjectを継承していませんでした・・・
611594:2007/04/18(水) 23:30:56
遅レスになりました。
>>595
やっぱり無理なんですね。どうもありがとうございました。
612デフォルトの名無しさん:2007/04/19(木) 00:11:37
>>608
その理解はおかしいぞ
ここではsenderにはButton型のオブジェクトが入ってるはずだから
それに合わせてキャストしてるんだよ
613デフォルトの名無しさん:2007/04/19(木) 02:23:18
>>603
>欲しいのはコントロールのTEXTプロパティだけなんで他の情報が邪魔です。

ここで言っていることが怪しい
614デフォルトの名無しさん:2007/04/20(金) 00:38:49
キャストしてないからオブジェクトのタイプが出るんじゃないの?
615デフォルトの名無しさん:2007/04/20(金) 01:02:49
キーについて教えてください。
KeyCodeの数値をキーの文字名(ESCやF1、Enter)などに変換するにはどうすればいいでしょうか?

アプリケーション内部ではKeyEventArgsのままやりくりしてたのですが、
設定を保存したときに数値にKeyCodeで保存し、復元ができなくて困っています・・

ご教授ください。
616デフォルトの名無しさん:2007/04/20(金) 01:07:15
意味が分からんが
保存する時に int にキャストして数字で保存してやりゃ良いんじゃね
ロードする時は数値にしてから Keys にキャスト
617デフォルトの名無しさん:2007/04/20(金) 12:27:05
メニューからイベントメソッドを呼んでるんだけど、イベントメソッド内で実行している内容はほぼ同じで
あるメソッドにパラメータを与えて呼んでいるだけ。
メニュー項目一つ一つごとにイベントメソッドを定義するのは、無駄に感じます。
イベントメソッド自体にパラメータを与えることってできませんかね?
618デフォルトの名無しさん:2007/04/20(金) 12:33:50
全部同じメソッドを呼ぶようにすりゃいいんじゃね?
619デフォルトの名無しさん:2007/04/20(金) 12:35:19
>>618
その同じメソッドにたいして別々のパラメータを与えたいんです。
620デフォルトの名無しさん:2007/04/20(金) 12:39:48
いやだから、同じメソッド呼ばれるようにして、どっから呼ばれたかで判断すりゃいいじゃん。
621デフォルトの名無しさん:2007/04/20(金) 12:44:45
>>620
なるほど。どっから呼ばれたのはどうやって判定するのでしょうか?
EventArgs?
622デフォルトの名無しさん:2007/04/20(金) 12:50:16
最初の引数に sender て名前ついてるやん。

つうか、無駄に感じる程度ならたぶん無駄じゃないよ。
623デフォルトの名無しさん:2007/04/20(金) 19:45:52
どっから呼ばれたか判断して処理を分岐するんだろ?
結局メソッド分けるのと同じ。

だいたい同じ処理するメニューなんて存在するわけないんだから
メニュー項目ひとつひとつにメソッド定義するのが普通に決まってるだろ。

「無駄」って何が無駄なのか徹底的に考えてみろよ >>617
624デフォルトの名無しさん:2007/04/20(金) 19:49:54
senderになるオブジェクトのTagに引数にしたいもの仕込んでおけば。
625デフォルトの名無しさん:2007/04/20(金) 20:34:59
>>623
いやコンパイラの立場にたてばどっちでも一緒だけど、
イベントハンドラを一つにまとめちゃった方が意味的にわかりやすい場合も
ないことはないと思うよ。

まあ、あんまりないのは確かだけど。
いま例を挙げようと思ってもぱっと思い浮かばないし。
626デフォルトの名無しさん:2007/04/20(金) 20:38:08
例えばフォントサイズをいくつかの選択肢から選ぶようなメニューだったら1個にしたいかもね。
後から選択肢が増えたり減ったりしたとき変更が1ヶ所にまとまりそうじゃん。
627デフォルトの名無しさん:2007/04/20(金) 20:38:47
メニューに関してはふつうにあると思うが。
まあTagじゃなくて拡張プロバイダとか使うと思うけどね。
628623:2007/04/20(金) 23:45:15
んなもんねぇよ。
メニュー項目自体が既に別オブジェクトになっちゃってるんだから。

たとえばフォントサイズにしたって、senderからフォントサイズをどうやって決めるんだ?
普通なら各イベントから SetFontSize(n) ってメソッド呼ぶ方法を薦めるだろうが。

結局 switch するならイベント纏める意味ないと思うのは俺だけ?
Tagでいいってやつは好きにすればいいけど。
629デフォルトの名無しさん:2007/04/20(金) 23:46:27
コンテナ使え
630623:2007/04/20(金) 23:53:04
ちょっとまて
>>618 が言ってるのは各イベントから同じメソッドを呼べといってるんじゃないのか?
>>620 でなんで呼び出し元の話になるのかよくわからんが。
>>621 もなんで呼び出し元を気にする必要があるのかわからん。

もうオレ逝ってきます
631デフォルトの名無しさん:2007/04/21(土) 00:01:04
動的メニューならやるっしょ?
「お気に入り」を実装するとしたら。

DropDownごとにItemClickでまとめるか
各アイテム作るときに同じハンドラくっつけるっしょ
632デフォルトの名無しさん:2007/04/21(土) 00:16:05
>>628
Tagとか拡張プロバイダっていってんのに
完全無視ワロタ
633デフォルトの名無しさん:2007/04/21(土) 00:30:50
ToolStripMenuItemを継承して、必要な付加情報(お気に入り項目ならURIとか)をプロパティとして実装するって手もある。
俺は拡張プロバイダよりこっちの方がすっきりしてて好み。
634デフォルトの名無しさん:2007/04/21(土) 00:40:26
>>628
チミは自分がコンパイラ(あるいはCPU)の目線で問題を語ってる自覚がないんじゃないの?
自分も人間の癖にw
635デフォルトの名無しさん:2007/04/21(土) 00:49:34
>>633
おいらも、カスタムコントロール作る派に1票
コントロールを生でつかうよりは、
仕様に応じたプロパティを追加したりして、属性もきちんと付与したりしたほうが
いろいろ、便利じゃない?
636デフォルトの名無しさん:2007/04/21(土) 03:06:46
インスタンスメソッドへの参照とGCに関しての質問です.

public delegate void Handler();
public class Foo {
public event Handler SomeEvent;
public void DoFoo() {
SomeEvent();
}
}

こんな感じでイベントを出すクラスFooがあるときに

public class Bar {
private int _attr1 = 1;
public void DoBar() {
Console.WriteLine(_attr1);
}
}

こんな感じでフィールド値を使ってHandler互換な
インスタンスメソッドDoBar()を持つクラスBarを作ったときに,

Foo foo = new Foo();
Bar bar = new Bar(); // (1)
foo.SomeEvent += bar.DoBar;
bar = null;

こんなコードを書いたとき,barそのものへの参照がなくなったとしても
インスタンスメソッドDoBar()への参照があるので,
(1)でnewしたBarオブジェクトはGCされないと考えておkですか?
637デフォルトの名無しさん:2007/04/21(土) 03:12:37
まあおk
638デフォルトの名無しさん:2007/04/21(土) 03:26:38
>>637
どもです.
再利用可能なイベントハンドラを用意したいんですけど,
イベントハンドラ中で使う値を変更可能にしたい場合,
上のBarみたいなクラスを用意するしかないんですかね・・.
(_attr1はコンストラクタで変更可能にする)
639デフォルトの名無しさん:2007/04/21(土) 07:26:17
イベントハンドラを登録してからも変更したいならそうするしかないわな
640デフォルトの名無しさん:2007/04/21(土) 12:36:24
再利用可能なイベントハンドラって何のこっちゃ、と思うのは俺だけだろうか。。
641デフォルトの名無しさん:2007/04/21(土) 18:29:24
似たような処理になるイベントとかあるじゃん。
具体処理は別オブジェクトにやらせたりすれば抽象化もできるし。
642デフォルトの名無しさん:2007/04/21(土) 22:05:23
まあやってることは馬鹿なことだと思うよ。
643デフォルトの名無しさん:2007/04/21(土) 22:42:40
匿名メソッドって匿名じゃなくて名無しですよね?
644デフォルトの名無しさん:2007/04/21(土) 23:10:42
リッチテキストボックスに自前でポップアップメニューを追加しているのですが、
同コントロールのメソッドに Delete() が無いのでどうやって実現しようか悩んでいます
現在は this.richTextBox1.SelectedText = ""; でやってますが、
一般的?なやり方はどうなのか教えてください
645644:2007/04/21(土) 23:11:18
実現したいのは選択テキストの削除です
646デフォルトの名無しさん:2007/04/21(土) 23:16:48
それで問題ない
647デフォルトの名無しさん:2007/04/21(土) 23:17:30
>>646
ありがとうございました
648デフォルトの名無しさん:2007/04/21(土) 23:33:22
>>643
偽名やペンネームを使うだけでなく名前を秘匿することも匿名と呼ぶよ〜。
でもこういう匿名デリゲートはいやだ
delaget void <丶`∀´>(´・ω・`)(`ハ´  )さん() 
649デフォルトの名無しさん:2007/04/21(土) 23:40:47
>>643
言語によってAnonymousを匿名〜と訳すものと無名〜と訳すものがある。それだけ。
650デフォルトの名無しさん:2007/04/21(土) 23:48:47
名無しさんがデフォルトの某掲示板は匿名掲示板と呼ばれます。
訳さなければAnonymousだし無名と匿名は日本人は区別してない。
あんまり。
651デフォルトの名無しさん:2007/04/21(土) 23:51:18
>>643
ちゃんと名前のついたメソッドがどこかに自動的に作られ、それがプログラマからは見えなくなっているだけ、
なのだから、「匿名」でもいいのでは?

というか、単なる anonymous の訳語ですがな。
652デフォルトの名無しさん:2007/04/21(土) 23:54:50
お前ら食いつき良すぎね?
653デフォルトの名無しさん:2007/04/22(日) 01:37:51
こういうときにしか出てこないのかよおまえら
654デフォルトの名無しさん:2007/04/22(日) 02:13:30
C++最高
655638:2007/04/22(日) 08:37:43
作ってるアプリでPropertyChangedイベントのハンドラが
プロパティ名とそこでnew()するクラス以外同じだから
そこだけ穴あけたいと思っただけです.
「new()するクラス」のほうはGenericsで穴空けられるけど
「プロパティ名(string)」の方はハンドラとしてdelegateの
シグネチャが決められていると穴をあけられない状況.
JavaScriptみたいにdelegateにプロパティを付加したいイメージですかね.

とりあえずこんな感じに書けるような実装でおちつきますた.
foo.PropChanged = new ListPropChangedHandler<FooView>("propname").Handle;
656デフォルトの名無しさん:2007/04/22(日) 15:29:36
よく考えたらお前らさ、Bを経験しないで
いきなりCから行っちゃったやつばっかだろ?
657デフォルトの名無しさん:2007/04/22(日) 15:30:45
B...B...Brainfuck?
658デフォルトの名無しさん:2007/04/22(日) 17:27:33
誰か>>655の言ってることわかる人いる?
俺には何を言ってるのかさっぱりわからんのだけど。。
659デフォルトの名無しさん:2007/04/22(日) 17:31:08
わからん。>>655か俺かどっちかが根本的なところで勘違いしてる気がする。
660デフォルトの名無しさん:2007/04/22(日) 21:18:52
+=だろ。
661638:2007/04/23(月) 07:35:16
既存のイベントがあるんだけど,そのイベントに登録するハンドラが
大量なわりにほとんど同じなので,最小限のパラメタ化だけしたものを
みんなに再利用してほしいなぁ,という話です.
何しろnew()する型とプロパティ名だけと書き方だけ知っていれば
深く考えなくてもイベントハンドラが登録できる状況を用意したいです.
(ほんとはもうちょっとパラメタ多いですけど・・)

あの後考え直して,こんな感じでハンドラ作成ユーティリティメソッドを作っておいて
public PropertyChangedHandler CreateListPropChangedHandler<PropViewType>(string propName)
where PropViewType: new() {

return delegate(object sender, PropertyChangedEventArgs e) {
// new PropViewType()したりpropNameを使ったり
};
}

こんな感じで使ってもらおうかなと考え直しました.
// fooはPropertyChangedという既存のイベントを持つクラスのインスタンス
foo.PropertyChanged += CreateListPropChangedHandler<FooView>("propname");
662638:2007/04/23(月) 07:36:42
あああ,C#のdelegateってクロージャじゃないから
661のだとpropNameがおかしくなりそうだ・・・.だめぽ.
663デフォルトの名無しさん:2007/04/23(月) 07:37:43
PropertyChangedEventArgsはプロパティ名持ってるだろうが。
664638:2007/04/23(月) 07:39:39
はい,PropertyChangedEventArgs.PropertyNameの値が
propNameとして渡された値と同じかどうかで処理が変わるような
イベントハンドラなんです.
665638:2007/04/23(月) 07:42:10
なんかもうただのユーティリティ関数用意して
無名delegateで呼んでもらえばいいやな気分・・・
利用者の記述量と覚えないといけない文法とか注意点が増えていやだな・・・
666デフォルトの名無しさん:2007/04/23(月) 07:49:31
AttachSomeEvent<TView>(TView view, String propertyName) where: TView: INotifyPropertyChanged, new();

でよくないか?型推論が利くから<>の記述もいらなくなるし。
(C#3.0だったら、そのまま拡張メソッドにも出来るな)
667638:2007/04/23(月) 07:55:54
666の意図をちゃんと理解できてるかわからないですけど
INotifyPropertyChangedをimplementsしてる型とPropViewType(TView)型は別物です.
INotifyPropertyChangedをimplementsしてるオブジェクトの
PropertyChangedイベントを受けて,ハンドラでPropViewType(TView)を生成したいです.
668638:2007/04/23(月) 08:15:56
こういう感じのことを言ってますか?

// library provider
AttachSomeEvent<TView>(
INotifyPropertyChanged notifier, String propertyName
) where TView: new() {

notifier.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e) {
// new TView()したりpropertyNameを使ったりする再利用したいコード
};
}

// library user
AttachSomeEvent<FooView>(foo, "propname");

たぶん661のコードと同じで,2回以上AttachSomeEvent()が呼ばれたあとに
fooのPropertyChangedイベントが発火すると望ましくない結果になると思います.
具体的には登録したすべてのイベントハンドラの処理中では
propertyNameの値は最後にAttachSomeEvent()に渡された
propertyNameパラメタの値になっていると思います.
(Javaがメイン言語なのでC#のdelegateはちゃんとしらないんだけど違ったかな?
「思います」ばっかりで申し訳ない・・)
669デフォルトの名無しさん:2007/04/23(月) 08:19:41
やっぱり何いってるのかサッパリわからん。
処理が定型ならイベントにする必要がそもそも無いはずと思うんだけど。。
670638:2007/04/23(月) 08:22:12
> 既存のイベントがあるんだけど,そのイベントに登録するハンドラが
> 大量なわりにほとんど同じなので,最小限のパラメタ化だけしたものを
> みんなに再利用してほしいなぁ,という話です.

イベントはすでに私以外の人が用意してますです.
671638:2007/04/23(月) 08:23:22
662とか668はクロージャとかがわかってないと意味わからないと思います.
672638:2007/04/23(月) 08:53:04
えー,非常に恥ずかしい報告です.
662や668のコードは期待通りに動くっぽいです.
ちゃんとdelegate理解してなかったぽ・・・.
673デフォルトの名無しさん:2007/04/23(月) 08:55:47
指定された文字列がファイル名として正しいかどうか判別するメソッドってありますか?
674638:2007/04/23(月) 09:21:56
Pathクラスのchar[] GetInvalidFileNameChar()メソッドと
Stringクラスのint IndexOf()メソッドを組み合わせたらとりあえずできそうです.
675638:2007/04/23(月) 09:27:20
delegateがクロージャっぽく動いてくれないのって
delegate内でforのインデックス変数とかを参照したり,
foreachで要素値を参照するようなときだけかな.調べるのチカレタ
676デフォルトの名無しさん:2007/04/23(月) 10:05:05
デリゲートより外側のスコープの変数にアクセスした場合
677デフォルトの名無しさん:2007/04/23(月) 11:28:56
ごめん、>>656は誤爆です。
678デフォルトの名無しさん:2007/04/23(月) 13:45:42
質問です。
二つのテーブルを用意して、特定の行をもう片方のテーブルに移動させるにはどうすればよいのでしょうか?
下のやり方だと
table2に追加したときに
「この行は既に別のテーブルに属しています」
というエラーが出てしまいます。

                DataTable table1 = new DataTable();
                DataTable table2 = new DataTable();
                DataColumn col = new DataColumn("aaa", typeof(string));
                table1.Columns.Add(col);
                table2.Columns.Add(col);
                DataRow row = table1.NewRow();
                row["aaa"] = "bbb";
                table1.Rows.Add(row);
                table1.Rows.Remove(row);
                table2.Rows.Add(row);
679デフォルトの名無しさん:2007/04/23(月) 16:17:44
>>675
かなじゃなくて試してから言えよ。鬱陶しいな
680デフォルトの名無しさん:2007/04/23(月) 20:20:04
>>679
君も鬱陶しいよ
681デフォルトの名無しさん:2007/04/23(月) 20:58:01
いや俺の方が鬱陶しいよ
682デフォルトの名無しさん:2007/04/23(月) 21:25:51
いやいや俺の方こそ鬱陶しいよ
683デフォルトの名無しさん:2007/04/23(月) 21:35:13

どうぞどうぞ
684デフォルトの名無しさん:2007/04/23(月) 22:41:27
>>678
そのエラーの通りなんだけど。
685デフォルトの名無しさん:2007/04/23(月) 22:57:57
C#で使えるAPI全部載ってる本って無いんですか?
いちいちネットで調べるのイヤで。個人的に本で読むほうが好きなので。
686デフォルトの名無しさん:2007/04/23(月) 23:07:43
>>678
その前に
>table2.Columns.Add(col);
で止まると思うが?
687デフォルトの名無しさん:2007/04/23(月) 23:07:44
たぶんおまいが思ってるより巨大な本になると思うよ
688デフォルトの名無しさん:2007/04/23(月) 23:10:26
>>685
apiって何だ?

.netフレームワークには山ほどクラスがあるけど全部読みたいの?
読むだけ無駄だと思うけどな。
689デフォルトの名無しさん:2007/04/23(月) 23:11:02
えーと、Aから順に引くのか?
それとも名前空間別で引くのか?
オンライン以外ありえない。
690デフォルトの名無しさん:2007/04/23(月) 23:11:39
>apiって何だ?
すいません。なんていえばいいのかわかんなくって。

>読むだけ無駄だと思うけどな。
まじっすか・・・
691デフォルトの名無しさん:2007/04/23(月) 23:12:05
ちがちが、オンラインじゃなくて、電子マニュアルとかまあそんな意味で。
692デフォルトの名無しさん:2007/04/23(月) 23:12:32
windows APIだって
全部載ってる本なんてないだろ。
693デフォルトの名無しさん:2007/04/23(月) 23:14:00
そもそもクラス数で数千もあるんだぞ。
1ページ1クラスっていうありえないつめ方でも数千ページいくんだぞ。
694デフォルトの名無しさん:2007/04/23(月) 23:14:27
たまにc#のコントロール全部乗ってる本ないかって聞かれるけど、ないと答えてる。
695デフォルトの名無しさん:2007/04/23(月) 23:16:10
それはさすがにあるんじゃないか?
俺は知らないけどさ
696デフォルトの名無しさん:2007/04/23(月) 23:16:18
なければ作ればいいじゃない
MSDNを全部印刷して製本Go!
697デフォルトの名無しさん:2007/04/23(月) 23:19:03
>>685
MSDNダウンロードして入れてみたら?
ローカルだからネットほどストレス無いし。
698デフォルトの名無しさん:2007/04/23(月) 23:21:45
うーん。そんなにあるんですか。
じゃ全部じゃなくてもかなりの数載ってるのって無いんですか?
とにかくいろいろ覚えたいんです。
まず元となるもの覚えないとなんかダメな感じがして。
699デフォルトの名無しさん:2007/04/23(月) 23:22:27
>697
本がいいんです。
700デフォルトの名無しさん:2007/04/23(月) 23:23:25
クラスライブラリは本を読んで覚えるような類のものじゃないだろ…
701デフォルトの名無しさん:2007/04/23(月) 23:24:36
>>698
英語とか習い始めるとき辞書のAから勉強するひとはいないんじゃないの?

702デフォルトの名無しさん:2007/04/23(月) 23:27:14
たぶん基本的なSystem名前空間とかのクラスリファレンスが欲しいんじゃないの

英語で言うと基本英単語500みたいな
703デフォルトの名無しさん:2007/04/23(月) 23:28:17
>>698
ダメな感じのままでいいんじゃね?向いてないよ
704デフォルトの名無しさん:2007/04/23(月) 23:28:28
もしそんな本があったとしてもメソッドやプロパティの説明は1行ずつだと思う。
MSDNのメンバーのページのように。

そんな本が本当に必要か?
705デフォルトの名無しさん:2007/04/23(月) 23:29:13
>英語で言うと基本英単語500みたいな
そう。そんなかんじのが欲しいんです。
なんかどうも取っ掛かりが無くて。
706デフォルトの名無しさん:2007/04/23(月) 23:29:45
じゃあvs2005についてたポスターやるよ。
707デフォルトの名無しさん:2007/04/23(月) 23:30:05
>そんな本が本当に必要か?
結構そういう本好きなんです。
708デフォルトの名無しさん:2007/04/23(月) 23:34:11
何の取っ掛かりが欲しいんだか。
最近死ぬほどC#関連本出だしたから好きな本選んで来いよ。
709デフォルトの名無しさん:2007/04/23(月) 23:35:56
>最近死ぬほどC#関連本出だしたから好きな本選んで来いよ。
いっぱいありすぎてよくわからん。
でも確かにそうですね。やっぱ地道に探すことにします。
710デフォルトの名無しさん:2007/04/23(月) 23:38:00
.NET Fx 3.5 完全マニュアル - 全メンバ サンプルコードつき



応接間の飾り物にちょうどよさそうだなw
711デフォルトの名無しさん:2007/04/23(月) 23:39:50
javaの本が売れなくなったからC#に乗り換えたのかな。
712デフォルトの名無しさん:2007/04/23(月) 23:50:02
週刊C#のすべて
毎週木曜発売

各号で一つのクラスについての詳細な説明とサンプルコード付き。
創刊号は整理に便利な特製バインダーがついて890円!! (通常定価1360円)


デアゴスティーニ♪
713デフォルトの名無しさん:2007/04/23(月) 23:53:51
創刊号はSystem.Arrayクラスあたりかな。
714デフォルトの名無しさん:2007/04/23(月) 23:56:11
System.Activatorだったら誰も買わんがな。
715デフォルトの名無しさん:2007/04/23(月) 23:58:17
>リファレンス本
実は1.0か1.1の頃は出てた希ガス。よくある厚めの技術書のやつが、
10冊オーバーであったような。威圧感を出すためだけの存在。

と、見つけた。
ttp://www.amazon.co.jp/dp/4891003138
ttp://www.amazon.co.jp/dp/4891003324
716デフォルトの名無しさん:2007/04/24(火) 00:02:32
>サンプルコードまでMSDNライブラリ(Visual Studio.NETのHELP)とそっくりそのまま
>同じなのにはわが目を疑ってしまいました。
>本を置く場所に余裕があって、リファレンスはどうも紙ベースでないとやりにくいという方
>以外にはお奨めできません。
>HELPと全く同じリファレンスなど誰が購入するでしょうか?
>Microsoft公式解説書には良いものが多いのに、なぜこうなってしまったのでしょうか?

Helpの内容を書き改めるだけの労力はだれもかけたくない。
100%報われないのは分かっているから。
717デフォルトの名無しさん:2007/04/24(火) 00:05:26
そんなもんホントに買う奴いるんかね。
718デフォルトの名無しさん:2007/04/24(火) 00:09:02
個人で買うアホはいない。
よその会社で見たことはある。
719デフォルトの名無しさん:2007/04/24(火) 00:11:03
社長室にでも飾るんかいな
720デフォルトの名無しさん:2007/04/24(火) 00:12:17
だから威圧感出すためだけの飾りだって。
実は丸写しじゃないらしいんだが(今は知らない)そもそも人間に読める
量じゃないのでほとんどの人はわからない。
721デフォルトの名無しさん:2007/04/24(火) 00:17:14
>>686
>その前に
>>table2.Columns.Add(col);
>で止まると思うが?

複数のテーブルで同じカラムの組を指定するのはまずいんですかね?
とりあえずとまりません。


>>684
>そのエラーの通りなんだけど。

一度属した行を解除するにはどうしたらよいのですか?
Removeだと思ったのですが・・・
722デフォルトの名無しさん:2007/04/24(火) 00:26:45
列 'aaa' は既に別の DataTable に属しています。
723デフォルトの名無しさん:2007/04/24(火) 00:29:56
おとなしくtable2.NewRow() したら?
724684:2007/04/24(火) 03:56:20
>>721
確かめてないけど、table1.Add(row) と table1.Remove(row) を消しても
table2.Add(row) でエラーでない?
ようは row = table1.NewRow() で rowがtable1に属することが決定するんじゃないのかと。
725デフォルトの名無しさん:2007/04/24(火) 07:43:27
>>721
> >>table2.Columns.Add(col);
> >で止まると思うが?

> とりあえずとまりません。

うちの環境ではとりあえず止まります。

> Remove
で正しい。

たぶんやりたいことはこんな感じ?

DataTable t1 = new DataTable();
DataColumn c1 = new DataColumn("aaa", typeof(string));
t1.Columns.Add(c1);

DataTable t2 = t1.Clone();

DataRow r1 = t1.NewRow();
r1["aaa"] = "bbb";
t1.Rows.Add(r1);

DataRow r2 = t2.NewRow();
for (int i = 0; i < r2.ItemArray.Length; i++)
r2[i] = r1[i];

t1.Rows.Remove(r1);
t2.Rows.Add(r2);
726デフォルトの名無しさん:2007/04/24(火) 12:43:19
C# 2005で質問なんですけど

private void Form1_KeyDown(object sender, KeyEventArgs e)

this.KeyPreview = true;

でキーイベント受け取ろうとしてるんですけど全然キャッチしてくれません
新規プロジェクト作ってやってみても無理でした

やりたいのは↓です
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/231winentermove/winentermove.html
727デフォルトの名無しさん:2007/04/24(火) 13:27:41
イベントに登録してないってオチじゃ・・・
728デフォルトの名無しさん:2007/04/24(火) 14:00:10
登録してないです
VBみたいに書くだけでいいのかと思ってました
729デフォルトの名無しさん:2007/04/24(火) 14:04:26
( ´ー`)フゥー...ー
730デフォルトの名無しさん:2007/04/24(火) 14:05:40
C#初めて2日目でグーグル先生だけが友達なもので
731デフォルトの名無しさん:2007/04/24(火) 14:19:44
Form1のKeyPreview を true にしてキーボードイベントを登録できるようにし、
KeyDownイベントハンドラを. 追加します。
これにより、ある特定でのキー入力によりテキストボックス
間のカーソル移動ができるようになり

とかかいてるけどわかんねぇ
やってるつもりなのにな
732デフォルトの名無しさん:2007/04/24(火) 14:40:24
WebClientのUploadFileを使って鯖にファイルをPUTしてるのですが、アップロードしたファイルの日付情報をローカルと同期させる方法が分かる方いないでしょうか
ヘッダに何か渡せばいいのかなと思っていますが見つけられていません
ご存知の方いましたら教えてください
733デフォルトの名無しさん:2007/04/24(火) 14:49:57
KeyDown += new KeyEventHandler(Form1_KeyDown);
これか・・・・こんなんでずっとつまるとかあほくせぇ
本買うしかないな経費でおちないかなー
734732:2007/04/24(火) 15:15:04
すみません自己レスです。
アップロード後のファイルにPROPPATCHで後から変更する方法で対応できました。
できればUploadFile時にまとめて設定したいと思いますので、ご存知の方は教えていただければと思います。
735デフォルトの名無しさん:2007/04/24(火) 15:39:22
>>733
VisualStudio2005じゃないのか?
736デフォルトの名無しさん:2007/04/24(火) 15:46:05
そうだけど
C#2005でわかるでしょ
737デフォルトの名無しさん:2007/04/24(火) 16:28:03
わかるがキモイ
738デフォルトの名無しさん:2007/04/24(火) 16:39:15
きもくてごめんね^^
739デフォルトの名無しさん:2007/04/24(火) 16:39:52
J#2005とか日本の2005年大会みたいでかっこいいじゃん
740デフォルトの名無しさん:2007/04/24(火) 16:40:36
そうだねプロテインだね
741デフォルトの名無しさん:2007/04/24(火) 16:57:25
どんだけ〜
742デフォルトの名無しさん:2007/04/24(火) 17:27:32
コンソールアプリケーションを作ってるので,Debugクラスの出力を
他の所(普通のコンソールと分離できて,リアルタイムで確認できれば何でもいい)
に出力したいんだけど,どこに出すのが一番いい?
743デフォルトの名無しさん:2007/04/24(火) 17:30:16
UDP
744デフォルトの名無しさん :2007/04/24(火) 17:51:47
すいません、教えてください。
RichTextBox内で、シンタックス(C言語ならintとか)
をハイライトで表示するようなエディタもどきを練習がてら
作ってるんですが、fontDialogを使って文字を調整すると
全部の色が黒に塗り変わってしまいます。
自分の知識不足だとおもいますが、どなたか
文字サイズだけを変える方法を知ってらっしゃる方がいれば
教えていただきたいです。
745デフォルトの名無しさん:2007/04/24(火) 17:56:39
>>744
そういうのは独自実装。
746735:2007/04/24(火) 19:43:52
>>736
だったら >>733 なんてVSが吐くだろうが
747デフォルトの名無しさん:2007/04/24(火) 19:45:14
吐くほど不味いか?
748デフォルトの名無しさん:2007/04/24(火) 20:21:46
もうお前ふらっとスレ行けよ
749デフォルトの名無しさん:2007/04/24(火) 20:38:54
あえて釣られてみる…

>>731
> KeyDownイベントハンドラを. 追加します。

とりあえず、「表示」メニューで「プロパティ ウィンドウ」。
プロパティウィンドウのなかの稲妻みたいなアイコン(イベントアイコン)を押す。
で、そのなかのKeyDownの隣にある欄をダブルクリック→空のイベントハンドラが
自働で作成されるので、そのなかにコードを書くべし。
750デフォルトの名無しさん:2007/04/24(火) 22:41:17
C#でテスト駆動開発をやりたいと思っています。
参考になる本やサイトなどがありましたら教えてください。

751デフォルトの名無しさん:2007/04/24(火) 23:01:19
>>750
NUnit
752デフォルトの名無しさん:2007/04/25(水) 07:26:17
すいません、微妙にスレ違いかもですが、Visual Studio 2005でいつの間にか空白やら
タブやらが→と・で表示されるような設定になっちゃってるんですが、これを解除するには
どうしたらいいんでしょうか?
753デフォルトの名無しさん:2007/04/25(水) 07:29:38
Ctrl+R, Ctrl+W
754752:2007/04/25(水) 07:35:37
>>753
ありがとうございます。助かりました。
755731:2007/04/25(水) 09:43:45
>>749
すげー
やっぱ本買ったほうが良いですね
756731:2007/04/25(水) 10:06:41
今度はフォーカス写ったときに全選択できるようにしようとしてつまってしまった
    Enter += new System.EventHandler(textBox1_Enter);
private void textBox1_Enter(object sender, EventArgs e)
{
textBox1.SelectAll();
}
ttp://jeanne.wankuma.com/tips/textbox/onfocusselectall.html

雷から自動作成してみたけどだめでした
イベントすら発生してないみたいです
757デフォルトの名無しさん:2007/04/25(水) 10:14:51
ふらっとC#, C♯, C#(初心者用) Part15
http://pc11.2ch.net/test/read.cgi/tech/1176387265/
758デフォルトの名無しさん:2007/04/25(水) 10:17:07
Enterで検索かけたらなんかでてきた
ありがとう
759デフォルトの名無しさん:2007/04/25(水) 10:20:40
ふらっとC#, C♯, C#(初心者用) Part15
http://pc11.2ch.net/test/read.cgi/tech/1176387265/
760デフォルトの名無しさん:2007/04/25(水) 10:23:19
あっちいけってことか
まぁForm1にかいててだめだっただけだった^^
さいなら
761デフォルトの名無しさん:2007/04/25(水) 12:37:09
まあC#のイベントが初心者にはわかりづらいのは確かだと思う。
デリゲート理解してても。

最初はVB.NETで慣れた方が理解しやすいかも。
でもVB.NETから入ると、なんでC#にはHandlesに相当する機能がないんだ、
みたいな体になるかもしれんが。
762デフォルトの名無しさん:2007/04/25(水) 14:08:25
VB.NETは中途半端だからやめた方が良い
素直にC#かC++にしておけw
763デフォルトの名無しさん:2007/04/25(水) 17:22:56
C#2.0なら textBox1.Enter += textBox1_Enter;
みたいな書き方も可能だからそんなに難しくないと思うけどなあ
764デフォルトの名無しさん:2007/04/25(水) 22:29:15
俺はVB6.0から来て、VB.netがなんか微妙だったからC#やってみたらはまったなぁw
765デフォルトの名無しさん:2007/04/25(水) 22:50:16
VB.netなんてMSがVBユーザ捨てない為、無理やり考えたもんでしょ・・・
766通りすがりのオッサン:2007/04/25(水) 23:10:29
アセンブラ(Z80,MC68000)→C言語(UNIX系)→VB古いの→C++(UNIX系)→java(JDK1.0〜)→VC++MFC→C#.NET(VS2005)
っと渡り歩いてきた感想からすると、結構、最強言語かもしれないと思ったりする。

ただ・・・、性能だすのがなかなか、癖あるね〜
javaとは全然違うけど、JNIとかと比べたら、unsafe,fixedはわかりやすいし、昔のinline assemblerと比べたら、
はるかにエレガントだと思うけど・・・

ハイエンドマシンへの対応状況がネックかもしれないね。
MIPS、SPARCプロセッサ、PowerPCのSMP構成とか、使ったこと無いけどCELLとか、とか、とか・・・
でも、そのうち、Xeonのクラスタリングが追い抜くのかな?
767デフォルトの名無しさん:2007/04/25(水) 23:17:10
MDXのDirectInputを用いてキーボードの情報を受けるプログラムを作っているのですが
半角全角キー、CapsLockなどの状態をトグルで扱うようなキーを入力すると
ずっとそのキーが押されっぱなしになった状態になります。

押されたかどうかを判定したいだけなので代替手段があるのでしたら教えていただけませんか?
768デフォルトの名無しさん:2007/04/25(水) 23:20:10
C#はあっさりサラダでおいしいけど、それだけで腹を満たすのにはちょっと難ということか
769デフォルトの名無しさん:2007/04/25(水) 23:22:10
健康にはよさそうだな
770デフォルトの名無しさん:2007/04/26(木) 00:41:24
>>766
うわ、オレの経歴かと思うくらいそっくり…w
そういうオレも現時点では限りなくC#最強だと思う。特にWindowsなら。

パフォーマンスがどうのとかは、最近のPC性能の高さがカバーしてくれる。
それでもダメならアルゴリズムや手法自体がダメ、或いは今の時代では無理な課題だと切をつける。

昔ならCで作って遅い→アセンブラって以降したけど、C#で遅い→C++って戻る気がしないこの頃。
771デフォルトの名無しさん:2007/04/26(木) 04:42:01
多次元配列の片方の次元?のサイズを取得する方法を教えてください。

例えば、int array[10, 20] とした場合
array.Length だと多次元配列全体の大きさである 300 が取得できますが
片方の、10 もしくは 20 という 1 次元分のサイズの方を取得したいのです。
よろしくお願いします。
772デフォルトの名無しさん:2007/04/26(木) 04:45:14
多次元配列全体の大きさ 200 ですね、寝ぼけていました。
773デフォルトの名無しさん:2007/04/26(木) 04:48:12
array.GetLength
774デフォルトの名無しさん:2007/04/26(木) 07:32:14
>>773
どうもありがとうございます。
Length だけじゃなくて、GetLength というメソッドもあったのですね。
助かりました。
775デフォルトの名無しさん:2007/04/26(木) 09:49:53
C#でnsfファイルの再生をするにはどうすればいいんだろう。
776デフォルトの名無しさん:2007/04/26(木) 09:57:41
C#で角度入力したらその角度に線が引かれるようなものを作りたいのですが
ライブラリとかってありますでしょうか
777デフォルトの名無しさん:2007/04/26(木) 10:15:10
中学校に入り直したら?
778デフォルトの名無しさん:2007/04/26(木) 10:30:49
中学校入りなおしたらわかるのか
君も仕事いきなさいよ家でPCばっかしてないで
779デフォルトの名無しさん:2007/04/26(木) 10:38:44
仕事中に2ch見てる悪い子いっぱい
780デフォルトの名無しさん:2007/04/26(木) 11:27:42
正直高校一年に入りなおせばわかると思うよ。
781デフォルトの名無しさん:2007/04/26(木) 12:38:08
こういっちゃなんだが、>>777-780はたぶん分からないんだと思う。
屁は屁元から騒ぎ出す、という感じだなw

三角関数は中学数学でも高校の数Iでも出てこないぞ
たぶんピタゴラスで>>776が解決できると勘違いしてるってところだろうがな
なんにしろ恥ずかしい奴(ら)だなw
782デフォルトの名無しさん:2007/04/26(木) 12:45:31
三角関数とかはもうわかってるけどそれをGUIであらわしたいだけなんだが^^;
783デフォルトの名無しさん:2007/04/26(木) 12:48:05
Canvasに線を引く方法がわかれば後は自力で作れるだろう。
784デフォルトの名無しさん:2007/04/26(木) 13:24:42
小学5年生のおれが来ましたよ。

private PointF GetVector( double dblAngle, int iLength )
{
    double rad = ( 2 * Math.PI * ( -dblAngle ) ) / 360;

    return new PointF( (float)( Math.Cos( rad ) * iLength ), (float)( Math.Sin( rad ) * iLength ) );
}

private void Form1_Paint( object sender, PaintEventArgs e )
{
    double dblAngle = 30;
    PointF pntOrigin = new PointF( 100, 150 );
    int iLength = 100;

    PointF vector = GetVector( dblAngle, iLength );
    PointF pntEnd = new PointF( vector.X + pntOrigin.X, vector.Y + pntOrigin.Y );

    e.Graphics.DrawLine( SystemPens.Highlight, pntOrigin, pntEnd );
    e.Graphics.DrawLine( SystemPens.ControlText, pntOrigin, new PointF( pntOrigin.X + iLength, pntOrigin.Y ) );
}
785デフォルトの名無しさん:2007/04/26(木) 14:06:26
ラジアンって数一じゃなかったっけ・・・(´・ω・`)
786デフォルトの名無しさん:2007/04/26(木) 14:31:46
数一なんて小学生にでも分かるぜ。
787デフォルトの名無しさん:2007/04/26(木) 14:37:29
俺は前世から分かってたぜ
788デフォルトの名無しさん:2007/04/26(木) 19:12:00
アホばっかだなココ
789デフォルトの名無しさん:2007/04/26(木) 19:24:11
WPFだとSystem.WindowsにVector構造体があるんだな
感動した
790デフォルトの名無しさん:2007/04/26(木) 20:10:15
C#ってJavaScriptみたいな手っ取り早さというか、分かりやすい柔軟性がある。
DがC++とJavaの欠点を見直した比較的低水準言語を目指すというのなら、
C#はJavaとECMAScriptっぽい高水準事務処理言語といったところだろうか。
今すごい勢いで虫歯が飛んだ。
791デフォルトの名無しさん:2007/04/26(木) 20:18:29
Dイラネ
C#のネイティブコンパイラでいいのに
792デフォルトの名無しさん:2007/04/26(木) 20:38:00
教えてください、

クラスをDLLで作成し、クライアントのEXEのプロジェクトと
サーバのWebServiceのプロジェクト双方に参照設定し、
このクラスをパラメータとしてクライアントからWebService
を呼びたいのですが、
DLLのネームスペースはaaa.test.xxxxxなのに、
WebService側はWindowsApplication1.localhost.xxxxx
となっていて同じクラスとして認識してくれません。

どなたか対処方法分かりませんか
793デフォルトの名無しさん:2007/04/26(木) 20:53:36
>>783
それってdelphiじゃない?
794デフォルトの名無しさん:2007/04/26(木) 22:47:59
>>792
あきらめろ。
まあプロキシ自分でいじったらできるよ。
そんなことしたくないけど。
795デフォルトの名無しさん:2007/04/27(金) 03:21:27
$getstr = new Win32::API("strmng", "mng", "PNNPN", "N");
$outstr = $getstr ->Call($instr, 20);
学習用ソフトをperlから移植していて
いろいろ試行錯誤しながら試しているのですが
どうしても巧くいきません。
どなたか教えていただけないでしょうか?
以下テスト用のコードです
[DllImport("strmng.dll", EntryPoint = "mng",SetLastError = true)]
public static extern int mng(string dr1, int dr2);
string ss = "うんこだいスキー!!";
int r = mng(ss, 20);
796デフォルトの名無しさん:2007/04/27(金) 05:14:32
さすがにDLLの仕様はエスパーできない
797デフォルトの名無しさん:2007/04/27(金) 07:26:51
>>795
その関数のCやなんなりでの宣言を見せてみろ。
798デフォルトの名無しさん:2007/04/27(金) 07:30:53
>>795
マルチ死ね
799デフォルトの名無しさん:2007/04/27(金) 08:25:32
>>798
ごめんなさい
>>797
Cだと下記の表現みたいです・・
int WINAPI mng(char*, int)
>>796
DLLの関数を調べるツールってご存じないですか?
800デフォルトの名無しさん:2007/04/27(金) 11:43:53
どううまくいかないのか書けやボケ
関数は呼ばれてるのかとか文字化けするのかとか
LastErrorとってるならそれも出せハゲ。
801デフォルトの名無しさん:2007/04/27(金) 13:27:03
>>799
それじゃあperlのと一致しないじゃないか
802デフォルトの名無しさん:2007/04/27(金) 15:44:44
関数のフォーマットが不正です?
と出るから
引数がまちがっていると思うんですが・・・
>>801
別の関数でした。。
$getstr = new Win32::API("strmng", "mng", "PN", "N");
です
803デフォルトの名無しさん:2007/04/27(金) 16:44:08
もうふらっとスレ行ってくれ……
804デフォルトの名無しさん:2007/04/27(金) 20:09:57
[DllImport( "strmng.dll", CharSet = CharSet.Auto )]
public static extern int mng( string dr1, int dr2 );
805デフォルトの名無しさん:2007/04/27(金) 20:12:34
最初の引数が読み取るためのポインタか書き込むためのポインタかで変わってくるな。
806デフォルトの名無しさん:2007/04/27(金) 22:50:42
>>802

>$getstr = new Win32::API("strmng", "mng", "PNNPN", "N");
何で intに "N" 渡してるんだ?
ということで…

>>804は没。
807デフォルトの名無しさん:2007/04/27(金) 22:53:30
第4引数は戻り値の型だろ
808デフォルトの名無しさん:2007/04/27(金) 23:04:05
文字は引数の型か。

ttp://homepage3.nifty.com/hippo2000/perltips/perllha.htm
>N 数値(LONG)
>I 数値(Integer)
>P その他(文字列、構造体など)


809デフォルトの名無しさん:2007/04/27(金) 23:07:13
perlのlongって何ビットなんだ?
810デフォルトの名無しさん :2007/04/27(金) 23:40:54
textboxとかでコレクションに設定した文字列を
取得するには、どうすれば良いのでしょうか。
すいませんが教えてください
811デフォルトの名無しさん:2007/04/27(金) 23:41:42
string変数につっこめばよい。
812デフォルトの名無しさん:2007/04/27(金) 23:42:31
意味不明
ふらっとの方が向いてるよ。
813デフォルトの名無しさん:2007/04/28(土) 13:52:56
>>810に勘で答えてみる
TextBox textBox;
List<string> list;
foreach(string str in list){textBox.AppendText(str + "\r\n");}
814810:2007/04/29(日) 03:54:45
いやAutoCompleteStringCollectionに設定したstring達の
取得設定方法に関してで、設定、っていうか加えるなら
this.textBox1.AutoCompleteCustomSource.Add("ghq");
みたいな感じで出来るのがわかるんですが取得方法
がわからないんです。
フォーム(デザイナ)画面で、プロパティタブ開いて
AutoCompleteCustomSourceの欄の(コレクション)で書き込んだ
stringはデザイナのcsを見ると
this.textBox1.AutoCompleteCustomSource.AddRange
で設定されてるのは分かったんですが、取得方法がいまいち
わかりません。
初心者の質問で申し訳ないですが、教えていただけないでしょうか。
815デフォルトの名無しさん:2007/04/29(日) 04:07:19
プロパティ set getで検索
816デフォルトの名無しさん:2007/04/29(日) 04:40:42
>>814
なにが「いや」だよ。
>>810の説明でわかるヤツなんていねーよ。
ほんとにコミュニケーション能力というか、日本語力というか相手に伝えられないヤツが多いな…

指定して取得したいなら
string text = textBox1.AutoCompleteCustomSource[n];

列挙したいなら
foreach (string text in textBox1.AutoCompleteCustomSource)
817デフォルトの名無しさん:2007/04/29(日) 05:02:04
>>811はエスパーかwよくわかったな。
818デフォルトの名無しさん:2007/04/29(日) 13:40:19
すみません。教えてください。
OnPaint(PaintEventArgs e) の無効領域を、OnPaint( )内でクライアントエリア最大にできないものでしょうか。

Panelのクライアントエリアに背景画像があって、その上に四角形を描いています。
スクロールしたときに、背景だけ動かして、四角形は動かさないようにしたいのです。
OnScrollでInvalidateしても、いったんスクロールしてからOnScrollが呼ばれるみたいで、四角形がガクガクします。
819デフォルトの名無しさん:2007/04/29(日) 13:49:29
背景も自分で描くのはダメなの?
820デフォルトの名無しさん:2007/04/29(日) 13:56:16
>>819
コメントありがとうございます。

OnPaintで背景も描いています。
ただ、Panelのスクロールバーでスクロールしたときに、実際に再描画が発生しているのは
スクロールした結果発生した無効領域だけなのです。

スクロールバーを50ピクセル下に動かすと、クライアント領域は50ピクセル上にスクロールします。
その結果として、クライアントエリアの下50ピクセル高さ幅ぶんだけ再描画になります。
821デフォルトの名無しさん:2007/04/29(日) 13:59:46
Control.CreateGraphicsは?
822デフォルトの名無しさん:2007/04/29(日) 14:06:08
>>821
それはまずいでしょw

>>820
パネルの位置が変わった時点で無効化すればいいと思うけどな。

試してないけど、パネルじゃなくてPictureBoxならSetStyleでResizeRedraw指定すると
希望するような動作になったような気もしたけど。
823デフォルトの名無しさん:2007/04/29(日) 14:46:15
>>822

実は、背景が地図で、スクロールしたときに地図上の位置を示す中央のターゲットマークの
描画位置を保持したいのです。

>パネルの位置が変わった時点で無効化すればいいと思うけどな。
はい、今はOnScrollで無効化しています。
しかし、これでもスクロールの後で無効化が発生するため、四角形がガクガクします。

ガクガク、というのは次の例のような動作です。
(1)Panelのスクロールバーを50ピクセル下へ
(2)Panel自身の機能でクライアントエリアが50ピクセル上へ。
このとき、背景とともに、ターゲットマークも上へ移動します。
Win32で言えば、クライアントエリアを上へBitBltしている様子です。
(3)無効になったエリアの再描画のためにOnPaintが呼ばれる
無効になった領域*だけ*に背景(と場合によってはターゲットマークの一部)を描画。
(4)OnScrollが呼ばれて、この中でInvalidate
(5)クライアントエリア前面再描画のためににOnPaintが呼ばれる。
背景とターゲットマークを完全に再描画。

この例の場合、ターゲットマークはいったん上へ移動してから再描画されます。

ResizeRedrawは、サイズが変わったときだけで、スクロールしたときには影響がないようです。

ScrollableControlを使うのが無理があるのかなあ。
824デフォルトの名無しさん:2007/04/29(日) 14:54:58
単にダブルバッファリングすりゃいいんじゃね?
825デフォルトの名無しさん:2007/04/29(日) 15:00:20
>>824
おつきあいありがとうございます。

ダブルバッファリングはしています。
826デフォルトの名無しさん:2007/04/29(日) 15:06:23
>>823
ああ、やっと意味がわかった。

Win2K以降はWindowの位置が変わったときのBitBltはシステムが自動でやってくれる
みたいだけど、それが裏目にでるというわけか。

じゃあUserPaintフラグ指定してもダメかな?
827デフォルトの名無しさん:2007/04/29(日) 15:08:31
スクロール位置だけ管理してくれて描画には手を出さんといてってことか。
828デフォルトの名無しさん:2007/04/29(日) 15:30:16
>>826
ありがとうございます。
UserPaintを試してみましたが、関係がないようです。

>>827
はいそうです。

ただ、ターゲットマークを表示していないときには、BitBltはやってくれた方が再描画エリアが
少ないので動作が軽くなるかもしれません。
ターゲットマークを表示しているときだけ、スクロールで発生するOnPaintの無効領域を
クライアントエリアいっぱいにできれば済むのですが。

ところで私の書き込みってsageなくて良いんですかね。
どこかで「質問者はageろ」と書かれていたのにならって、sageていないのですが。
829デフォルトの名無しさん:2007/04/29(日) 15:40:56
すんごい馬鹿馬鹿しい解決策だけど、マーカー用のPictureBoxをパネル外に作って描画。
実行時にマーカー位置に移動しとく。

これでスクロールから守られる。
ただ、MakeTransparent()しても透過色が機能しない・・・なんでなの?
ペイント動作をよく理解していないからなぁ。
830デフォルトの名無しさん:2007/04/29(日) 15:41:15
背景はPanelの中にPictureBox貼って背景イメージを割り当ててるだけなので省略。

public Form1() {
InitializeComponent();

this.panel1.Dock = DockStyle.Fill;

Bitmap bmp = new Bitmap(40, 40);
Graphics g = Graphics.FromImage(bmp);

this.pictureBox2.Location = new Point(10,10);
this.pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
this.pictureBox2.Size = new Size(bmp.Width, bmp.Height);
this.pictureBox2.Refresh();

Rectangle r = new Rectangle(0, 0, bmp.Width, bmp.Height);
g.FillRectangle(Brushes.White, r);
Pen pen = new Pen(Color.Black, 8);
g.DrawRectangle(pen, r);
pen.Dispose();
g.Dispose();

bmp.MakeTransparent(Color.White);
this.pictureBox2.Image = bmp;
}
831デフォルトの名無しさん:2007/04/29(日) 15:44:43
リッチテキストボックスコントロールについて質問です
コントロール上のカーソル(点滅している縦棒)の位置を知るにはどうしたら良いですか?
メソッドを調べているのですが中々使えそうなのが見つからず困っております
832デフォルトの名無しさん:2007/04/29(日) 15:45:30
ありがとうございました。
いただいたアドバイスを参考に検討してみます。

成果があったら報告させていただきます。
833デフォルトの名無しさん:2007/04/29(日) 15:46:35
ああ、スミマセン。>>832は 828でした
834831:2007/04/29(日) 15:49:16
補足です
○行 △列 とステータスバーに表示することが目的です
835デフォルトの名無しさん:2007/04/29(日) 15:57:48
>>831
DOBON.Net ぐぐってみてください。
「TextBox(またはRichTextBox)の現在のカレット位置(行と列)を取得する」
というそのままズバリなTipsがありますよ。
836デフォルトの名無しさん:2007/04/29(日) 15:59:45
>>835
すみません、調査不足でした
情報ありがとうございました
837829:2007/04/29(日) 18:38:50
インチキ万歳。

namespace Test3 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.panel1.Dock = DockStyle.Fill;

this.pictureBox2.Location = new Point(50, 50);
this.pictureBox2.Size = new Size(40, 40);
GraphicsPath path = new GraphicsPath();
path.AddRectangles(new Rectangle[] { new Rectangle(19, 0, 2, 18), new Rectangle(19, 21, 2, 18), new Rectangle(0, 19, 18, 2), new Rectangle(21, 19, 18, 2) });
this.pictureBox2.Region = new Region(path);
}
}
}
838デフォルトの名無しさん:2007/04/29(日) 20:41:54
(値型1 + 値型2).ToString();
みたいに,演算子の戻り値に対してメンバを呼び出そうとすると
インテリセンスが働かないのはなんで?
839デフォルトの名無しさん:2007/04/29(日) 20:45:46
対応してないから。
840デフォルトの名無しさん:2007/04/29(日) 21:10:52
そ、そんなぁ…
841デフォルトの名無しさん:2007/04/29(日) 22:52:32
>>838
マジレスすると、それをやるなら Convert.ToString(値型1 + 値型2, 基数) 。
842デフォルトの名無しさん:2007/04/29(日) 22:54:18
>>841
寝言は寝て言え
843デフォルトの名無しさん:2007/04/29(日) 23:22:28
あれ、できたっけ?ごめん、寝てくる。
844デフォルトの名無しさん:2007/04/29(日) 23:57:04
なんで"1".ToString()ではインテリセンスが出て
1.ToString()では出ないのかも気になる
845デフォルトの名無しさん:2007/04/30(月) 00:21:24
小数かもしんないじゃん
846828:2007/04/30(月) 01:03:26
ターゲットマーク固定のスクロールについて質問していた者です。

結局、自前のスクロールパネルを作ることにしました。
工夫のない力技になってしまい、>>829>>830さんには申し訳けありません。
847デフォルトの名無しさん:2007/04/30(月) 21:04:57
DataTableがAcceptChanged()した後に変更があったかどうか確認したいのですが
これには一つ一つRowStateを見ていくほかに無いのでしょうか?
TableState 見たいなのがあると良いんですが。

変更が起こるたびにExtendedPropertiesにフラグをセットするとか考えたんですが・・・
簡潔な方法があれば教えてください。
848デフォルトの名無しさん:2007/04/30(月) 21:10:05
GetChanges とかどうよ
849デフォルトの名無しさん:2007/04/30(月) 21:50:47
>>848
ありがとうございます!
こんな便利なメソッドがあるんですね
これのおかげで他の場所での処理もかなり簡潔に書けそうです
850デフォルトの名無しさん:2007/05/01(火) 16:34:02
>>848-849
いやいやDataViewのRowStateFilterじゃね?
851デフォルトの名無しさん:2007/05/02(水) 01:13:27
C#で例外の処理をどうするか迷ってます。

フリーウェアを付くっているんですが、正式にリリースする前に、すべての例外を確かめたいのです。
全部の例外を網羅しようとしたら、ひとつひとつの関数をすべて調べて回る必要があるんでしょうか。
それとも、VisualStudioの機能で、投げられるすべての例外の一覧などを取得することはできますか?
852デフォルトの名無しさん:2007/05/02(水) 01:16:58
全ての new に対して OutOfMemoryException を確認する?
853デフォルトの名無しさん:2007/05/02(水) 01:35:16
>>851
>すべての例外を確かめたいのです

非現実的だし、そんなことする意味がない。
854デフォルトの名無しさん:2007/05/02(水) 01:42:46
多分それでチェックできる例外は例外じゃないと思う。
855851:2007/05/02(水) 02:04:49
書き方が不正確でした。
正確には、プログラム中で投げられる例外をチェックしたいんです。
C#では、Javaのように例外のキャッチを強制するようにできてないので、
textboxで求めるものと違う文字列を入力したとしても、
明示的にキャッチしないとプログラムを強制終了させてしまいます。

ある程度コードを書いてから、処理していない例外がたくさんあることに気づいたのですが、
いまさらコードをすべて見直すのも手間がかかるので、例外をスローする可能性のある部分だけを
列挙したいわけです。
それとも>>853 さんのいうように、このような考え方はC#ではしないんでしょうか。
856デフォルトの名無しさん:2007/05/02(水) 02:16:14
857デフォルトの名無しさん:2007/05/02(水) 02:19:22
例外をキャッチする方向に追求しないで
例外を出さない処理を心がける方向へどうぞ。

textboxで求めるものと違う文字列を入力したとしても
それは例外ではなく想定できる状況でしょ。

たぶんJavaの例外と概念が違います。

フリーウェアとして公開するならなおさら握りつぶさずに。
ぶっちゃけtry-cathだらけのアプリケーションなんて公開されても迷惑です。
858853:2007/05/02(水) 02:22:57
いやC#に限らず、例外は例外なわけでスローする可能性は全てにある。
>>852 のようにメモリ不足なんて常に発生しうるし、HDDの故障によるリードエラーも同じ。
普通、TextBoxに求めるものと違うものを入力された場合の処理は例外を使用しない。

っつーか入力された文字が原因で例外が発生してるんじゃなくて
お前のプログラムが入力された文字に対応してないだけだろーがw
859851:2007/05/02(水) 02:38:14
>>857
なるほど、C#、というかC系では例外を投げないように作るんですね。
概念が違うのがよくわかりました。

>>858
おっしゃるとおりだと思います。たしかにスローしうるすべての例外をチェックしてたらきりがありません。
しかし、それだと普通にプログラムしていて想定外の入力などあったときの処理などは、
すべて自前で各必要があるんでしょうか。
言い換えれば、入力が期待した値にそっているかすべてチェックするんですか?
それだとどうしてもカバーし忘れたりしないですか?

例えば、
テキストの入力に整数を期待していて、事前チェックで文字列の場合は警告するようにしたとします。
でも、ここで実数を入力されたときの処理を忘れてます。
同じようなことは、もっと複雑にもっと多く存在しうるわけで、それらすべてを想定する値かチェックすると
非常に複雑になりませんか?
それなら一度関数に入れて、例外が出れば警告する、という方法をJavaではとってきました。

まあ、その程度の処理もできないのか、といわれればそれまでなんですが・・・
860デフォルトの名無しさん:2007/05/02(水) 02:48:34
>>856
いや、自分がほしいのはすべての例外を処理する方法なんです。
それこそ強制終了させないだけならmain文でtry catchかけばいいんで。
861851:2007/05/02(水) 02:56:03
すいません、自分でもなにいってるかわからなくなってきました。

要は、通常C#では例外を出さないように、
事前チェックですべてを処理しようとするのか、
それで本当に例外を排除できるのか、
ということが聞きたいわけです。
862デフォルトの名無しさん:2007/05/02(水) 02:58:26
もう寝ろよ
863デフォルトの名無しさん:2007/05/02(水) 04:33:46
>>859, 861
>テキストの入力に整数を期待していて、事前チェックで文字列の場合は警告するようにしたとします。
>でも、ここで実数を入力されたときの処理を忘れてます。
>それなら一度関数に入れて、例外が出れば警告する、という方法をJavaではとってきました。
わけ分からん入力をわけ分からん入力のまま扱おうとするなよ。
それ想定外の入力が入るっていうバグだから例外はいて落ちるほうが正解

あと一応。WinFormsだとApplication.ThreadExceptionみれ
864デフォルトの名無しさん:2007/05/02(水) 06:44:12
>>859
それまでです。
865デフォルトの名無しさん:2007/05/02(水) 08:14:28
結局851は何が言いたいのかな?

ユーザー入力の妥当性検査に例外を流用しちゃうボクを認めてくれよ、って話か?w
碇シンジ君だなそりゃ
866デフォルトの名無しさん:2007/05/02(水) 08:52:50
>>860 
>いや、自分がほしいのはすべての例外を処理する方法なんです。
この場合の処理って例外に応じた適切な処理ってことだよね?
そんなエスパーみたいなコードかけるなら今の給料の2倍でいいんでうちの会社に来てほしい。
867デフォルトの名無しさん:2007/05/02(水) 09:21:09
漏れはテキストの入力は正規表現でチェックしとるよ
868デフォルトの名無しさん:2007/05/02(水) 11:11:31
正規表現はうっかり漏れがありそうで怖いんだよな 複雑になってくると
テスト項目作るのも大変
869デフォルトの名無しさん:2007/05/02(水) 11:19:09
漏れだけに
870デフォルトの名無しさん:2007/05/02(水) 12:43:23
まだ漏れとかガキ臭い言葉つかってる奴がいるんだな。

れw
ファーストネームはフランソワーズか?w
871851:2007/05/02(水) 14:48:10
>>866
逆に疑問なんですが、C#では潜在的に例外が処理されない可能性を
残したままソフトウェアをリリースしてるんですか?

それに例外に応じた処理をかけるっていうのがそれほどすごいことではないと思うんですが。
単に投げられる主要な例外をすべてキャッチすればいいだけの話ですし。
もちろん、絶対に投げられないような例外処理は書く必要がありませんし、
Javaでもゼロ除算など(上で上げられた OutOfMemoryException なども)基本的なものは
例外処理を強制されませんが。
872デフォルトの名無しさん:2007/05/02(水) 15:01:18
>>871
例外について再学習する事をお勧めする。
873デフォルトの名無しさん:2007/05/02(水) 15:09:13
そもそも「例外を処理する」って具体的に何するの?
874デフォルトの名無しさん:2007/05/02(水) 15:15:23
>>871
探せばJavaからの移行ガイドみたいなのがいくつかあったはずだから
先にそっちに目を通すことをおすすめする。
別におまいさんのやり方を否定したいわけじゃないんだが、考え方それぞれだ。
875デフォルトの名無しさん:2007/05/02(水) 16:45:17
ドキュメントコメントにはexceptionタグがあって
そこに投げる例外を書いとくとインテリセンスのメンバ説明に表示されるよ
そういう話ではないのはわかってるが
876デフォルトの名無しさん:2007/05/02(水) 16:50:26
お舞らの例外についての処理基準を書け。
さすれば彼もニュアンスを汲み取れるであろう。
877デフォルトの名無しさん:2007/05/02(水) 17:19:47
>>874
わかりました。いわれれば例外をJavaとC#でまったく同じものと思いこんでいました。
シンタックスが同じなので、使い方も全く同じと思っていました。
すぐにJavaとC#の例外の違いについて調べてみます。

>>876
たしかにそれが一番良い方法かもしれません。
よろしければ、C#でどういったときに例外として処理するかを教えてください。

再三の質問、すみませんがよろしくお願いします。
878デフォルトの名無しさん:2007/05/02(水) 18:23:51
例外処理にC#もjavaもないと思うけど俺は。。
879デフォルトの名無しさん:2007/05/02(水) 19:08:45
こういうのは言語の設計思想だからその言語のやり方に慣れるしかないと思う。
.NETでJava風の例外機構がどうしても使いたいならJ#とかどうよ。
微妙に両方が混ざってカイカンだぞ。
880デフォルトの名無しさん:2007/05/02(水) 19:33:46
いやだから「例外」って概念にjavaもC#も糞もあるかってw
881デフォルトの名無しさん:2007/05/02(水) 19:43:00
throws 使った宣言の話よね?

あれを導入しようと思ったら、.NET 対応の全言語に同様の機構用意しないと意味ないから、
C# にだけ導入するのは避けたって話よね。

つーか、そんなに例外を受け漏らしたくないなら、
catch(Exception) でもすりゃいいじゃん。
あんまり勧められたもんじゃないけど。
882デフォルトの名無しさん:2007/05/02(水) 19:44:34
throwsはいろいろと不都合があるから積極的に捨てたんじゃなかったか
883デフォルトの名無しさん:2007/05/02(水) 19:46:56
> あれを導入しようと思ったら、.NET 対応の全言語に同様の機構用意しないと意味ないから、
> C# にだけ導入するのは避けたって話よね。

.NET に throws の導入を避けたのも、
> catch(Exception)
みたいなコードが Java で量産されてて「これじゃ意味無いじゃん」って理由が大きい。
884デフォルトの名無しさん:2007/05/02(水) 20:52:02
Bill VennersとBruce Eckel(Javaの偉い人たち)がヘジタンに
チェック済み例外なくしたのはなんで?ってインタビューしてる記事
ttp://www.artima.com/intv/handcuffs.html
IBMのJava例外に関する記事。チェック済み例外の批判について書いてある
ttp://www-06.ibm.com/jp/developerworks/java/040618/j_j-jtp05254.html
885デフォルトの名無しさん:2007/05/02(水) 22:42:34
例外発生させないようにプログラミングを行うのが一番コストが低いぞ?
予期しない例外が発生した場合のみキャッチするようにするのベスト。
予期しない例外は大抵ログに書き込み、例外の度合に応じて
処理を継続するか異常終了させるか選択する。
886デフォルトの名無しさん:2007/05/02(水) 22:45:36
C++の例外指定なんて意味を成してないもんな
throws()をたまに書く位か
887デフォルトの名無しさん:2007/05/02(水) 23:03:00
>>885
なるべく例外を発生させないようにするのは当然として
予期できる例外こそcatchすべきじゃないの?
予期できないのはApplication.ThreadExceptionとかにおまかせで
888デフォルトの名無しさん:2007/05/02(水) 23:05:53
>逆に疑問なんですが、C#では潜在的に例外が処理されない可能性を
>残したままソフトウェアをリリースしてるんですか?

windowsやieハングした経験はないのか???
お前大丈夫か?
889デフォルトの名無しさん:2007/05/02(水) 23:13:53
>textboxで求めるものと違う文字列を入力したとしても、
>明示的にキャッチしないとプログラムを強制終了させてしまいます。

どうやったらそうなるのか教えて欲しい。


求めるものに変換できるかどうか1度調べるだけだとおもうけどなあ
890デフォルトの名無しさん:2007/05/02(水) 23:22:15
オーバーフローとかもあるだろ
891デフォルトの名無しさん:2007/05/02(水) 23:32:24
オーバーフローするかどうか1度調べるだけだとおもうけどなあ
892デフォルトの名無しさん:2007/05/02(水) 23:37:21
>textboxで求めるものと違う文字列を入力したとしても、
>明示的にキャッチしないとプログラムを強制終了させてしまいます。

求めるものと違うものを入れたからといって例外吐くのは糞仕様だと思います。
893デフォルトの名無しさん:2007/05/02(水) 23:40:19
コンバートは例外を吐くんじゃないのか?
894デフォルトの名無しさん:2007/05/02(水) 23:41:44
そういうとき例外を投げるのはアリだがキャッチすべきじゃないな
895デフォルトの名無しさん:2007/05/02(水) 23:42:03
自分的にはチェックメソッドでbool返しの理由はoutパラメタですね。
入れたとたんに例外はくようなのは問題外。
896デフォルトの名無しさん:2007/05/02(水) 23:45:07
>>895
c++使いだな。
それを避けるために例外があるんじゃないのか?
897デフォルトの名無しさん:2007/05/02(水) 23:52:30
HRESULTと、S_OKと、GetLastErrと、&で直感的でないプログラムの完成。
898デフォルトの名無しさん:2007/05/02(水) 23:57:57
GetLastErrorとか・・・
899デフォルトの名無しさん:2007/05/03(木) 00:01:21
なんで昔からout Result resultみたいにせずに戻り値を結果報告に使うの?
900デフォルトの名無しさん:2007/05/03(木) 00:02:03
>>896
んー何でもかんでも例外はきまくるのは帰ってコードがおかしくなる。
実際にオブジェクト構造とかがおかしくなってるようなときは例外はくけど想定できるエラーとかがあるときは例外はかんよ
901デフォルトの名無しさん:2007/05/03(木) 00:02:50
ifやwhileなんかの条件に使えるから
902デフォルトの名無しさん:2007/05/03(木) 00:11:15
TryGetValue : boolは許せるがエラーコードは禁止
903デフォルトの名無しさん:2007/05/03(木) 00:12:03
取り敢えず予想できない例外がでた場合は、こけさせたほうがいいと思う。
データが失われたらマズイ場合は別だけど。
904デフォルトの名無しさん:2007/05/03(木) 00:19:09
実際に結果を返す戻り値にエラーコード混ぜるのはどうかと思ったけど、
String.IndexOfの見つからない場合の戻り値は-1は準エラーコードかなあ…
905デフォルトの名無しさん:2007/05/03(木) 00:24:58
TryHoge の一音節版
906デフォルトの名無しさん:2007/05/03(木) 01:18:22
同じ「例外」の問題でも、
GUI層の想定漏れでプロセス全体落ちられると嫌という話から
サーバ内にCLRを読み込んで使うような場合でのConstrainedExecutionRegion (CER)の
高可用性の議論まで色々あるからな。

個人的にはCER内での失敗の扱いみたいに
[1]想定外の事態が起きるとそのAppDomainがヤバイ
[2]想定外の事態が起きるとそのインスタンスがヤバイ
[3]想定外の事態が起きるとそのプロセスがヤバイ
[4]想定外の事態が起きても状態は壊れない
という分類は結構好きだったりする。
ttp://msdn2.microsoft.com/ja-jp/library/system.runtime.constrainedexecution.consistency.maycorruptappdomain(vs.80).aspx
ttp://msdn2.microsoft.com/ja-jp/library/system.runtime.constrainedexecution.cer(VS.80).aspx

この分類で[1]や[3]になるようならどうあがいてもプロセス落とすしか無いんだし。

逆にRuntimeExceptionとかApplicationExceptionとかで分類しても
こういう視点は得られない気がする。
907デフォルトの名無しさん:2007/05/03(木) 01:22:51
ああ、[1]なら一応AppDomain再起動で乗り切るってのはできるか。
ASP.NETとかSQL CLRがこういう動作だっけな。
908858:2007/05/03(木) 02:46:52
>>877
もう一度最初の話に戻すと、普通は入力値のチェックに例外は使用しない。
しかし >>860 には「自分がほしいのは全ての例外を処理する方法」とあるので
何が何でも例外で処理したいなら、これ以上何も言えないが…

>>871 は言語と例外処理とその使用法を乱暴に扱いすぎ。
例外の使い道に言語は無関係だし、ゼロ除算が想定できるなら計算前に
分母が0かどうかチェックするのが普通。
数値入力に関してはコストと安全性を考えてサードパーティー製の数値入力
コントロール等を利用したりする。

どうもあなたは例外と条件文の選択を間違えているような気がする。
例外優先で考えてないか?文字通り例外は例外です。
909851:2007/05/03(木) 04:21:53
いろいろな意見を言ってくださって本当に参考になります。
JavaとC#の比較を行っているサイトは多かったのですが、例外について言及している
ものは少なかったです。
そのなかではこのページがもっとも参考になりました。

C SharpとJavaの比較 - Wikipedia
http://ja.wikipedia.org/wiki/C_Sharp%E3%81%A8Java%E3%81%AE%E6%AF%94%E8%BC%83#_note-2

このなかで初めてチェック済み例外と非チェック済み例外について知ったのですが、
>>884のリンク先も参照してみると、>>882の言われるように、
大規模なプログラムになると破綻するので、チェック済み例外の機能を切り捨てたみたいです。

雑感を書くと、どうやら非チェック済み例外のみのC#を
チェック済み例外と非チェック済み例外両方あるJavaの感覚で利用しようとしたのが、
根本的な原因だったみたいです。
たしかに非チェック済み例外しかない環境では、
>>908の言われるような例外の考え方がスタンダードのようですね。
今後C#では、例外の扱いと考え方を変えてみようかと思います。

だらだらと一日以上書き続けてしまいましたが、つきあってくださった方、ありがとうございました。
910デフォルトの名無しさん:2007/05/03(木) 08:30:30
だからそれはjava C#の違いじゃありえないと思うけど。
単に851が「例外」という概念についてずっと勘違いしてただけじゃないの?
911デフォルトの名無しさん:2007/05/03(木) 14:39:38
[Throws(typeof(IOException), typeof(XmlException))]
public void Hoge() {...}
とかやっとけば列挙できないこともないが
912デフォルトの名無しさん:2007/05/04(金) 00:53:12
>>910
JavaとC#の例外処理は全く別。
C#は非チェック済み例外だけだが、Javaはそれに加えてチェック済み例外もある。
913デフォルトの名無しさん:2007/05/04(金) 01:17:17
>>912
その違いがわかった上で、それでもそこで例外を使うのはおかしいという流れだよ。
914デフォルトの名無しさん:2007/05/04(金) 02:30:47
>>913
だったらどこで例外を使うんだよ。
そもそも例外をださないようにプログラムするのが常識ってんなら、例外の存在意義って何だ?
失敗したことだけを知るなら例外クラスにヴァリエーションなんていらんだろうが。
出された例外別に対処するためにそれぞれキャッチできるようになってんだろ。
例外そのものがおまけなC++的思考から抜け出せてないんじゃないか?
915デフォルトの名無しさん:2007/05/04(金) 02:34:29
++厨には難しいよ
916デフォルトの名無しさん:2007/05/04(金) 02:37:45
917デフォルトの名無しさん:2007/05/04(金) 02:47:42
Javaの検査例外は関数型言語でよく見るVariantみたいな使い勝手が気に入られているっぽいところはあるね。
「戻り値の型はT型またはU型またはV型」みたいな奴。

Javaだと「戻り値の型はint型またはHogeException型またはFugaException型」みたいなコードが書けていたのが
C#に移ったとたん「そーゆーのは流行んないんだよプゲラ」と言われてムッとなるのは分からんでもない。
そういう人は例えばNemerleにVariantがあるからそっち行ってみるのはどう?
ttp://d.hatena.ne.jp/akiramei/20050323#p2

まあBCL再実装とか現実的じゃないんで結局は「そーゆーのは流行んないん」という話だと思うけど。
918デフォルトの名無しさん:2007/05/04(金) 03:35:35
>>914
だから入力値のチェックに普通例外は使わないって話をしてるんだよバカ
919デフォルトの名無しさん:2007/05/04(金) 04:29:38
はっきり言っておくよ。
例外処理はプログラミングの構造から外れた所の処理だけ行えば良い。
構造から外れることが解っている例外処理を行うのはナンセンスだ
920デフォルトの名無しさん:2007/05/04(金) 04:58:57
はっきり言うわりには意味不明だな
921デフォルトの名無しさん:2007/05/04(金) 05:12:57
レベルの問題じゃね?。人による入力なんてミスがあって当たり前で、チェックしなきゃまともに動くわけない。
だから、処理コストの高い例外なんか使わずに、きちんとチェックしろよということじゃねーの?
922デフォルトの名無しさん:2007/05/04(金) 08:40:44
>>917
そういうケースでは.NET2.0以降のC#の場合、outパラメータが使えるからTryParseパターンで対応してる。
JavaのInteger.parseIntは例外の使い方としては?な部分が多いといわれていて、
さらにNumberFormatExceptionがRuntimeExceptionなのでますます謎。
本来はTester-Doerパターンがいいと思うのだけどね。
if (Integer.canParse(str)) i = Integer.parse(str);
これならparseの例外がRuntimeExceptionなのは納得がいく。
923デフォルトの名無しさん:2007/05/04(金) 09:55:17
はっきり言っておくよ。
エラーは全て例外にして投げておくのが良い。
もしくは全く例外を使わないのが良い。
中間は全てナンセンスだ
924デフォルトの名無しさん:2007/05/04(金) 10:12:37
タイプライブラリをインポートしたCOMインターフェイスの
メソッドの戻り値がすべてvoidで、
エラーはすべて例外になるのはなんで?
925デフォルトの名無しさん:2007/05/04(金) 11:16:19
機械的に全部HRESULTにするか全部例外にするかしかできないから。
例外にする方を選んだのはそっちの方が多い使われ方だったからだろ。
気に食わなきゃ自分でインポート書けばいいだけの話。
926デフォルトの名無しさん:2007/05/04(金) 16:44:16
DLLの読み込みをしたいのですが例外が出てしまい読み込めません・・・
C#側のただしい記述方法について教えていただけないでしょうか?

C#

[DllImport("Util.dll", CallingConvention = CallingConvention.Winapi )]
public extern static int CalcChecksum(byte[] buf, int in2);

C //Util.dll
int WINAPI CalcChecksum(char* pc, int i)
{
return 0;
}
927デフォルトの名無しさん:2007/05/04(金) 17:49:39
XMLのノードとして追加書き込みしていったログの読み方について質問です。

<log xxx='xxx'/>
<log xxx='xxx'/>
・・・

というファイルがあったとき、私はJavaではSequenceInputStreamでルートノードをくっつけてSAXParser
で読んだりしていますが、.NetではSequenceInputStreamに該当するクラスが見つかりません。

SequenceInputStreamを自作する必要があるのでしょうか?見落としているだけでしょうか?(ありそう)
それとも元々SequenceInputStreamを使っている自分が馬鹿で、別に簡単な方法があるのでしょうか?

全部読むという選択肢は考えていません。
テンポラリファイルに書き出すとスピードが、メモリに読み込むとメモリサイズが犠牲になりますので。
928デフォルトの名無しさん:2007/05/04(金) 17:56:34
ちなみにSequenceInputStreamとは複数のInputStreamを一本のInputStreamに集約するプロキシです。
929デフォルトの名無しさん:2007/05/04(金) 18:17:51
J#のライブラリを使えば SequenceInputStream を使えるかもね
930デフォルトの名無しさん:2007/05/04(金) 18:43:49
>>926
C 側で関数を export してなくね?
つか例外出るならそれ書け。
931デフォルトの名無しさん:2007/05/04(金) 18:47:10
>>927
そもそもログに XML って相性悪いと思うが。
XmlReader では XML フラグメントの読み取りがサポートされてるが、どうかね?
932デフォルトの名無しさん:2007/05/04(金) 20:04:06
ありがとうございます。
XML フラグメント」でぐぐり、http://support.microsoft.com/kb/318504/ja を見つけ、テスト実行してみたら無事読めました。

ログをXMLで書いておくと、出力する内容を追加した時に、以前に書いたログリーダーを修正しなくても使えるという利点があるので
XMLで出すようにしているんです。
csvだとそこいらが・・・だから、ログにXMLは意外と相性いいと思います。
933ちらしの裏:2007/05/04(金) 21:13:56
http://support.microsoft.com/kb/318504/ja は古いようで2.0では「このクラスは、互換性のために残されています。」でした。
ちょっと代替方法を調べましたのでメモっておきます。

XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlFrag + xmlFrag), settings);

これだけでも XMLフラグメント xmlFrag を並べた文字列を解析できるようです。
934デフォルトの名無しさん:2007/05/04(金) 21:47:42
フォームの背景画像を連続ではなく、1つだけにする方法を知っている方がいたら教えてください。
935デフォルトの名無しさん:2007/05/04(金) 21:51:31
.NET 2.0 / VS2005 を使えばプロパティ一つで楽ちん
936934:2007/05/04(金) 22:03:21
2003なんです。。。
2003ではどうすれば・・・@@
937デフォルトの名無しさん:2007/05/04(金) 22:21:51
自分で描画するコード書くだけじゃん
DrawImage一行書くのがそんなに面倒か?
938934:2007/05/04(金) 22:58:03
背景指定しておけば勝手に埋め込みリソースになるので自分で読み込んだり描画するのを毛嫌いしてました;;
リソースの読み方を調べてpaintイベントにDrawImage書いて解決しました。

ありがとうございました。
939ちらしの裏2:2007/05/05(土) 20:47:45
XmlSchemaSet sc = new XmlSchemaSet();
sc.Add("urn:bookstore-schema", "books.xsd");
settings.ValidationType = ValidationType.Schema;
settings.Schemas = sc;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);

とXmlReaderSettingsに設定すると、books.xsdで検証してくれることを確認。

private static void ValidationCallBack(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message);
Console.WriteLine("line:{0} ({1})", e.Exception.LineNumber, e.Exception.LinePosition);
}

で、xml内の行番号と桁位置を取得できました。
940デフォルトの名無しさん:2007/05/06(日) 17:16:35
匿名デリゲートを処理内容で同一判定させることはできませんか?
たとえば、EventA+=delegate(Obj o,EA e){};のようにイベントを匿名で
追加した場合、その後イベントから外す方法が知りたいです。
同一インスタンスでなきゃだめなのかな。
941デフォルトの名無しさん:2007/05/06(日) 17:21:13
匿名デリゲートは宣言ごとにクラス作るから、原理的に無理
さっさとメソッドにしてしまえ
匿名デリゲートにゃ荷が重すぎたのさ
942デフォルトの名無しさん:2007/05/06(日) 18:00:30
変数にでも代入しとけ。
943デフォルトの名無しさん:2007/05/06(日) 18:01:01
しかしメンバフィールドの初期化で匿名メソッド使えるのは妙な感じだ。
944デフォルトの名無しさん:2007/05/06(日) 18:03:17
それは頭がおかしいだけ
945デフォルトの名無しさん:2007/05/06(日) 18:57:05
??
946デフォルトの名無しさん:2007/05/07(月) 15:57:42
通常のボタンとツールストリップのボタンを持っているフォームを作っています。

フォームがアクティブじゃないときにマウスで通常のボタンをクリックすると
フォームがアクティブになると同時にボタンも押されたことになりますが、
これがツールストリップのボタンだと、
フォームがアクティブになるだけでボタンは押されたことになりません。
結局もう一度ボタンを押して実行しないといけないんですが
これを通常のボタンのようにするにはどうしたらよいのでしょうか?
947デフォルトの名無しさん:2007/05/07(月) 16:01:10
VC#2005(.NET Framework 2.0)使っています。
WebBrowserコントロール上で選択されている文字列を取得しようとしています。

http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.htmldocument.execcommand(VS.80).aspx
こちらの下のほうに載っているサンプルを見ると

    object o;
    webBrowser1.Document.ExecCommand("Copy", false, ref o);

で取得できるようなことが書いてありますが、同じページ内で

public void ExecCommand (
    string command,
    bool showUI,
    Object value
)

と定義されています。
実際にこの通りコーディングしてコンパイルしてみると

    1  'System.Windows.Forms.HtmlDocument.ExecCommand(string, bool, object)' に最も適しているオーバーロード メソッドには無効な引数がいくつか含まれています。
    2  引数 '3' を 'ref' キーワードと共に渡すことはできません。

というエラーになります。(当たり前か)
正しい方法をご存知の方いますか?
948946:2007/05/07(月) 16:12:14
ToolStrip の代わりに ToolBar を使えばできました。
ろくに調べずに質問してすみませんでした。
949947:2007/05/07(月) 16:24:51
object o = null;
web.Document.ExecCommand("Copy", false, o);
string text = Clipboard.GetText();

で取得できました。
サンプルがすべてコメントアウトされていた理由がわかった気がします。。。スミマセン
950デフォルトの名無しさん:2007/05/08(火) 21:03:51
>>949
俺は前やったときInvokeScriptでeval使ってJavaScript実行させて戻り値で取った。
その方法と比べてクリップボードを汚さないけど、Scriptきられていると動かないので
良し悪し。
951947:2007/05/08(火) 21:42:30
>>950
なるほどそういう手もあるんですね。。。
949の方法だとクリップボードの内容をいちいち退避しなければいけなくて面倒でした。

社内LAN等、ある程度限定された環境ならいけそうですね。
ありがとうございます。
952デフォルトの名無しさん:2007/05/09(水) 00:48:31
953デフォルトの名無しさん:2007/05/09(水) 00:53:48
次スレ
http://pc11.2ch.net/test/read.cgi/tech/1178639189/

>>952 誤爆してしまいました。すみません。
954デフォルトの名無しさん:2007/05/09(水) 22:06:33
>>947-951
遅レスだが。
IHTMLDocument2 には selection プロパティがあるぜ。
HtmlDocument の DomDocument から先は COM/RCW の世界になっちゃうけど。
955デフォルトの名無しさん:2007/05/09(水) 22:56:12
リモーティングで、自前↓のException を作って、throwしたいのだけど、

[Serializable]
public class HogeException : Exception
{
}

実際にthrowするとcache側(リモーティングのクライアント側)
で逆シリアル化を失敗してしまいます。回避作ないですかね?

System.Runtime.Serialization.SerializationException:
'AppInterface.HogeException' 型のオブジェクトを逆シリアル化するコンストラクタが見つかりませんでした。
---> System.Runtime.Serialization.SerializationException:
'AppInterface.HogeException' 型のオブジェクトを逆シリアル化するコンストラクタが見つかりませんでした。
場所 System.Runtime.Serialization.ObjectManager.GetConstructor(Type t, Type[] ctorParams)
場所 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context)
--- 内部例外スタック トレースの終わり ---

#MarshalByRefObjectとExceptionの多重継承はできないし・・
956デフォルトの名無しさん:2007/05/09(水) 23:09:23
ttp://www.microsoft.com/japan/msdn/net/bda/exceptdotnet.aspx
こんなのを見つけたが。
デシリアライズ用の特殊なコンストラクタが必要らしいよ?
957デフォルトの名無しさん:2007/05/10(木) 00:17:49
たくさんThreadを実行した後、タスクマネージャを見るとハンドル数が妙に多いのです。
Threadのハンドルが閉じられていなくて、ThreadクラスにはDisposeなどハンドルを閉じられそうなメソッドが見あたらなかったです。
多分物理的なスレッドと.NETのスレッドは対応してないことになってるからかなと思ったのですが、
GCが動けばハンドルは解放されるのですが、GCが動く前にハンドル数不足でOutOfMemoryが発生することがあります。
とりあえずThreadの処理が終わるたびに必ずGCを叩いて回避したのですがパフォーマンスが悪化するのが気になるので
これをGCを動かす以外に明示的に閉じる方法ってないのでしょうか?
958デフォルトの名無しさん:2007/05/10(木) 00:24:07
Abort
959デフォルトの名無しさん:2007/05/10(木) 00:25:33
>MarshalByRefObjectとExceptionの多重継承はできないし・・
きみほんとにRemoting理解してる?
960デフォルトの名無しさん:2007/05/10(木) 00:27:34
>>957
Threadクラスのリファレンスを隅々まで読んでごらん?
961デフォルトの名無しさん:2007/05/10(木) 00:49:08
>960
それらしい記述は見あたらないけど。
962デフォルトの名無しさん:2007/05/10(木) 02:27:44
ファイル1
struct Address{
DWORD id[20000];
DWORD address[20000];
WORD size[20000];
}
ファイル2
struct date{
DWORD id;
WCHAR name[64];
WCHAR description[255];
BYTE sex;
DWORD value1;
DWORD value2;
DWORD value3;
}

上記のようなバイナリファイルがあって
ファイル1のn番のdata構造体を取得したいとき
Address.address[n]のアドレスから、Address.size[n]分だけ
963962:2007/05/10(木) 02:31:40
途中送信してしまいました。

取得するプログラムがC++で作ってありまして、
それを全コードC#に移植したいのですがC#で実現するにはどうすればいいのでしょうか?

今仕方なくC++のプログラムをdllにして呼び出してますが
出来ればC#で全て行いたいので。

方法をご存知のかた居ましたらご教授おねがいします
964962:2007/05/10(木) 02:42:39
あ、間違えました。
>ファイル1のn番のdata構造体を取得したいとき
>Address.address[n]のアドレスから、Address.size[n]分だけ

ファイル2のn番のdata構造体を取得したいとき
ファイル1のAddress.address[n]のアドレスから、Address.size[n]分だけ

です。
ちなみに.NET 2003です。

C#側でStructLayoutAttributeで構造体定義して
BinaryReaderで読み込んだのはいいもののどうアドレスを指定して構造体にしていいものやら・・・
965デフォルトの名無しさん:2007/05/10(木) 03:02:59
ファイル1のアドレスってファイル2上のアドレス?
そういうウンコな処理をC#でやりたいって動機がワカンネ
966デフォルトの名無しさん:2007/05/10(木) 03:20:59
Streamで読んで
アドレス分進めて
メモリにコピーして
Marshal.PtrToStructureで構造体ゲット?
べつにC++とやることはあまり変わらないと思うけど

ファイル書き出しをC#でできるならBinaryFormatter使う。
まあ>>965に同意
967デフォルトの名無しさん:2007/05/10(木) 12:30:28
>>957
スレッドプールじゃ駄目なん?
Threadは作成と破棄を繰り返す処理には向いてないってどっかで見た。
968デフォルトの名無しさん:2007/05/10(木) 12:41:01
しかし、別に>>967を揶揄するわけじゃない(むしろ957に対して言いたい)んだけど、
やたらスレッドプールを薦める人っているけど、スレッドプール向きの処理って
実際そんなにあるのかね?

スレッド使うような処理って一定の間(場合によってはアプリが起動してる間)
ずっと回ってる必要がある処理が多いと思うんだけど。
969デフォルトの名無しさん:2007/05/10(木) 12:43:14
957がどういう処理にスレッドを使ってるのか気になるな
970デフォルトの名無しさん:2007/05/10(木) 12:44:31
俺は処理時間の読みにくい入出力処理なんかをスレッドプールにポンポン放り込んでるが・・・
971970:2007/05/10(木) 12:52:17
といっても、ThreadPool.QueueUserWorkItem() ではなく、Delegate.BeginInvoke()/EndInvoke() を使うけど。
972デフォルトの名無しさん:2007/05/10(木) 13:48:16
>>968
いやむしろそういうのの方が少なくね?
973デフォルトの名無しさん:2007/05/10(木) 13:57:18
>>972
俺も972に同意

【スレッドクラス】
Threadクラス

【スレッドプール系】
スレッドプール
デリゲート
スレッドタイマー
バックグランドワーカー
974デフォルトの名無しさん:2007/05/10(木) 15:16:12
ThreadPoolを使いすぎると内部でThreadPoolを使うクラスを呼び出すときにスレッドの空きがないと例外が起きるたりするので、
どのクラスが内部でThreadPool使ってるかなんて分かんないのでなるべく空けておかないと
高負荷な時に危険な状況が起きるのでいまいち積極的には使えないと思ってます。

Threadが短い処理をするのに向いてないのは分かってるが長時間動かす時、
たまたまハンドルが解放されない状況が起きると致命的なので
GC以外でちゃんと解放する手順を知りたいだけなのですが。
975デフォルトの名無しさん:2007/05/10(木) 15:21:17
スレッドプールって空いてるスレッドなければキューイングされんじゃないの?
976デフォルトの名無しさん:2007/05/10(木) 15:31:07
やっぱこの場合はスレッドプール使うべきだろ。
というか少なくとも試すべき。
977デフォルトの名無しさん:2007/05/10(木) 15:33:45
短い処理こそスレッドプール向き
978デフォルトの名無しさん:2007/05/10(木) 15:43:43
>スレッドの空きがないと例外が起きるたりするので
キュー待ちじゃないの?

それからハンドルって何?
979デフォルトの名無しさん:2007/05/10(木) 15:46:04
ぶっちゃ桁話、スレッドプールぐらいなら独自の仕組み作ったほうが後々幸せになれると思う・・・
980デフォルトの名無しさん:2007/05/10(木) 15:49:00
なぜ?
981デフォルトの名無しさん:2007/05/10(木) 15:49:43
あるモノは使う、ないモノは作るが鉄則
982デフォルトの名無しさん:2007/05/10(木) 15:53:38
あるけれど何かしたいときに微妙なものはスクラッチする主義です。
983デフォルトの名無しさん:2007/05/10(木) 15:55:32
それでいいと思うよ。
似てても要求を満たさないものは”ないモノ”と一緒だから。
984デフォルトの名無しさん:2007/05/10(木) 16:08:56
有りモノをそのまま使うのが苦痛なら、作るかラップする。
985デフォルトの名無しさん:2007/05/10(木) 16:10:59
たまにGraphicsをラップしたい衝動に駆られる
986デフォルトの名無しさん:2007/05/10(木) 16:13:12
サランラップでくるんだおっぱいに興奮する
987デフォルトの名無しさん:2007/05/10(木) 16:20:14
俺Graphicsのラップはしたことある・・・
988デフォルトの名無しさん:2007/05/10(木) 16:21:19
アルミホイルを噛むと歯が浮く
989デフォルトの名無しさん:2007/05/10(木) 20:49:41
セントリーノ
990デフォルトの名無しさん:2007/05/10(木) 21:05:34
ニュートリノ
991デフォルトの名無しさん:2007/05/10(木) 21:17:16
バンビーノ
992デフォルトの名無しさん:2007/05/10(木) 21:17:31
993デフォルトの名無しさん:2007/05/10(木) 21:20:13
ののびっち
994デフォルトの名無しさん:2007/05/10(木) 21:22:49
グラビティーノ
995デフォルトの名無しさん:2007/05/10(木) 21:24:00
ーノ
996デフォルトの名無しさん:2007/05/11(金) 00:10:09
アルレッキーノ
997デフォルトの名無しさん:2007/05/11(金) 01:19:11
ボーノ!!
998デフォルトの名無しさん:2007/05/11(金) 01:21:18
ボンジョルノ
999デフォルトの名無しさん:2007/05/11(金) 01:22:21
アルパチーノ
1000デフォルトの名無しさん:2007/05/11(金) 01:23:22
 
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。