C♯, C#相談室 Part38
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/03/13(火) 14:23:56前スレ
C♯, C#相談室 Part37
http://pc11.2ch.net/test/read.cgi/tech/1169110545/
過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0002デフォルトの名無しさん
2007/03/13(火) 14:25:09Part35 http://pc8.2ch.net/test/read.cgi/tech/1162490865/
Part34 http://pc8.2ch.net/test/read.cgi/tech/1157549657/
Part33 http://pc8.2ch.net/test/read.cgi/tech/1153537081/
Part32 http://pc8.2ch.net/test/read.cgi/tech/1149934230/
Part31 http://pc8.2ch.net/test/read.cgi/tech/1145075577/
Part30 http://pc8.2ch.net/test/read.cgi/tech/1141448072/
Part29 http://pc8.2ch.net/test/read.cgi/tech/1138925245/
Part28 http://pc8.2ch.net/test/read.cgi/tech/1134514022/
Part27 http://pc8.2ch.net/test/read.cgi/tech/1131544541/
Part26 http://pc8.2ch.net/test/read.cgi/tech/1127063469/
Part25 http://pc8.2ch.net/test/read.cgi/tech/1122352650/
Part24 http://pc8.2ch.net/test/read.cgi/tech/1117631000/
Part23 http://pc8.2ch.net/test/read.cgi/tech/1112968209/
Part22 http://pc8.2ch.net/test/read.cgi/tech/1109630502/
0003デフォルトの名無しさん
2007/03/13(火) 14:25:40Part20 http://pc5.2ch.net/test/read.cgi/tech/1103005153/
Part19 http://pc5.2ch.net/test/read.cgi/tech/1100240847/
Part18 http://pc5.2ch.net/test/read.cgi/tech/1096112588/
Part17 http://pc5.2ch.net/test/read.cgi/tech/1091284402/
Part16 http://pc5.2ch.net/test/read.cgi/tech/1087297504/
Part15 http://pc5.2ch.net/test/read.cgi/tech/1083066815/
Part14 http://pc5.2ch.net/test/read.cgi/tech/1076933504/
Part13 http://pc2.2ch.net/test/read.cgi/tech/1071663456/ (ログ行方不明)
Part12 http://pc5.2ch.net/tech/kako/1066/10660/1066038651.html
Part11 http://pc5.2ch.net/tech/kako/1061/10612/1061262958.html
Part10 http://pc5.2ch.net/tech/kako/1051/10518/1051842450.html
Part9 http://pc2.2ch.net/tech/kako/1039/10396/1039646808.html
Part8 http://pc3.2ch.net/tech/kako/1032/10324/1032488831.html
Part7 http://pc3.2ch.net/tech/kako/1027/10275/1027531796.html
0004デフォルトの名無しさん
2007/03/13(火) 14:26:12Part5 http://pc3.2ch.net/tech/kako/1019/10195/1019533942.html
Part4 http://pc.2ch.net/tech/kako/1016/10165/1016597767.html
Part3 http://pc.2ch.net/tech/kako/1009/10094/1009473982.html
Part2 http://pc.2ch.net/tech/kako/1002/10024/1002468050.html
Part1 http://pc.2ch.net/tech/kako/977/977112364.html
0005デフォルトの名無しさん
2007/03/13(火) 14:26:43http://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/
テンプレ終了
0006デフォルトの名無しさん
2007/03/13(火) 17:25:47∩( ´Α`)< 先生、「・・・」ってどうよ?です。
FormsのControl.Scaleメソッドですがいまいち使いどころがわかりません・・・('A`)
FormのScaleを変えたら、そのままなかのコントロールもその比率で縮小されていってほしいんですが、なんか大きさだけ変わって文字の表示とかそのままだったりレイアウトが崩れたりしてます・・・
Childツリーをぶん回して全部のScaleをいじったりするべきということなんでしょうか?
0007デフォルトの名無しさん
2007/03/13(火) 20:51:48先日までVisual Studio .NET 2003での開発環境でしたが、昨日やっと2005に移行しました。
2003で作成したC#コードを2005で作り直していたのですが、
http://www.atmarkit.co.jp/fdotnet/dotnettips/299cancelclose/cancelclose.html
こちらに記載されている終了確認コードが2005では使用できませんでした。
解決策をご存知の方、変更箇所を教えていただけないでしょうか。
よろしくお願いします。
0008デフォルトの名無しさん
2007/03/13(火) 21:12:470009デフォルトの名無しさん
2007/03/13(火) 21:13:31>Closing イベントは、.NET Framework Version 2.0 では使用されません。代わりに FormClosing イベントを使用します。
0010デフォルトの名無しさん
2007/03/13(火) 21:52:15private 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);
これをフォームデザイナで生成されたコードに追加したところ、動作が確認できました。
お騒がせしてすいませんでした。
0011デフォルトの名無しさん
2007/03/14(水) 12:50:21foreach (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は同じスコープの変数なので
同じように振舞うべきのような気がするのですが。
0012デフォルトの名無しさん
2007/03/14(水) 13:09:150013デフォルトの名無しさん
2007/03/14(水) 13:11:03とりあえず,このあたりの記事を読んでみては?
匿名メソッドの仕組み
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
匿名メソッドは実際には匿名クラスとそのインスタンスメソッドなのが
ポイント
001411
2007/03/14(水) 14:00:44どうもです。
つまり
・ローカル変数がコピーされる一時領域(匿名クラス)はデリゲートのスコープではなくてローカル変数のスコープと同じスコープをもつ
・methodは実はmと同じスコープではなくてforeach全体のスコープをもつ
ということですね。
個人的な考えとしてはローカル変数のスコープではなくデリゲートが利用されるたびに匿名クラスもnewすれば
このような問題は起こらないと思うんですがなぜそうしなかったんでしょうね。
ローカル変数が不変という前提なら多少パフォーマンスはよくなるかも知れないですが、
それによって起こる問題のほうが大きいような。
0015デフォルトの名無しさん
2007/03/14(水) 23:11:02ImageListに追加して、
リストビュー内に表示させたいんですが、
画像が青く縁取りされたように感じになってしまうのですが。。。
どうすればよいのでしょう。色は48bit、解像度は16*16pxに設定しています
bmpなどもきれいに表示されません。
0016デフォルトの名無しさん
2007/03/14(水) 23:49:270017デフォルトの名無しさん
2007/03/15(木) 00:16:580018デフォルトの名無しさん
2007/03/15(木) 00:25:03どういうことですか?
0019デフォルトの名無しさん
2007/03/15(木) 00:30:27マルチキャストを使った方がいいんじゃないの
0020デフォルトの名無しさん
2007/03/15(木) 14:00:52WebServiceを使ったファイル転送をしています。
ネットワークとしては
�@クライアントPC
�AWebServiceを実行するPC
�BファイルサーバーPC
動作としては
�@から�Aのwebserviceを実行して、
�@のファイルを�Aのwevservice以下の一時フォルダにファイルストリームで転送
�Aはネットワークドライブで�Bにファイルをコピー。
このファイルのコピーのところでこけます。
CreateDirectryが失敗するので、
ネットワークドライブのアクセス権限の問題だと思うのですが、
WebService自体はなんという名前のアクセス権限なのでしょうか?
ASPNET と NETWORK SERVICE 権限は追加しています。
0021デフォルトの名無しさん
2007/03/15(木) 20:45:17protected 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 イベントが来ません。他に処理しなければならないメッセージがあるんでしょうか?
0022デフォルトの名無しさん
2007/03/15(木) 23:43:22btn.Click += btn_Click;
した後に
このコントロールを削除するとき(アプリは終了させません)
btn.Click -= btn_Click;
は必要でしょうか?
0023デフォルトの名無しさん
2007/03/15(木) 23:51:040024デフォルトの名無しさん
2007/03/16(金) 00:06:040025デフォルトの名無しさん
2007/03/16(金) 00:08:560026デフォルトの名無しさん
2007/03/16(金) 00:10:010027デフォルトの名無しさん
2007/03/16(金) 00:11:380028デフォルトの名無しさん
2007/03/16(金) 01:05:36関係すると思われるリンクを紹介すると
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_06/idnfw11_06_01.html
0029デフォルトの名無しさん
2007/03/16(金) 08:00:06GCのアルゴリズムで勝手にdeleteする
特定のイベントでDisposeすればいいと思う。
0030デフォルトの名無しさん
2007/03/16(金) 09:00:39明示的に破棄しなければならない何らかのリソースを保持しているってことを示すために IDisposable インターフェイスがある。
これを実装してるクラスでは、Dispose() を呼んでそのようなリソースを破棄してやる必要がある。
(実は例外もあるんだけど、それは考える必要なし)
そうでないクラスは、破棄しなくていいっていうか、プログラマは破棄できない。
0031デフォルトの名無しさん
2007/03/16(金) 10:14:34デストラクタ、ファイナライザ、Dispose()、Dispose(bool disposing)・・・
MSDN読んでもよくわからん。
Dispose()実装するくらいしかしてないんだがやっぱりこれだとまずいんだろうか
0032デフォルトの名無しさん
2007/03/16(金) 11:25:26継承をしないとかならDisposeだけでおk
0033デフォルトの名無しさん
2007/03/16(金) 11:51:40アンマネージリソースを持ってないなら問題ないのかもしれないが
0034デフォルトの名無しさん
2007/03/16(金) 12:14:540035デフォルトの名無しさん
2007/03/16(金) 13:42:12そうだな。そうしないとDispose()を呼び忘れたときや、呼べないとき困る。
常にusingが使えるわけじゃないしな。
リソース破棄のタイミングを気にする必要がない(最悪プロセス終了まで保持しててもいいとか)なら、
ファイナライザで破棄するようにして、あえてIDisposableを実装しないという手もある。
IDisposableを実装すると、Dispose() した後のことも考えにゃならん。
0036デフォルトの名無しさん
2007/03/16(金) 15:09:360037デフォルトの名無しさん
2007/03/16(金) 15:51:310038デフォルトの名無しさん
2007/03/16(金) 16:17:28そういう基底クラスは有るが。
0039デフォルトの名無しさん
2007/03/16(金) 16:39:240040デフォルトの名無しさん
2007/03/18(日) 06:17:31なんてマクロが安マネージDLLの引数になっとるんですが、
これ何を使えばええんですか?
0041デフォルトの名無しさん
2007/03/18(日) 06:26:10つか多少オーバースペックでもいいならこういうのの方が早いよ:
ttp://adodotnetsqlite.sourceforge.net/
0042デフォルトの名無しさん
2007/03/18(日) 06:41:30ところでこの2種類のマクロっていったい何に使ってるんでしょうか。
デストラクタタイプって記述をどこかで見たんですが。
0043デフォルトの名無しさん
2007/03/18(日) 06:45:21見えるよ?
スレ違いだし、このへん嫁。
ttp://www.sqlite.org/capi3ref.html#sqlite3_bind_text
0044デフォルトの名無しさん
2007/03/18(日) 06:50:39英語ムリス
スレチガイだった?まぁSqliteの話題ならそうか。
でもタンクス
private const int SQLITE_STATIC = 0x00000000;
private const int SQLITE_TRANSIENT = 0xffffffff;
でヤッテミル。
0045デフォルトの名無しさん
2007/03/18(日) 06:55:07・SQLITE_STATIC なら、静的なメモリだから解放いらね
・SQLITE_TRANSIENT なら、コピーとって自分でやってくれ
という指示をするための値。
もうなますおやすも。
0046デフォルトの名無しさん
2007/03/18(日) 20:26:400047デフォルトの名無しさん
2007/03/18(日) 20:31:25\r は CR
\n は LF
Windows は普通改行には CRLF を使う
C/C++ ではリテラル \n をコンパイル時に環境に合わせて CRLF に置き換えたりすることもある
0048デフォルトの名無しさん
2007/03/18(日) 20:47:490049デフォルトの名無しさん
2007/03/18(日) 21:42:31サーバ側はJavaでつくってC#<->JavaをHTTPでやり取りするみたいな感じです。
1つ問題があって、C#を誰も使ったことがないのです。
言語それぞれにコツみたいなのがあると思うのですが、C#やるならこれは常識だろみたいなのを教えていただけませんか。
0050デフォルトの名無しさん
2007/03/18(日) 21:44:440051デフォルトの名無しさん
2007/03/18(日) 21:45:530052デフォルトの名無しさん
2007/03/18(日) 21:48:19内容は意外といいよね。
人物はちょっとアレだけどw
0053デフォルトの名無しさん
2007/03/18(日) 21:55:38Javaを知ってるならここ
妙に気合の入ったドキュメントだw
0054デフォルトの名無しさん
2007/03/18(日) 22:03:21thx。基本的に大文字で開始なのがわかった。
>>51
thx。とりあえず有名どこは読んでみてます。
Javaやってたからソースはよめるけど書けっていわれると最初はきびしいかな。
明日オライリーの本を買ってみる。
>>53
thx。いまからよんでみます。
0055デフォルトの名無しさん
2007/03/18(日) 22:38:17get、setのメソッドの代わりにプロパティ。
Equalsじゃなくて==で比較すること。
でも、だいたいはJavaと同じような雰囲気なのですぐ慣れるよ。
0056デフォルトの名無しさん
2007/03/18(日) 23:18:47・パッケージでなく名前空間。ソースのディレクトリ階層と名前空間は
一対一に対応している必要は無い。
・値型は自動的にboxingされるので、intに対するIntegerみたいなものは
無いし要らない。
・あまり使わないかもしれないが、値型として構造体が存在する。
・コレクションをiterateするときにforeachが使える。
・usingを使うことで、try〜finallyによるリソース解放パターンより
記述が簡易化される。
・Javaと違ってメソッドはデフォルトでバーチャルではない。
継承とオーバーライドを使ってポリモーフィズムをやりたければ
明示的にキーワードで指定しなければならない。
・プロパティやインデクサ、演算子オーバーロードが存在する。
これらを利用することで記述が簡易化される。
・C++の関数ポインタ風のデリゲートが存在する。ただしただの関数ポインタ
よりはるかに便利。
・組込みのeventメカニズムがある。クライアント側の開発ということなので、
eventとデリゲートについては学ぶべきでしょう。
0057デフォルトの名無しさん
2007/03/18(日) 23:20:140058デフォルトの名無しさん
2007/03/19(月) 00:06:07==を使うのか。これは引っかかりそうだ。thx
>>56
大量の情報thx。
Javaにはない便利そうな機能があるなぁ。だが、メンバーには使わせられん。危険すぎるw
演算子のオーバーロードはおもろいなぁ。
C#だと XXX.add(yyy) とかより XXX + yyy のほうが主流なの?
後者のほうが直感的な気もするけど、Javaにないのを使わせるとろくなことにならなそうだからなぁ。
0059デフォルトの名無しさん
2007/03/19(月) 00:19:420060デフォルトの名無しさん
2007/03/19(月) 00:43:080061デフォルトの名無しさん
2007/03/19(月) 00:55:000062デフォルトの名無しさん
2007/03/19(月) 01:29:29組み込み参照型や値型は全てEqualsを使う。
nullである可能性がある場合はstaticなEquals
==は結局Equals呼んでるんでしょ。?
ちなみにインタプリタパターン使ってC#内で実に言語作るときに
演算子をオーバーロードできるのは凄い便利
パーサ作るときなんかも便利だな。
0063デフォルトの名無しさん
2007/03/19(月) 01:44:37NetworkStreamのReadメソッドの戻り値が読み込んだバイト数を正しく返してくれないです
具体的には読み込んでいない部分を読み込んだものとして返してきます。
int readCount = stream.Read(buf, 0, buf.Length);//bufのサイズを100Mにしてみて実験
readCountは10,000とかの値を返すが、先頭の500くらいしか値が入っていない。
(readCountは読み込んだバイト数が返ってくることを期待している。)
通常のFileStreamで同様のことをすると問題ないのですが、NetworkStreamを使うとうまく報告されないようです。
どのようにすれば、期待したとおり、読み込んだバイト数を取得できるのでしょうか?
0064デフォルトの名無しさん
2007/03/19(月) 01:49:03んー、そんな経験無いなぁ。
0065デフォルトの名無しさん
2007/03/19(月) 01:50:51値型でEquals使うとボックス化が発生しちゃわない?
0066デフォルトの名無しさん
2007/03/19(月) 02:02:330067デフォルトの名無しさん
2007/03/19(月) 02:14:54Equalsってobjectを引数にとるのしかないっしょ。staticのも非staticのも。
ためしにSize.Equalsしてみたらちゃんとボックス化されてたぞ。
==はオーバーライドされてるので当然ボックス化されない。
0068デフォルトの名無しさん
2007/03/19(月) 02:18:11同名関数たくさんあるときはプロトタイプかいといてちょ
0069デフォルトの名無しさん
2007/03/19(月) 02:24:24ん?それってIEquatableを実装した値型じゃないと意味ないんじゃ?
>>62に書かれてるのはもっと一般的な話だと思うのだが・・・
0070デフォルトの名無しさん
2007/03/19(月) 02:39:28Equalsはメソッド呼び出しが必要だからやっぱり==を使うべきだと思う
0071デフォルトの名無しさん
2007/03/19(月) 05:21:080072デフォルトの名無しさん
2007/03/19(月) 05:23:530073デフォルトの名無しさん
2007/03/19(月) 09:40:480074デフォルトの名無しさん
2007/03/19(月) 10:02:240075デフォルトの名無しさん
2007/03/19(月) 10:06:000076デフォルトの名無しさん
2007/03/19(月) 10:15:50最大限のパフォーマンスは得られない。
ジェネリックだとこれくらいが関の山だが。
0077デフォルトの名無しさん
2007/03/19(月) 11:13:180078デフォルトの名無しさん
2007/03/19(月) 11:30:320079デフォルトの名無しさん
2007/03/19(月) 11:38:46これくらいのやりかたしかないってこと。
0080デフォルトの名無しさん
2007/03/19(月) 12:40:11つまりDataSourceにList指定するとして、そのListのアイテム用の汎用クラスって意味ですが。
まあ自分で作ってもたいした手間じゃないんだけど。
0081デフォルトの名無しさん
2007/03/20(火) 04:18:57フォームのデザイン時の奴みるとできるっぽいんですが
それらしいプロパティがありません。
とりあえずクリックされてるのが+なのかラインなのかノードなのかが
わかればいいんですが。
0082デフォルトの名無しさん
2007/03/20(火) 04:24:150083デフォルトの名無しさん
2007/03/20(火) 14:08:18誰もインストールしてないじゃん。
0084デフォルトの名無しさん
2007/03/20(火) 16:20:090085デフォルトの名無しさん
2007/03/20(火) 16:46:240086デフォルトの名無しさん
2007/03/20(火) 17:24:17なんて読むの?
0087デフォルトの名無しさん
2007/03/20(火) 17:54:020088デフォルトの名無しさん
2007/03/20(火) 18:03:060089デフォルトの名無しさん
2007/03/20(火) 18:14:500090デフォルトの名無しさん
2007/03/20(火) 18:30:240091デフォルトの名無しさん
2007/03/20(火) 20:17:26なんて読むの?
0092デフォルトの名無しさん
2007/03/20(火) 20:20:180093デフォルトの名無しさん
2007/03/20(火) 20:25:00そういう仕様でした。
0094デフォルトの名無しさん
2007/03/20(火) 21:23:140095デフォルトの名無しさん
2007/03/20(火) 21:32:16無いからとっとと自分で作れよ
0096デフォルトの名無しさん
2007/03/20(火) 22:00:57俺は必要性を感じない。
だからない。
0097デフォルトの名無しさん
2007/03/20(火) 22:17:11っていうか、DisplayMemberだのValueMemberだの、このListBox系のコントロールの
この辺りの仕様はやっつけにしてもちょっと醜過ぎるね。
0098デフォルトの名無しさん
2007/03/20(火) 22:40:31>ListBox1.ValueMember = "ShortName" ;
必要な人には便利なんじゃないの?
俺は使わないけど。
0099デフォルトの名無しさん
2007/03/21(水) 00:55:37でかいから。
0100デフォルトの名無しさん
2007/03/21(水) 01:03:00さすがにそれやっちゃうと独禁法でゴネられても仕方がないだろ。
0101デフォルトの名無しさん
2007/03/21(水) 01:09:480102デフォルトの名無しさん
2007/03/21(水) 01:12:510103デフォルトの名無しさん
2007/03/21(水) 01:41:272003Serverでは1.1が標準だったが2.0が出てしまった。
Vistaで標準で3.0が入ってようが3.0が普及する頃には新しいバージョンが出てしまうのではと思うよ。
0104デフォルトの名無しさん
2007/03/21(水) 01:44:300105デフォルトの名無しさん
2007/03/21(水) 05:08:230106デフォルトの名無しさん
2007/03/21(水) 08:06:49正確には2.0+WPF+WCF+WFだけどな
リリースされたばかりで判断するのは早い
iPodやDSのリリース直後の評価を見ればわかると思う
0107デフォルトの名無しさん
2007/03/21(水) 08:09:23TBS+MSねつ造作成アプリに騙された馬鹿がここにもいたか
TBSがSI事業するわけないだろ常識的に考えてw
0108デフォルトの名無しさん
2007/03/21(水) 08:19:460109デフォルトの名無しさん
2007/03/21(水) 16:12:46.netのアプリをクラックする場合はどうやるんすか?
ソースコード丸見えならクラックされ放題な気が。
0110デフォルトの名無しさん
2007/03/21(水) 16:15:580111デフォルトの名無しさん
2007/03/21(水) 16:44:27アセンブリのヘッダにハッシュが含まれてるんじゃないっけ?
整合性とれなくならない?
0112デフォルトの名無しさん
2007/03/21(水) 16:49:15ヒント:難読化
0113デフォルトの名無しさん
2007/03/21(水) 16:53:10それも書き換えりゃいいじゃん。
電子署名されてたら別だけど
0114デフォルトの名無しさん
2007/03/21(水) 18:24:18読み込んだ画像をそれぞれgazou[0]、gazou[1]、gazou[2]のように、配列として扱うにはどうすればよいでしょうか。
また、pictureboxを3つ作って、コードの中でpicturebox[n]のように書いたらエラーになってしまいました。
0115デフォルトの名無しさん
2007/03/21(水) 18:29:380116デフォルトの名無しさん
2007/03/21(水) 18:42:500117デフォルトの名無しさん
2007/03/21(水) 18:44:18Bitmap[] gazou = new Bitmap[3];
gazou[0] = HogeResource.HagePic1;
gazou[1] = HogeResource.HagePic2;
gazou[2] = HogeResource.HagePic3;
……
ってことじゃないの
0118デフォルトの名無しさん
2007/03/21(水) 18:58:01そうか、ビットマップという型の配列を定義するんですね。int[] num = new int[3]と同じようなもので、整数を定義するのと同じことなのですか。
おかげさまでスッキリしました。ごくごく初歩的なことに付き合わせてしまい、申し訳ありませんでした。
0119デフォルトの名無しさん
2007/03/21(水) 19:47:23…まあその段階ならまだ気にしなくていいか
0120デフォルトの名無しさん
2007/03/21(水) 20:22:480121デフォルトの名無しさん
2007/03/21(水) 21:00:460122デフォルトの名無しさん
2007/03/21(水) 22:36:240123デフォルトの名無しさん
2007/03/22(木) 18:34:16WinのC#を使ったアプリでQuickTimeSDKを使って動画からフレームを
バイナリで取得し静止画で吐き出させたいのですが(notクリップボードでのコピー)、
QTのコンポーネントを把握して無いためやり方が分かりません。。。(C#も初心者だが、、)
CのGworldみたいなオフスクリーンのバッファとかってあるのでしょうか?
よろしくお願いします。
もしくはコレを解決できるチュートリアル的なページがあればよろしくです。
0124デフォルトの名無しさん
2007/03/22(木) 22:09:09h
t
t
p://developer.apple.com/samplecode/QuickTime/idxQuickTimeforWindows-date.html
0125デフォルトの名無しさん
2007/03/23(金) 10:33:53コレだろがボケというのがあるなら示して。
0126デフォルトの名無しさん
2007/03/23(金) 21:03:34xml <-> DTO を設定ファイルだけでできるような。
0127デフォルトの名無しさん
2007/03/23(金) 21:10:480128デフォルトの名無しさん
2007/03/24(土) 00:35:56ちょっと具体的に教えてください。
Webでもなさそうだし、バッチ処理でもなさそうだし。
なんに使うのかなあ?
0129デフォルトの名無しさん
2007/03/24(土) 00:53:44拡張子がaspxのwebは、C#かVB.NETで作られてる。(ほかの言語の可能性もあるけど)
0130デフォルトの名無しさん
2007/03/24(土) 00:54:57好き嫌いは抜きにしてとりあえず楽だから。
0131デフォルトの名無しさん
2007/03/24(土) 00:57:020132デフォルトの名無しさん
2007/03/24(土) 01:03:160133デフォルトの名無しさん
2007/03/24(土) 01:09:420134デフォルトの名無しさん
2007/03/24(土) 01:09:430135デフォルトの名無しさん
2007/03/24(土) 01:54:19PHPは画面系ということですか?
0136デフォルトの名無しさん
2007/03/24(土) 01:56:120137デフォルトの名無しさん
2007/03/24(土) 01:58:34ぐぐれ
0138デフォルトの名無しさん
2007/03/24(土) 02:03:36ASPは2.0から、PHPみたいにHTMLにコードを埋め込んだりしなくなったな。
PHPもフレークワークとかどんどんでててきてそういう流れだろ?
0139デフォルトの名無しさん
2007/03/24(土) 07:43:09.NETFrameworkはC#・VB・C++等を利用することができる。
ASP.NETはActive Server Pagesでタグで記述を行う。
タグで記述されたWebコントロールの制御を主にC#等が行う。
MVCモデルで記述するとViewがASP・ModelとControlがC#等で作成する。
Contorlはアプリケーションの制御・Modelはデータの読み書き等を行うプログラムである。
.NETFrameworkの制御はイベントドリブンを採用している。
0140デフォルトの名無しさん
2007/03/24(土) 08:24:090141デフォルトの名無しさん
2007/03/24(土) 09:14:44SQLServer2005のマネージャー。
0142デフォルトの名無しさん
2007/03/24(土) 10:04:50a.equals(b)
両者はまったく同じことですか?
違いはありますか?
0143デフォルトの名無しさん
2007/03/24(土) 10:08:12aがnullの場合、後者はヌルリ
普通に a==b と書け
0144デフォルトの名無しさん
2007/03/24(土) 11:08:560145デフォルトの名無しさん
2007/03/24(土) 11:11:490146デフォルトの名無しさん
2007/03/24(土) 11:11:520147デフォルトの名無しさん
2007/03/24(土) 11:29:480148デフォルトの名無しさん
2007/03/24(土) 11:32:510149デフォルトの名無しさん
2007/03/24(土) 11:40:23a = nullの場合は String.IsNullOrEmpty(a)で調べる。
0150デフォルトの名無しさん
2007/03/24(土) 11:46:02>objA が objB と同じインスタンスである場合、両方のインスタンスが null 参照の場合、
>または objA.Equals(objB) が true を返す場合は true。それ以外の場合は false。
String.EqualsやStringに対する == も同じ実装なんじゃない?
0151デフォルトの名無しさん
2007/03/24(土) 11:54:540152デフォルトの名無しさん
2007/03/24(土) 11:59:51あったとしても全体の1%に満たない部分に労力をつぎ込んでその部分の性能を倍にしましたっていう話。
0153デフォルトの名無しさん
2007/03/24(土) 12:06:28「このメソッドは2.0から追加されたから使用」とかコメントに書いてんの?
0154デフォルトの名無しさん
2007/03/24(土) 12:07:29お前だけ言ってることがずれてるわけだが
0155デフォルトの名無しさん
2007/03/24(土) 12:12:29確か.NETのStringはsealedでimmutableでdefault internだろ。
純粋にアドレス比較でいいはず。
0156デフォルトの名無しさん
2007/03/24(土) 12:16:53String.op_Equality メソッド
>この演算子は、Equals メソッドを使用して実装されます。つまり、比較対照値の参照と値が等しいかどうかがテストされます。
>この演算子は、序数に基づく比較を実行します。
これの実装にはString.Equals メソッド (String, String)が使われている。
関数が二重に呼ばれることになるが、最適化で変わらなくなる。
0157デフォルトの名無しさん
2007/03/24(土) 12:21:42String.op_Equality は String.Equals(String, String) を呼んでるだけ
おそらくJITコンパイル時にインライン化されるはず
String.Equals(String, String) はまず参照を比較し、参照が異なった場合は
長さを比較し、長さが等しければポインタを使ってデータを比較してる
0158デフォルトの名無しさん
2007/03/24(土) 14:16:37それ以外のあらゆる型では型名.Equals()は==より比較にならないほど遅い。ちょっと前にも出てたけど。
他の型と統一性を考えたらstring.Equals()を使うメリットなんてないはず。
0159デフォルトの名無しさん
2007/03/24(土) 14:27:230160デフォルトの名無しさん
2007/03/24(土) 14:27:340161デフォルトの名無しさん
2007/03/24(土) 14:30:10推奨してるはずなのに
0162デフォルトの名無しさん
2007/03/24(土) 14:31:370163デフォルトの名無しさん
2007/03/24(土) 14:31:47レベル低すぎるな
0164デフォルトの名無しさん
2007/03/24(土) 14:38:00例えば?
0165デフォルトの名無しさん
2007/03/24(土) 14:43:08系統だてて説明するの面倒だなあ。。
その辺のことは、例えばアスキーから出てるartonって人の書いたc#の入門書に
詳しく書いてあるから興味があったら読むといいと思う。
0166デフォルトの名無しさん
2007/03/24(土) 14:43:15DateTime.Equals(DateTime)は実装されてるぞ。
0167デフォルトの名無しさん
2007/03/24(土) 14:49:361.値型 比較演算子 値型
2.オブジェクト.メソッド(変数1, 変数2)
1の場合は値の比較なら問題なし
2の場合は指し示すポインタ・型などを比較する場合に用いる
0168デフォルトの名無しさん
2007/03/24(土) 14:54:430169デフォルトの名無しさん
2007/03/24(土) 15:05:21なんでなんだろ
0170デフォルトの名無しさん
2007/03/24(土) 16:00:21サンクス。
よくわかったよ。
0171デフォルトの名無しさん
2007/03/24(土) 17:15:20値型はまた別では。参照比較しても意味がないし。
0172デフォルトの名無しさん
2007/03/24(土) 17:27:14ボクシングが発生しないだろ
0173デフォルトの名無しさん
2007/03/24(土) 18:00:06値型は迷わず == を使った方がよい。
参照型は == が値の比較になってるか参照の比較になってるかは実装しだいだから用心深く使い分ける。
Stringなどわかり切ってるものは == でいい。
IDEで値型と参照型を色違いで区別してくれるくらいのサポートは欲しいの。
0174デフォルトの名無しさん
2007/03/24(土) 18:21:09考慮して比較しないといけない場合もある
例:TextBox is Control
0175デフォルトの名無しさん
2007/03/24(土) 18:30:350176デフォルトの名無しさん
2007/03/24(土) 18:39:57ツールのオプション
ユーザーの種類(値の型)で型の色は変えられる。変数の方は無理っぽい。
それからなぜかこの項目でVBのソースの色は変わらなかった。
0177デフォルトの名無しさん
2007/03/24(土) 19:00:20『プログラミング .NET Framework 第2版』「6.1.3 値型によるEqualsの実装」に詳しく書いてあるね。
値型でEqualsをオーバーライドしない場合は
System.ValueType.Equalsでオーバーライドされた実装が呼ばれるんだけど、
この実装ってのがリフレクション経由でフィールドを全部列挙して、
それぞれに対してEqualsを呼び出すというものだったりする。
比較のたびに毎回リフレクション使われるとパフォーマンス的に悲惨なので、
値型は可能ならEqualsをオーバーライドすべしといわれていると。
0178デフォルトの名無しさん
2007/03/24(土) 19:02:310179デフォルトの名無しさん
2007/03/24(土) 19:29:08オレはチャンネル変えた。
0180デフォルトの名無しさん
2007/03/24(土) 21:14:17単純な型だとリフレクション使わずバイナリで比較されるはずだが
0181デフォルトの名無しさん
2007/03/24(土) 21:57:43System.ValueType.Equals見てみたけど確かにそうっぽいね。
てことはデフォのSystem.ValueType.Equals(object obj)の欠点は
内部でRuntimeTypeを生成するコストがかかることと
引数がobject型のせいで確実にboxingが発生することぐらいか。
0182デフォルトの名無しさん
2007/03/24(土) 22:03:150183デフォルトの名無しさん
2007/03/24(土) 22:04:170184デフォルトの名無しさん
2007/03/24(土) 22:05:280185181
2007/03/24(土) 22:06:35Equalsの回数に比例してRuntimeTypeのインスタンスが作られるわけじゃないと。
というわけでRuntimeType生成コストも気にしなくていいみたい。
0186デフォルトの名無しさん
2007/03/24(土) 22:12:50調査してって、意識してればどこでボックス化が発生するかくらいわかるべ。
それにかなりコストが高いから意識するだけの価値はある。
0187デフォルトの名無しさん
2007/03/24(土) 22:17:31「パフォーマンス気にするならC++使えばいいじゃんバカジャネーノ」
0188デフォルトの名無しさん
2007/03/24(土) 22:23:25ボクシングが発生しないように配慮するのは当然
0189デフォルトの名無しさん
2007/03/24(土) 23:56:32どうせ
0190デフォルトの名無しさん
2007/03/25(日) 00:00:53多くの場合、あんまり神経質になる必要がないのも事実だけど、
パフォーマンス関係のことってちょっとルーズにやる過ぎると
とんでも遅くなって使い物にならなくなることも普通にある。
0191デフォルトの名無しさん
2007/03/25(日) 06:34:390192デフォルトの名無しさん
2007/03/25(日) 08:39:58何がしたい?
デリゲートを指定できるメリットが分からないけど。
public class Test<T>
{
public delegate void func(T x);
}
みたいなこと?
0193デフォルトの名無しさん
2007/03/25(日) 09:23:130194デフォルトの名無しさん
2007/03/25(日) 09:43:09組み込みのイベントが使いづらい(自由に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); }
みたいなコードをイベントごとに記述するしかないのかな。
0195デフォルトの名無しさん
2007/03/25(日) 09:47:190196デフォルトの名無しさん
2007/03/25(日) 10:09:390197194
2007/03/25(日) 10:23:00すみませんコンポーネントについてはよく知らないんですが、
ざっと調べた限りではComponentを基底にもつクラスの話ですよね。
>>194の例では別に基底クラスを規定してないので使えないような気がします。
0198デフォルトの名無しさん
2007/03/25(日) 11:37:260199デフォルトの名無しさん
2007/03/25(日) 12:27:37public event EventHandler MyEvent
{
add{this.Events[eventKeyMyEvent].
}
0200199
2007/03/25(日) 12:29:07public event EventHandler MyEvent
{
add{this.Events[eventKeyMyEvent].AddHandler(value);}
remove{this.Events[eventKeyMyEvent].RemoveHandler(value);}
}
みたいに書けるのは知ってるの?
0201デフォルトの名無しさん
2007/03/25(日) 13:42:470202194
2007/03/25(日) 19:41:52ああ、>>194のうちAddMouseDownHandlerとRemoveMouseDownHandlerが
public event MouseDown {
add { _mouseDownHandler += value; }
remove { _mouseDownHandler -= value; }
}
のように書ける、ということですか。
でも手間としてはあまり変わってないような。Invokeのためのメソッドはやはり必要でしょうし。
0203デフォルトの名無しさん
2007/03/25(日) 20:15:080204デフォルトの名無しさん
2007/03/25(日) 20:17:390205デフォルトの名無しさん
2007/03/25(日) 20:21:51{
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); }
}
0206デフォルトの名無しさん
2007/03/25(日) 20:24:160207デフォルトの名無しさん
2007/03/25(日) 20:31:460208194
2007/03/25(日) 20:44:05おお、いいですね。
一見スマートじゃなさそうですがうまく動きますね。外から見れば>>194とまったく同じですし。
ちなみにTとDelegateの間でキャストができないので (T)(object)Delegate.Combine(...) などとする必要があるようです。
というわけで使わせてもらいます。レスくれた方々どうもでした。
0209デフォルトの名無しさん
2007/03/25(日) 20:50:530210デフォルトの名無しさん
2007/03/25(日) 20:52:560211デフォルトの名無しさん
2007/03/25(日) 21:04:370212デフォルトの名無しさん
2007/03/25(日) 21:16:28http://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 パディング は無しでやっています。
以上、何かアドバイスがあれば、よろしくお願いします。
0213デフォルトの名無しさん
2007/03/25(日) 21:28:52CIL書く知識があれば、型パラメータのセカンダリ制限にSystem.Delegate指定できるよ。
0214デフォルトの名無しさん
2007/03/25(日) 21:33:160215デフォルトの名無しさん
2007/03/25(日) 21:38:33TextBoxのこと?
長い文字列になるとAppendTextの方が速いみたい
0216デフォルトの名無しさん
2007/03/25(日) 21:57:32おおそれはすごい。
ついにRSAもハックされたか。
0218デフォルトの名無しさん
2007/03/25(日) 23:19:03>Kから生成され予め配布された公開鍵P
KからPを生成したと読めるから冗談で突っ込んだだけなんだが…
0219デフォルトの名無しさん
2007/03/25(日) 23:22:55何でCを復号する必要があるの?
RSACryptoServiceProviderは公開鍵での復号機能は持ってないみたいだな。
暗号化と復号が同じ処理ならEncryptでもいけるのかも知れんけど、実際どうなんだっけ?
よく知らない(もしそうであったとしてもRSACryptoServiceProviderで本当にできるのかはもちろん知らん)。
少なくともDecryptじゃ無理なのは間違いないわな。
0220デフォルトの名無しさん
2007/03/25(日) 23:25:200221212
2007/03/26(月) 00:31:05$ openssl rsa -pubout
上記のコマンドから得られる結果も何かの冗談ですか?
秘密鍵→公開鍵の処理に必要な計算量をどんなに多く見積もっても、
公開鍵→秘密鍵のそれに比較すれば、無視できる程度で計算可能なはずですが。
恐らく、O(1) くらいで。
>>219
> 何でCを復号する必要があるの?
冷静に考えてみると、復号する必要はないです。PHPの関数に
openssl_private_encrypt() というのがあったため、興味本位で調べていたら、
はまってしまったようです。素直に署名で何とかします。お騒がせしました。
>>220
これは私の説明不足ですね。VerifyData() のくだりは、「鍵ペアがおかしいわけではない」
という意味で書きました。ですので、これを書いた時点では、署名やダイジェストを
どうにかしたいわけではなかった、ということです。すみません。
0222デフォルトの名無しさん
2007/03/26(月) 01:17:340223デフォルトの名無しさん
2007/03/26(月) 01:21:58すまんかったorz
0224デフォルトの名無しさん
2007/03/26(月) 11:41:33継承を禁止されるおかげでちょっと独自の動きをさせたいことに多大な制限がかかるんだが。
あほがうかつに継承することでシステムが複雑になりうることは理解できるけれどそれを暮らす設計者が禁止するほどお前は設計についてすべてを見渡せるのかと子一時間。
0225デフォルトの名無しさん
2007/03/26(月) 11:58:19・かなり汚い実装してるから継承しても無駄!(Graphicsみたいに)
0226デフォルトの名無しさん
2007/03/26(月) 12:03:26設計者が意図していない継承をさせたくない場合に役立つ。
こういうのは流行やいろいろ考え方はあるのだろうけど、
C#はこういう面では非常に保守的で、
overrideだってクラス設計者がvirtualと宣言してなきゃ出来ないわけだ。
利用者が機能拡張したいなら委譲と包含が基本だろうな。
0227デフォルトの名無しさん
2007/03/26(月) 12:12:18うかつに継承することでシステムを複雑することが無いほどお前は設計についてすべてを見渡せるのかと子一時間。
0228デフォルトの名無しさん
2007/03/26(月) 12:18:03さすがにもう少しなんとかならなかったのかと思う
0229デフォルトの名無しさん
2007/03/26(月) 12:18:180230デフォルトの名無しさん
2007/03/26(月) 12:42:42よくよく考えてみると確かに疑問だね。
継承を許すと問題が起こりうる場合というのを考えてみたけど
ちょっと思い浮かばない。
0231デフォルトの名無しさん
2007/03/26(月) 13:00:460232デフォルトの名無しさん
2007/03/26(月) 13:02:160233デフォルトの名無しさん
2007/03/26(月) 13:50:07取り合えずfinalにしておけといった記述も見受けられるが、
C#の場合virtual overrideの仕組みがあるから、
あえてsealedにしなくても予期できないような拡張はされにくい。
0234デフォルトの名無しさん
2007/03/26(月) 13:59:030235デフォルトの名無しさん
2007/03/26(月) 16:56:23そうでないといろいろ言語上の制限で記述ができなかったりおかしくなったりすることが多々ある。
いきすぎるとC++のような変態コード生成機になるけれどあながちそれも悪いとはいえないとおもふ。
0236デフォルトの名無しさん
2007/03/26(月) 17:12:440237デフォルトの名無しさん
2007/03/26(月) 17:19:35厳しい仕様にしたってだけじゃないのかねぇ。
Javaのデフォルトバーチャルな世界や動的言語のダックタイピングと
真逆な方向性なわけだけど、Javaがデフォルトバーチャルで誰か困ったか?
むしろC++がデフォルトバーチャルでなくて素直に継承とポリモーフィズムが
適用できず、不便に感じるケースの方がずっと多いんじゃないか?
まーC++にはテンプレートメタプログラミングという逃げ道もあるわけだけどさ。
0238デフォルトの名無しさん
2007/03/26(月) 17:21:29べったり依存しててどうしようもないものはsealedになってる場合が多いみたいだな
0239デフォルトの名無しさん
2007/03/26(月) 19:42:04理解できると思う。
初級PGにGDIコード書かせるとよくわかると思う
0240デフォルトの名無しさん
2007/03/26(月) 22:31:27プログラムの可変な場所を明示的に書けるC#のスタイルの方が生産性が高いと思う。
テンプレートメソッドパターンでサブクラスを人に見せるOr渡すときとか
ライブラリ設計しててvirtualだとさらに柔軟になるだろうけど、わざと変更範囲を閉じるとか。
(virtaulにしてoverrideして実装すると危なそうなことを明示する)
実作業レベルではvirtualが限定されているおかげでIDEでoverrideと打つ拡張方法が楽
0241デフォルトの名無しさん
2007/03/26(月) 23:33:430242デフォルトの名無しさん
2007/03/27(火) 00:35:15世の中あほが非常に多いんです。
継承とnewとoverrideとインターフェースの明示実装を駆使して全部実装が違っていて
全部実装が間違っているDisposeとか目の当たりにするとあほ防止の機能は重視した方がいいんです。
0243デフォルトの名無しさん
2007/03/27(火) 09:31:28.NET Frameworkでは不可能でしょうか?
ToolStripMenuItemのMouseDownイベントで右クリックイベントは捕捉できるんですが
そこからさらにContextMenuStripを作成して表示すると古いメニューが消えてしまいます。
0244デフォルトの名無しさん
2007/03/27(火) 09:57:15コンテクストメニューを表示するタイミングでToolStripMenuItem.DropDown.AutoClose=false
そして、消えるときに元に戻してやればいい
0245デフォルトの名無しさん
2007/03/27(火) 10:07:340246243
2007/03/27(火) 11:23:13どうもありがとうございます。そんなプロパティがあったとは気づきませんでした。
しかしこのままだと問題があって、古いメニューの方も操作できる状態になってしまいました。
で、GetWindowLong/SetWindowLongで古いドロップダウンのウインドウプロシージャをすげ替えて
マウスイベントを排除することで古いメニューを操作できなくしました。
基本的に解決ですが、もし他にスマートな方法があればお願いします。
0247デフォルトの名無しさん
2007/03/27(火) 12:16:58以前やったやつ。必要十分かどうか確かめてないが
ToolStripDropDownMenuを継承、OnMouseUpで右クリック補足
→フラグ立てる。
フラグが立っているときは
PreProcessMessageでfalseを返す
WndProcでWM_MOUSELEAVEを無視する
→右クリックのイベントを起こす
→フラグ降ろす
0248デフォルトの名無しさん
2007/03/27(火) 16:28:01使ってデータをやり取りする部分を考えていますが、実際にSendMessage
を行う際の お互いのWindowハンドルというのはどのように取得すれば
いいのでしょうか?
HWND_BROADCASTを使うと当然のごとく、いろいろなアプリが反応します。
0249デフォルトの名無しさん
2007/03/27(火) 16:45:50FindWindow() で自己解決しましたm(_ _)m
0250デフォルトの名無しさん
2007/03/27(火) 21:46:240251243
2007/03/27(火) 23:05:25レスどうもです。ToolStripDropDownMenuを継承したらP/Invokeを使わずにできました。
(継承できたら楽だなとは思ってたんですが実際に継承できるとは思ってませんでした)
ただ、PreProcessMessageに制御がこなかったのでWndProcをかわりにオーバーライドしました。
なんだかんだでP/Invokeを使わずに色々なことができるようになってるんですね。
025235
2007/03/28(水) 15:21:01ダブルバッファリングの処理を入れたところ、
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);
}
}
宜しくお願い致します。
0253252
2007/03/28(水) 15:22:340254デフォルトの名無しさん
2007/03/28(水) 16:45:550255デフォルトの名無しさん
2007/03/28(水) 16:52:450256デフォルトの名無しさん
2007/03/28(水) 18:47:08精神分裂症的な、何がしたいのかよくわからんコードだ。
自分でベースクラスに対して「俺様が描画するからお前黙ってろ」って命令してるんだから
描画されるわけがないと思うんだが。。
ひょっとしてベースクラスに対して「ダブルバッファリングを使ってお前が描画しろ」
と言いたいつもりなのかな?
だとしたらそんなことはたぶん簡単にはできない。
0257デフォルトの名無しさん
2007/03/28(水) 20:11:53yieldでデリゲートを返すようにしたらスクリプトみたいでおもしろいんじゃね
0258デフォルトの名無しさん
2007/03/28(水) 20:41:210259デフォルトの名無しさん
2007/03/29(木) 00:52:30死ね
0260デフォルトの名無しさん
2007/03/29(木) 01:57:23(統合失調症に改称)
0261デフォルトの名無しさん
2007/03/29(木) 10:32:13回答ありがとうございます。この件は解決したのですが、
後学のために教えてください。
>自分でベースクラスに対して「俺様が描画するからお前黙ってろ」
これってオーバーライドしたOnPaintの中でbase.OnPaintを呼び出しても
処理は実行されないんですか?
>ひょっとしてベースクラスに対して「ダブルバッファリングを使ってお前が描画しろ」
そのとおりです。
0262デフォルトの名無しさん
2007/03/29(木) 11:26:01http://msdn2.microsoft.com/ja-jp/library/3t7htc9c(VS.80).aspx
On**は基本的に**イベントを発生させるためのもの
ついでに,派生クラスでオーバーライドしたらイベントハンドラを追加しなくても
カスタム動作を加えることができるようにしてあるだけ
0263デフォルトの名無しさん
2007/03/29(木) 11:38:11なるほど、On**はイベントを発生させるためだけ(描写処理を呼び出すだけ)のもので、
その中に描写処理は含まれてない。
だから、>>252のソースでは
UserPaintで、描写処理は自分で行うぜ!(既存の描写は無視)という風にしているから、
描写処理が行われなかったわけですね。
OnPaint自体が描写処理を行うと勘違いしてました・・・。
ありがとうございました!!
0264デフォルトの名無しさん
2007/03/29(木) 11:47:120265デフォルトの名無しさん
2007/03/29(木) 12:13:270266デフォルトの名無しさん
2007/03/29(木) 13:57:350267デフォルトの名無しさん
2007/03/29(木) 14:45:100268デフォルトの名無しさん
2007/03/29(木) 16:39:30DLLのクラスライブラリから呼び出すとティックが来ないなどあるんでしょうか?
0269デフォルトの名無しさん
2007/03/29(木) 16:48:36System.Windows.Forms.Timerを使うにはスレッドがウィンドウを持っていてメッセージを処理してる必要がある。
http://msdn2.microsoft.com/ja-jp/library/tb9yt5e6(VS.80).aspx
ここ読んどけ
0270デフォルトの名無しさん
2007/03/30(金) 01:06:02非同期のメソッドにして処理をしたいのですが
ぐぐるとMSDNのところくらいしかまともな回答に
たどり着きません。
しかし、そのMSDNで RemoteService クラスを使ってますが
そのクラスがどこにもありません。。。
どの空間にあるのでしょうか?
また、他に非同期にする手段はありますでしょうか?
よろしくお願いします。
0271デフォルトの名無しさん
2007/03/30(金) 01:29:18そのコードがDLLにあるだけ。
0272デフォルトの名無しさん
2007/03/30(金) 01:47:580273デフォルトの名無しさん
2007/03/30(金) 02:09:280274デフォルトの名無しさん
2007/03/30(金) 09:34:15Viewに100件のデータがあるとします。
Timerで一定時間ごとに1件削除→コミットするのですが、
コミットのタイミングでスクロールバーをダブルクリックすると、
DataGridViewが最大化されてしまうのです。
何とか回避したいのですが、良い方法は無いでしょうか?
0275デフォルトの名無しさん
2007/03/30(金) 18:03:38コミットのタイミングでダブルクリックってなんでわかるの?
DataGridViewが最大化って?
・・・
0276デフォルトの名無しさん
2007/03/30(金) 18:26:310277デフォルトの名無しさん
2007/03/30(金) 18:30:55俺様用語矯正スレでも立てたら
0278デフォルトの名無しさん
2007/03/30(金) 18:35:180279デフォルトの名無しさん
2007/03/30(金) 20:11:05なんかの参照を追加しないといけないんでしょうか?
0280デフォルトの名無しさん
2007/03/30(金) 20:12:480281279
2007/03/30(金) 20:20:29MFC には ToolBox に出てたと思うのですが・・・
0282デフォルトの名無しさん
2007/03/30(金) 20:30:030283279
2007/03/30(金) 22:42:09なるほど、標準では使えないのですね・・・
ラッパを作るってのをやったことないのですが、どんな手順で作るものなのかヒントをもらえないでしょうか。
何かの基底クラスを派生させて、いくつかのメソッドをオーバーライドしていく、みたいな感じで作れたりするものでしょうか?
0284デフォルトの名無しさん
2007/03/30(金) 22:57:050285デフォルトの名無しさん
2007/03/30(金) 22:58:51ttp://mnow.wankuma.com/cs_usercontrol15.html
0286デフォルトの名無しさん
2007/03/30(金) 22:58:56ちなみに WC_IPADDRESS は SysIPAddress32 って文字列の別名
0287デフォルトの名無しさん
2007/03/30(金) 23:04:25ポップアップがいっぱい開くのはやめていただきたい。。。
0288デフォルトの名無しさん
2007/03/31(土) 11:49:060289デフォルトの名無しさん
2007/03/31(土) 11:54:400290デフォルトの名無しさん
2007/03/31(土) 11:59:21ただし、プログラミング初心者向けではないが。
0291288
2007/03/31(土) 14:09:13>>289
オライリーの本ですね
>>290
日経BPの書籍でC#と言ったら
Petzold著のC#によるプログラミングWindowsとかですかね
0292デフォルトの名無しさん
2007/03/31(土) 18:04:090293デフォルトの名無しさん
2007/03/31(土) 18:08:42参照型と値型にポインタ等この辺を理解できてないうちにプログラミング
されても戦力にならないからな。
0294デフォルトの名無しさん
2007/03/31(土) 18:21:260295デフォルトの名無しさん
2007/03/31(土) 18:39:54どれもC#使いながら覚えても大してかわらん。
むしろC#の方が初心者が無茶な書き方できないから良いと思うんだが。
本当の初心者がC#上でポインタ使えるようになるのは相当先の話だろ。
0296デフォルトの名無しさん
2007/03/31(土) 20:06:300297デフォルトの名無しさん
2007/03/31(土) 20:38:200298デフォルトの名無しさん
2007/03/31(土) 21:21:43プログラマーを名乗るのはやめてほしいくらいだな。
Formsでコントロール貼り付けるだけならエンドユーザーでも
できるからな。
0299デフォルトの名無しさん
2007/03/31(土) 21:25:250300デフォルトの名無しさん
2007/03/31(土) 22:10:080301デフォルトの名無しさん
2007/03/31(土) 22:19:21VB上がりだと理解すらできないと思われるが。
どの程度だとベテランと呼ばれる領域なのか?
同期制御やManagedDirectXを使いこなせる位か?
0302デフォルトの名無しさん
2007/03/31(土) 22:20:44そんな事言う割にここの回答キツイよね
0303デフォルトの名無しさん
2007/03/31(土) 22:25:480304デフォルトの名無しさん
2007/03/31(土) 22:35:11VB 上がりはむしろ慣れてる気がする
0305デフォルトの名無しさん
2007/03/31(土) 22:38:31ポインタ扱えるとかメモリ管理とかコンピュータサイエンスの基礎レベルは知っておいてもらいたい。
なんだかんだできっちり情報やった人とそうでない人ですごい品質の差があるような気がする。
0306デフォルトの名無しさん
2007/03/31(土) 22:42:28必要とされるのは顧客が求める物を求める期間で作れる事だよ。
これまでもこれからも。
0307デフォルトの名無しさん
2007/03/31(土) 23:59:24仕様の理解力はものづくりには必要だな。
だけど、技術的な知識はコーディングする上で
最低限知っておいてもらわないと仕事にならないよ。
0308デフォルトの名無しさん
2007/04/01(日) 00:06:03友達でも作って、もっと見聞を広げなさい。
0309デフォルトの名無しさん
2007/04/01(日) 00:10:29Javaなら腐るほどいるけどな。
0310デフォルトの名無しさん
2007/04/01(日) 00:24:30そういう俺も仕事ではC++なんだけど。
0311デフォルトの名無しさん
2007/04/01(日) 00:26:09大抵は小規模の開発になるよな。
小規模になると担当者は限定的にならざるを得ない。
0312デフォルトの名無しさん
2007/04/01(日) 00:32:370313デフォルトの名無しさん
2007/04/01(日) 00:56:500314デフォルトの名無しさん
2007/04/01(日) 01:12:13ありだけど、とんでもないプロジェクトだったりするからな・・・
新規でC++は大抵、携帯機器かファームウェアだろうな。
速度重視の一部パッケージがC++で作成しようと思うだろうけど、
大抵は.NETで作成するだろう。
WebアプリはJavaか.NETになる。
0315デフォルトの名無しさん
2007/04/01(日) 01:16:38なんとなく日本語に違和感あり
0316デフォルトの名無しさん
2007/04/01(日) 01:24:08>>309
>Javaなら腐るほどいるけどな。
ほんとですか?、まともなJava経験者にあんまりあったことがない・・
(Javaに限定されない話かもしれませんが)
0317デフォルトの名無しさん
2007/04/01(日) 01:30:57Java言語習得者は現在で一番大量に湧いている。
0318デフォルトの名無しさん
2007/04/01(日) 09:47:01モードレスで開いたフォームが閉じられていることを確認するために Visible 値を
確認するなんてことをやっているのですが、よくよく考えたら閉じたインスタンスに
アクセスしてエラーとならないのが不思議です
もしかして閉じただけではインスタンス自体は破棄(Destroy)されないですか?
(Close したら Destroy されるという認識があるのですが・・・)
0319デフォルトの名無しさん
2007/04/01(日) 09:53:35Dispose()メソッドを呼ぶのとDispose()行ったオブジェクトは利用しない
これだけ覚えておけば良い。
詳細はMSDNライブラリを読めばわかるだろうけど。
0320デフォルトの名無しさん
2007/04/01(日) 10:07:11ありがとうです
なるほど C# では明示的に破棄していない場合は大丈夫なのですね?
あと Destroy ではなく Dispose なのですね
覚えておきます
0321デフォルトの名無しさん
2007/04/01(日) 10:57:41http://slashdot.jp/articles/06/10/16/0815224.shtml
世界の金持ち企業の55%はWindowsサバを使ってるみたいですが。
0322デフォルトの名無しさん
2007/04/01(日) 11:07:22モードレスで開いたFormはCloseすると自動的にDisposeされる。
しかしインスタンスは参照がなくなってGCで回収されるまで有効なので
Closeした後でも一部のプロパティやメソッド以外は使用できる。
Disposeで無効になるプロパティやメソッドを使用するとObjectDisposedExceptionが発生する。
0323デフォルトの名無しさん
2007/04/01(日) 13:54:120324デフォルトの名無しさん
2007/04/02(月) 07:25:07それ本当?
ShowDialog() が戻ってきた後、そのダイアログで操作された内容をオブジェクトからプロパティやメソッド経由で読み出すってことをよくやるんだが、それはいけないってこと?
その方法がダメだったら、そのダイアログの結果を受け取るためのクラスを作って、ダイアログ開く前にそのインスタンスを渡してやるとかしないといけないの?
てか、FileDialog とかどうなるんだべ?
いちいちイベントハンドラ設定して受け取る?
0325デフォルトの名無しさん
2007/04/02(月) 07:29:530326デフォルトの名無しさん
2007/04/02(月) 07:37:21「モードレス」で
0327デフォルトの名無しさん
2007/04/02(月) 07:41:33うわーマジだー!
ダイアログに置いた ListView とかの選択情報を後から読み出したりしてたんだが、これはアウトっぽいね・・・
自分で明示的に Close を呼ばなくても、×ボタンで閉じられたりとか、AcceptButton や CancelButton を押されたときもダメなんだよね?
うわー・・・ orz
0329デフォルトの名無しさん
2007/04/02(月) 11:03:010330デフォルトの名無しさん
2007/04/02(月) 11:38:020331デフォルトの名無しさん
2007/04/02(月) 11:44:190332デフォルトの名無しさん
2007/04/02(月) 11:44:35それともusingでそのつど作るのが普通?
0333デフォルトの名無しさん
2007/04/02(月) 11:47:060334デフォルトの名無しさん
2007/04/02(月) 15:36:23なんかドロップした場所とか記録してるやつ。
あれが嫌いなんであんまりデザイナで追加したくない。。
0335デフォルトの名無しさん
2007/04/02(月) 16:18:20WPFで今度はXAMLというXMLベースのファイルに変わるから安心しろ。
0336デフォルトの名無しさん
2007/04/03(火) 11:30:270337デフォルトの名無しさん
2007/04/03(火) 23:45:45IDEスレで愚痴った方がよくないか?もしかしたら解決策もっている人がいるかも
0338デフォルトの名無しさん
2007/04/04(水) 01:15:39ためしに、新規プロジェクトで最小限のコードで
同じ現象が再現するか試してみたら?
0339デフォルトの名無しさん
2007/04/04(水) 10:06:59解決策あったら報告するです。
0340デフォルトの名無しさん
2007/04/05(木) 12:53:05やってるよ。
// ここはメインスレッドで実行
yield return delegate()
{
// ここは別スレッドで実行
};
// 別スレッドの処理が終わったらメインスレッドで実行
みたいな感じでスレッドを切り替えられるようにして使ってる。
0341デフォルトの名無しさん
2007/04/05(木) 13:49:53試してないけどかなり軽くなるというのでいいかも。
独自のスレッド管理手法みたいなのも作れるし(゚д゚)ウ-(゚Д゚)マー(゚A゚)イ-…ヽ(゚∀゚)ノ…ゾォォォォォ!!!!
0342デフォルトの名無しさん
2007/04/05(木) 14:47:20全然分からないんだけど。
その別スレッドが動作中はメインスレッドはスリープ状態になるんだよね?
どういう使い方をするものなの?
0343デフォルトの名無しさん
2007/04/05(木) 17:03:17マイクロスレッド(コルーチン)のことを指してるのか?
0344340
2007/04/05(木) 17:37:54>>342
別スレッド実行中は、
別のマイクロスレッドもどきのメインスレッドで実行する部分を実行するか
メッセージループを回してる。
0345340
2007/04/05(木) 17:40:24IEnumerable<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
の順に実行される、といった感じ。
0346デフォルトの名無しさん
2007/04/05(木) 17:59:210347デフォルトの名無しさん
2007/04/05(木) 18:29:52class 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なら同期呼び出し)
こんな感じにした方が意味がはっきりすると思う
0348デフォルトの名無しさん
2007/04/05(木) 18:42:22ファイバーやスレッドプールに比べての利点は?
仕様から見て、yield構文はあくまで列挙子ジェネレータを手軽に書ける
ようにするため「だけ」のモンだと思ってたんだけど
0349デフォルトの名無しさん
2007/04/05(木) 19:41:27C#でファイバーって使えたっけ?
> スレッドプールに比べての利点は?
処理を実行するタイミングと、実行する内容を分離して記述できるのが利点かな。
例えば、
「キャンセルボタンを押したら途中で処理を中終了する」
「ボタンを押すと一時的に処理を中断し、もう一度押すと再開する」
など、スレッドの実行方法を実行内容と分離して再利用できる。
0350デフォルトの名無しさん
2007/04/05(木) 19:56:38本物のスレッドの事を言ってるんじゃないんでしょ。
0351デフォルトの名無しさん
2007/04/05(木) 20:12:29ttp://msdn.microsoft.com/msdnmag/issues/03/09/CoroutinesinNET/default.aspx
0352デフォルトの名無しさん
2007/04/06(金) 01:29:02と言いますのも、ウィンドウが表示される瞬間ラベルコントロールが真白になり、
ウィンドウを台無しにするという現象を未だに解決できずにいるからです。
スプラッシュウィンドウの構成はとてもシンプルです。
フォームの背景に黒系をメインとした画像を設定し、その上にタイトルと
著作権表示用のラベルコントロールを配置しているだけです。
ラベルコントロールの背景色は Transparent(透過)で文字色は White です。
ウィンドウが表示された一瞬ではありますが、色の関係でとても目立ちます。
個人趣味のプログラムなのですが、できるだけ良いものを作成したいという
気持があります。
何か解決策はないものでしょうか?
(画像を白系をメインとしたものに変更するのは不可です。)
0353デフォルトの名無しさん
2007/04/06(金) 02:01:58できるだけ良いソフトウェアを目指すなら、
スプラッシュ不要なものを設計してください。
0354デフォルトの名無しさん
2007/04/06(金) 02:07:22従って、2回目以降の起動時には完全に表示しないようにできます。
0355デフォルトの名無しさん
2007/04/06(金) 02:32:17・スプラッシュを表示してるあいだ重い起動処理をしない
・画面外に表示してスレッドタイマーで中央にもって来る
・アルファ0で描いて次第に不透明になるカッコイイ処理を加える
・文字も画像に書き込んでしまう
・スプラッシュウィンドウなんて止める
まあ最後のやつがマジお勧め
0356デフォルトの名無しさん
2007/04/06(金) 03:19:110357デフォルトの名無しさん
2007/04/06(金) 03:40:38再描画のイベントが発生してないということはない?
0358デフォルトの名無しさん
2007/04/06(金) 04:45:05スプラッシュを動画にするんだよ
可変部分は毎回エンコードすればいい
vfw使えば簡単
0359デフォルトの名無しさん
2007/04/06(金) 05:08:58java -splash:splash.jpeg hogehoge
0360デフォルトの名無しさん
2007/04/06(金) 07:14:00CreateProcessとWaitForInputIdleを組み合わせれば同じようなものを作れそう。
0361デフォルトの名無しさん
2007/04/06(金) 09:20:39Vista専用にすれば解決だよ。
0362デフォルトの名無しさん
2007/04/06(金) 09:22:180363デフォルトの名無しさん
2007/04/06(金) 09:29:09スプラッシュウィンドウだけ別アプリにしたことがある。
0364デフォルトの名無しさん
2007/04/06(金) 18:26:55更新確認−なし→通常起動
└あり→確認してアップデート→新しい方起動
とかやるのは今時普通じゃないんですか
0365デフォルトの名無しさん
2007/04/06(金) 18:29:390366デフォルトの名無しさん
2007/04/06(金) 23:03:56フォームのバックグラウンドが白になってるだけだろ?
投下職を勘違いしてるだけじゃないかな
テストフォームでも作って灯火の意味を調べてみ。
0367デフォルトの名無しさん
2007/04/06(金) 23:13:380368デフォルトの名無しさん
2007/04/06(金) 23:24:05必ずモーダルなスプラッシュを表示させる香具師が居るんだが・・・
どう思う?馬鹿じゃね?
看板とか言っていたけどさ
0369デフォルトの名無しさん
2007/04/06(金) 23:24:230370デフォルトの名無しさん
2007/04/06(金) 23:43:05ただのダイアログだ
0371デフォルトの名無しさん
2007/04/07(土) 00:00:08カッコイイと思ってやってるんだからそーっとしておいてやれ
0372デフォルトの名無しさん
2007/04/07(土) 00:03:43起動速度の高速化に注力してスプラッシュが不要なようにして欲しいと思う。
0373デフォルトの名無しさん
2007/04/07(土) 00:05:250374デフォルトの名無しさん
2007/04/07(土) 00:20:41モーダルなスプラッシュを1〜3秒くれーなら表示してもさ
アプリの名前や著作権情報を表示して主張するのもアリでしょ
テレビ番組とか映画とかでいうオープニングシーンみてーなもんだよ
ゲームで言うならタイトル画面かな
ゲームやっててコンティニュー選ぶのまんどくせーって奴はあんまりいねーじゃん
まあ、よく使うアプリで毎回起動時にモーダルで数秒取られるのはきついがな
その辺は上で誰か書いてたみてーに非表示設定できれば問題なしじゃね?
そんなもんだよ
0375デフォルトの名無しさん
2007/04/07(土) 01:07:220376デフォルトの名無しさん
2007/04/07(土) 01:08:42モーダルでビジーループで3秒表示してみました。
あほかといいたい。
0377デフォルトの名無しさん
2007/04/07(土) 01:11:450378デフォルトの名無しさん
2007/04/07(土) 01:36:43性能対策でプログレスバーつきのスプラッシュつけた。
が・・メンテナンス時に落とす以外は数ヶ月間立ち上げっぱなし、まぁどうでもよかった
0379デフォルトの名無しさん
2007/04/07(土) 02:35:08フォームがまだロード処理中なのかそれとも既に表示されているのかを知りたいです。
0380デフォルトの名無しさん
2007/04/07(土) 05:42:550381デフォルトの名無しさん
2007/04/07(土) 08:37:58表示されてアイドル状態になったかどうかなら Form.Shown イベントを使う。
1.x ならApplication.Idle イベントでがんばれ。
0382デフォルトの名無しさん
2007/04/07(土) 10:30:47このように書くとエラーになるんですが、どうすればいいですか?
0383デフォルトの名無しさん
2007/04/07(土) 10:34:270384デフォルトの名無しさん
2007/04/07(土) 10:38:45string s = "あたっ";
char[] ch = s.ToCharArray();
0385デフォルトの名無しさん
2007/04/07(土) 11:08:16Visibleプロパティを参照ではあかんの?
0386デフォルトの名無しさん
2007/04/07(土) 12:31:38string 叫び声 = "あたっ";
char 声 = 叫び声[0];
0387379
2007/04/07(土) 13:40:09ありがとうございます。
>>385
ありがとうございます。
FormのLoadイベント処理の中で結構時間が掛る処理をやっているのですが、
別スレッドからそのLoadの処理が終わった(処理が終わってFormが表示された)か否かを知りたいのです。
Formび途中の段階でVisible値がfalseになっていれくれれば良かったのですが、
確認してみたところ何故かtrueになっていました。(なので今回のケースでは使えないです。)
IsDisposed(破棄されているか否か)のようなプロパティがあれば一番楽なのですが・・・。
0388デフォルトの名無しさん
2007/04/07(土) 13:42:440389デフォルトの名無しさん
2007/04/07(土) 13:43:48OnLoadの終わりでvolatile boolなフラグでも立てとけよ。
0390デフォルトの名無しさん
2007/04/07(土) 13:44:32これを止めれば万事解決
つか Load イベントの最後でフラグ立てればいいだけの話じゃね?
そもそもワーカスレッドが Form の状態に依存すること自体微妙だが。
0391デフォルトの名無しさん
2007/04/07(土) 13:50:03ありがとうございます。
フィールドにBOOL型のフラグを持たせるようにしてForm::Loadの始めと終わりで変更するようにします。
処理自体を見直すのも検討してみます。
0392デフォルトの名無しさん
2007/04/07(土) 14:07:31・重い処理の最後でフラグセット
たったこれだけじゃねーか。
なんで「表示されたかどうか」って発想になるのか…
0393デフォルトの名無しさん
2007/04/07(土) 23:43:24どのようにすればよいでしょうか?(簡単にはできないということはやっちゃまずいんでしょうか・・)
プロジェクトをまたいで設定を共有したいのですがどのようにすればよいでしょうか?
0394デフォルトの名無しさん
2007/04/08(日) 04:14:48http://forums.microsoft.com/msdn/showpost.aspx?postid=117187&siteid=1
ここで同じようなこと聞いている人がいるけどうまくいってないみたい?
SettingsProviderの派生クラスを自作して、これを複数のアプリケーションで使うようにして、
同じファイルを見に行くようにすればいいのかな。
0395デフォルトの名無しさん
2007/04/08(日) 09:17:41アプリケーションを多重起動防止にして、かつ 2つ目以降が起動された時には、1つ目に SendMessage したいです。
なので 1つめのウィンドウハンドルを知る必要があるのですが、こういうことの実現方法を教えてください。
ヒントでも結構ですので、よろしくおねがいします。
0396デフォルトの名無しさん
2007/04/08(日) 11:27:47でぐぐれかす。
0397395
2007/04/08(日) 11:31:53質問するまえにぐぐって、多重起動防止の方法自体は見つけてあるのですが、
1つめのインスタンスのウィンドウハンドルを取得する方法は発見に至っていないのです。
0398デフォルトの名無しさん
2007/04/08(日) 12:10:02Process.GetProcessesByName()
Process.MainWindowHandle
.NETならSendMessageを使うよりリモーティングを使ったほうがいいと思うけどね。
0399デフォルトの名無しさん
2007/04/08(日) 13:24:34リモーティング便利だよね。
チャネルにTCPでよくつかうけど、
ローカルでのプロセス間通信としてしかつかったことないんだよね。
セキュリティとかかんがえると、TCPよりは、unixドメインみたいなので
実装あると便利なきがするんだけど
0400デフォルトの名無しさん
2007/04/08(日) 13:27:180401デフォルトの名無しさん
2007/04/08(日) 15:23:14気にする必要ないことではあるが。
0402デフォルトの名無しさん
2007/04/08(日) 16:54:030403399
2007/04/08(日) 17:09:14いつの間に・・・
きがつかなかった
0404デフォルトの名無しさん
2007/04/08(日) 20:03:07まだロードメソッドの途中なのにフォームが表示されるんですが、
何でですか?
Application.DoEvents()の直前でフォームのVisibleをfalseにしたら
一応防げたんですが・・・
フォームのロードメソッドの中でそのフォームのVisibleをfalseに
するのは処理的におかしいですか?
0405デフォルトの名無しさん
2007/04/08(日) 20:07:59一体何がしたいんだ
0406デフォルトの名無しさん
2007/04/08(日) 20:13:28方法が良く分らないです。
どなたかヒントを教えてもらえないでしょうか。
0407デフォルトの名無しさん
2007/04/08(日) 20:33:11COMじゃなくて?
0408デフォルトの名無しさん
2007/04/08(日) 20:34:24なんでそんなことするんだよ。
0409デフォルトの名無しさん
2007/04/08(日) 20:45:51オートメーションサーバは
0410デフォルトの名無しさん
2007/04/08(日) 20:50:49メインフォームをロードする中でプラグインの開始処理を呼んでいるんですが、
そのプラグインの中にメインフォームが表示されるまでNow Loading...とか表示する
小さなフォームを表示するやつがあるんですよ(一種のスプラッシュみてーなもん?)
で、そいつは小さいフォームのペイント処理の中でちょっとした描画をやってる関係で
ペイントメッセージ(WM_PAINT?)を処理させる必要があるんですね
で、その小さなフォームを呼んでいるとこ(プラグインの本体クラス)で、件の
Application.DoEventsをかましているってワケですよ
そしたらなぜか知らんのですがメインフォームの野郎が表示されやがるんですよ
(メインフォームの表示メッセージまで処理されてる?)
小さなフォームはメインフォーム表示を判断して消えることになってんで
仕方ねーなーってことでメインフォームをVisuble=falseしてるんですよ
でも表示処理の中でfalseすんのもどーかなーってことで相談した次第であります
で、どうなんですか?
やっぱfalseはまずいですかね?
実際の動きはまあまあ良いんですが、理論的にダメなら次バージョンでどーにか
別手段を考えようかなーって思ってるんですが・・・
0411デフォルトの名無しさん
2007/04/08(日) 20:54:48同じプラグインの本体クラスの中で親フォームいじくってやってます
(オブジェクト指向的にも問題あり?元々VC++ユーザなんで分らんです)
0412デフォルトの名無しさん
2007/04/08(日) 20:57:21冗長な割には結局何がしたいのか要領がつかめない文章だね。
最終的にどういう動作を「お望み」か、それを書こうよ。
誰もエスパーじゃないことが理解できるのなら。
0413デフォルトの名無しさん
2007/04/08(日) 20:59:45(業務中じゃC#なんて絶対使わねーし)
0414デフォルトの名無しさん
2007/04/08(日) 21:01:33メインフォーム表示前に小さななフォームがちゃんと描画された状態で
表示されれば問題なしです
あ、ちなみに、文字表示にラベルとか使うのはナシですよ
0415デフォルトの名無しさん
2007/04/08(日) 21:02:400416デフォルトの名無しさん
2007/04/08(日) 21:02:530417デフォルトの名無しさん
2007/04/08(日) 21:04:51IPCってぐらいだから、SystemV IPCのメッセージキューと共有メモリじゃないのか?
0418デフォルトの名無しさん
2007/04/08(日) 21:05:17プラグインを管理するクラスでやれよハゲ
0419デフォルトの名無しさん
2007/04/08(日) 21:09:26肝心なのは質問の部分ですよ
フォームの表示中(ロード処理)の中でそのフォームの
Visibleがfalseになるのはマズい?ってことなんですよ
Visibleをtrueに戻さなくても勝手に表示されるってのも気になりますがね
この辺の仕組みを知ってる人は教えて下さい
0420デフォルトの名無しさん
2007/04/08(日) 21:14:140421デフォルトの名無しさん
2007/04/08(日) 21:17:160422デフォルトの名無しさん
2007/04/08(日) 21:17:180423デフォルトの名無しさん
2007/04/08(日) 21:25:36えー、でもさ、そうしねーとペイントできないじゃん
他にペイントさせる手段があるなら教えて下さいよ
0424デフォルトの名無しさん
2007/04/08(日) 21:27:390425デフォルトの名無しさん
2007/04/08(日) 21:36:330426デフォルトの名無しさん
2007/04/08(日) 21:38:090427デフォルトの名無しさん
2007/04/08(日) 21:42:570428デフォルトの名無しさん
2007/04/08(日) 21:43:380429デフォルトの名無しさん
2007/04/08(日) 21:45:21C++で書いてろよw
0430デフォルトの名無しさん
2007/04/08(日) 21:47:17もういい、自分で考える
0431デフォルトの名無しさん
2007/04/08(日) 21:49:110432デフォルトの名無しさん
2007/04/08(日) 21:51:230433デフォルトの名無しさん
2007/04/08(日) 21:57:520434デフォルトの名無しさん
2007/04/08(日) 22:13:18まだそこらにいるってことか。
0435デフォルトの名無しさん
2007/04/08(日) 22:26:430436デフォルトの名無しさん
2007/04/08(日) 22:38:55GC.SuppressFinalize( <お宅> );
0437デフォルトの名無しさん
2007/04/08(日) 23:02:25描画したいだけなら Refresh() 呼ぶだけで良いんじゃね?
0438デフォルトの名無しさん
2007/04/08(日) 23:25:08RefreshはoverridableなのでInvalidate, Updateで
0439デフォルトの名無しさん
2007/04/09(月) 00:20:24overridable だと何か問題あったっけ?
0441デフォルトの名無しさん
2007/04/09(月) 01:21:00動作を変えられる。つまりRefreshは描画のみの意味ではなくて
もっと抽象度の高いメソッド。標準動作で描画なので勘違いしている
人が多いが。
例えばWebBrowserコントロールだと再読み込みとなる。
この場合、「画面を描画してくれ」の意味で呼ぶのだから(Invalidate),
Updateが正解。
0442デフォルトの名無しさん
2007/04/09(月) 03:59:33この型を元に、そのクラスの static なメソッドを実行したりすることはできるでしょうか?
こんなクラスと
class testclass
{
public static string method1() { return "test"; }
}
こんな関数を用意して、
string testfunc(System.Type t)
{
return t.method1(); // こんな風に、t のクラスの static メソッドを呼び出したい
}
呼び出しはこんな感じ
string result = func(typeof(testclass));
0443デフォルトの名無しさん
2007/04/09(月) 04:16:28public void test(Type t) {
MethodInfo method = t.GetMethod("test2");
if (method.IsStatic) {
method.Invoke(null, null);
}
}
public static void test2() {
Console.WriteLine("月曜日が襲ってきます");
}
0445デフォルトの名無しさん
2007/04/09(月) 04:41:080446デフォルトの名無しさん
2007/04/09(月) 10:04:46亀レスだけど、プラグインの開始処理は↓のようにメインフォーム作成前に
やるのじゃ駄目なの?
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// プラグインの開始処理
.......
Application.Run(new Form1());
}
0447デフォルトの名無しさん
2007/04/09(月) 16:44:190448デフォルトの名無しさん
2007/04/09(月) 16:48:290449デフォルトの名無しさん
2007/04/09(月) 17:44:03他の特定のアプリケーションのウインドウがアクティブ/非アクティブに
なったときにある処理を行いたいのですが、
他のアプリケーションの状態を取得したりイベントにすることはできるのでしょうか。
FW2.0 WinXPです。
0450デフォルトの名無しさん
2007/04/09(月) 19:09:16そんなときは readonly static。
0451デフォルトの名無しさん
2007/04/09(月) 20:36:22ぐぐれ: サブクラス化 NativeWindow
0452デフォルトの名無しさん
2007/04/09(月) 23:23:420453デフォルトの名無しさん
2007/04/10(火) 00:24:130454デフォルトの名無しさん
2007/04/10(火) 14:16:06File.Copy を実行中、thread.Abort(); してもCopyが完了
するまでthread.Join()から抜けてきません。
大きなサイズのファイルのとき終了までフォームが固まります。
File.Copyを途中でばっさり完了させることはできないでしょうか?
0455デフォルトの名無しさん
2007/04/10(火) 14:34:240456デフォルトの名無しさん
2007/04/10(火) 14:36:110457デフォルトの名無しさん
2007/04/10(火) 15:04:340458デフォルトの名無しさん
2007/04/10(火) 15:08:53PROGRESS_CANCEL を返すようにする、ではダメかな。
試しにコード書いてみっか。
0459デフォルトの名無しさん
2007/04/10(火) 15:13:25OSの待ち行列にプロセスが入るからだろ?
一時ファイル作成して最後にマージする処理に変えるとか
考えた方が良いんでないか?
0460デフォルトの名無しさん
2007/04/10(火) 15:19:05public 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を直接書き換えると駄目なのでしょうか?
0461デフォルトの名無しさん
2007/04/10(火) 15:38:46通例なようですがって、
classでそれやったらもとのインスタンスと別物になっちまうだろが。
structならそれでもいいが。
0462461
2007/04/10(火) 15:41:59「それやったら」って、newすることね。
0463デフォルトの名無しさん
2007/04/10(火) 16:16:07直接書き換えるとまずい例としては
hoge = counter++ が正しく処理されない。
0464460
2007/04/10(火) 16:55:52>>461-462
別物になってしまうから、なぜnewしなければならないのかわからないのです。
>>463
ホントだ。
やってみたら、できなかった。
なんで?
0465454
2007/04/10(火) 17:22:08とりあえず早急に対応したかったので
FileSteamで、ReadOpenとWriteCreateして256Kbyteバッファで
ちまちまコピーして、ThreadAbortExceptionでCopy中なら、
rw close,途中ファイルdeleteという実装で逃げました。
速度的にどうかという検証はあとでやることにして・・・
0466デフォルトの名無しさん
2007/04/10(火) 17:30:11まあそういう情報がどうでもいいファイルならいいけど。
0467454
2007/04/10(火) 18:04:12はい、それは必要だったので、コピー完了してclose後、
Creation,Access,WriteTimeをFile.Get... してFile.Set... という
段取りで対応しました。
0468デフォルトの名無しさん
2007/04/10(火) 18:06:08まあ、それでいいんならいいんだが。
0469454
2007/04/10(火) 18:13:02通常のファイルだけを扱うので大丈夫だと思います。
サブストリームの名前もしらなかったくらいなんで・・・
0470デフォルトの名無しさん
2007/04/10(火) 22:28:38Convert.ToInt32を使えばできるそうなのですが、いまいち使い方が
よく分かりません。どなたか教えて下さい。
0471デフォルトの名無しさん
2007/04/10(火) 22:30:230472デフォルトの名無しさん
2007/04/10(火) 22:46:24パラメータ
value:数値を含んでいる String。
fromBase:value 内の数値の基数。これは 2、8、10、または 16 である必要があります。
どこをどう読んだら分からんのか分からん・
0473デフォルトの名無しさん
2007/04/10(火) 22:48:470474デフォルトの名無しさん
2007/04/10(火) 22:50:59おまけに、確かこっちの方がパフォーマンス10倍ぐらい良かったはずだよ。
なんで同じことするのにこんなにパフォーマンス差があるのか不思議なんだけど。
0475デフォルトの名無しさん
2007/04/10(火) 22:58:09最近仕事でVBばっかりだもんで
0476デフォルトの名無しさん
2007/04/10(火) 23:17:0916進HEX文字、数値の相互変換、
プロファイラ使って性能対策したとき、
結局、statick readonlyの配列かHashで256ケース用意して昔ながらのindex変換したほうが速かったような
標準のParseメソッドは、
多言語対応とかでCharacterSetの変換とかでもやってるのかな?
0477デフォルトの名無しさん
2007/04/10(火) 23:20:580478デフォルトの名無しさん
2007/04/11(水) 00:03:38そりゃindexで変換するのが速いのは速いだろ。
そこまで求めることがあるかどうかってだけで。
0479デフォルトの名無しさん
2007/04/11(水) 00:07:32一台相手ならどうということはないが複数台になるとマズい処理だとCPU時間喰いまくって
よろしくないんだよ。
0480デフォルトの名無しさん
2007/04/11(水) 00:09:470481デフォルトの名無しさん
2007/04/11(水) 00:14:13それはないと思うけどね。
Hex => Binなんて普通にニブルごとに引き算して変換した方が絶対早いと思うよ。
0482476
2007/04/11(水) 00:27:17同業者?
シーケンサーとかメモリマップドIOな機器とやりとりするとなると、バイナリーデータの通信になるから、
ログ出力にHEXダンプとかよくやるよね。
うちの場合は、セッションとかコネクション管理はUNIX鯖いれるけど、
GUIとか紙媒体扱うとこはWindowsだね〜
0483デフォルトの名無しさん
2007/04/11(水) 02:10:48Visual Studio に標準で付いているアイコンとかあるじゃん
カット、コピー、削除とかいった標準のやつ
あとフォルダのアイコンとかもあるな
ああいったのってさ、無断で使っても良いのかな?
商用/非商用とかでも何かあるのかな?
0484デフォルトの名無しさん
2007/04/11(水) 06:12:020485デフォルトの名無しさん
2007/04/11(水) 08:19:38ドキュメントに書いてあるじゃん
0486デフォルトの名無しさん
2007/04/11(水) 17:06:36フォームのサイズを変更したときなどにコントロール内の文字がチラつくのですが
チラつきを防ぐにはどうすればよいのでしょうか?
0487デフォルトの名無しさん
2007/04/11(水) 19:35:520488デフォルトの名無しさん
2007/04/11(水) 19:42:460489デフォルトの名無しさん
2007/04/11(水) 20:01:32>>488
真面目に答えてやれよ!
さあどうぞ
↓↓↓↓↓
0490デフォルトの名無しさん
2007/04/11(水) 20:12:280491デフォルトの名無しさん
2007/04/11(水) 20:13:240492デフォルトの名無しさん
2007/04/11(水) 20:50:010493デフォルトの名無しさん
2007/04/11(水) 21:16:31同じことを文面変えていろんなところで聞いてないか?w
だからそんなくだらないことは気にしないのが一番だと思うが、
どうしてもと言うならSetStylesでダブルバッファリングを有効にした上で
全部自力で描画すればいいんじゃない?
っていうか、そんなにちらつきが気になるコントロールなんてあったかなあ。。。
0494デフォルトの名無しさん
2007/04/11(水) 21:29:340495デフォルトの名無しさん
2007/04/11(水) 21:42:37もしそうだったらAnchorをTop, Bottom, Left, Rightにしたら直るかも
0496デフォルトの名無しさん
2007/04/12(木) 11:02:300497デフォルトの名無しさん
2007/04/12(木) 23:31:15例えば「検索(&F)」ってメニューに Keys.Control | Keys.F を設定って感じで
0498デフォルトの名無しさん
2007/04/12(木) 23:52:030499デフォルトの名無しさん
2007/04/12(木) 23:54:52多分ラベルやボタンが100個ぐらいあるんだよ。
>>486
使ってる専ブラのサイズゆっくり変えてみな。
タブのあたりちらついてないか?
0500デフォルトの名無しさん
2007/04/13(金) 00:02:17じゃあさ、リッチテキストボックス上で Ctrl+F が押されたら、
コンテキストメニューにあるのと同じ検索画面を開きたい場合はどうすれば良いの?
いちいちキーイベントを拾って自分で判断するの?
0501デフォルトの名無しさん
2007/04/13(金) 00:06:190502デフォルトの名無しさん
2007/04/13(金) 00:54:44いや、教えてください先生
0503デフォルトの名無しさん
2007/04/13(金) 01:07:530504デフォルトの名無しさん
2007/04/13(金) 01:10:240505デフォルトの名無しさん
2007/04/13(金) 01:11:33俺が質問しても遠回しにしか回答してくれません
しかも回答が間違っている場合が多いです
やっぱり人間の先生が一番です
0506デフォルトの名無しさん
2007/04/13(金) 01:13:22グローバルで効かしたいときはFormのProcessうんちゃらKeyメソッドを
オーバーライドしたような
0507デフォルトの名無しさん
2007/04/13(金) 01:13:36お前以外スクリプトだよ
0508デフォルトの名無しさん
2007/04/13(金) 01:49:58タスクバーが表示されなくなるのですが、これは.netのバグですか?
別のウィンドウを選択するなどして一度Formをアクティブではなくして
それからFormを選択してアクティブにすると表示されます
ShowInTaskbarはtrueになっていることは確認したのですが
なぜそうなるのかは分かっていません
0509デフォルトの名無しさん
2007/04/13(金) 02:21:50再現しませんでした。
0510デフォルトの名無しさん
2007/04/13(金) 04:38:310511デフォルトの名無しさん
2007/04/13(金) 09:22:17初心者用のC#のお勧め本ありますか?
0512デフォルトの名無しさん
2007/04/13(金) 09:29:020513デフォルトの名無しさん
2007/04/13(金) 15:47:20Windows95のガイドラインだと、インターフェイスを簡潔にする目的で
ショートカットキー(Ctrl+Fとか)はコンテキストメニューには表示しない
ことを推奨してます。たぶん。XPやVistaでも変わってないかどうかは謎。
Ctrl+Fはあくまでメインメニューの[編集(E)]-[検索(F) Ctrl+F]が拾って
処理します。そこでActiveControlとかから動作を判断すればよい。
え?メインメニューがない?それは困った。
0514500
2007/04/14(土) 01:58:40private 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 イベントで対応するしかない?
0515514
2007/04/14(土) 02:07:45hoge..Shown += new EventHandler(this.Hoge_Shown);
hoge..Shown += new EventHandler(this.Hoge_Shown2);
ってやってみたら2つの関数が共にキックされたんだよね
驚きももの木ってやつで興味津津
でね、疑問に思ったんだけどさ、コレっていくつまで追加できるの?
通常は1つか2つだろうけどさ、インプリの仕方によっては10とか
20とか50とか追加したい場合あるよね
(プラグインとか使う場合かな?)
100以上でもできますかね?
0516デフォルトの名無しさん
2007/04/14(土) 02:10:110517デフォルトの名無しさん
2007/04/14(土) 02:30:09ま、動かなくなったら考えるってことでいいや
ってか KeyDown の方の質問に回答プリーズ
おながいします
0518デフォルトの名無しさん
2007/04/14(土) 03:09:50今時の子は「携帯電話っていうの使ったら、離れた人とお話できたよ!」
とかいってびっくりしちゃうんだ。
0519デフォルトの名無しさん
2007/04/14(土) 03:32:000520デフォルトの名無しさん
2007/04/14(土) 03:35:55今時の子て・・・おま、俺は30超えてるって
0521デフォルトの名無しさん
2007/04/14(土) 07:28:190522デフォルトの名無しさん
2007/04/14(土) 09:23:400523デフォルトの名無しさん
2007/04/14(土) 19:21:14例えば、ボタンのClickイベントやテキストボックスのKeyDownイベントなどです
(もちろんgoogleで検索してみましたが、良い情報が見つかりませんでした)
0524デフォルトの名無しさん
2007/04/14(土) 19:46:08つデリゲート
0525デフォルトの名無しさん
2007/04/14(土) 19:50:46継承してOnXxxを呼ぶか、GUI関連のイベントなら対応するようなメッセージを投げるか。
0526デフォルトの名無しさん
2007/04/14(土) 20:18:57ありがとうございmす
0527デフォルトの名無しさん
2007/04/14(土) 20:25:19そもそも勘違いの産物だと思う。8割方。
筋の悪い初心者にありがちな勘違いなんだよねこれ。
0528デフォルトの名無しさん
2007/04/14(土) 20:39:53PerformClick()とかあるし、やっちゃうけど。
テキストボックスのKeyDownってのは頂けないような。
必要な状況が想像できない。
FocusしてTextプロパティを設定すれば済むんじゃ?
0529デフォルトの名無しさん
2007/04/14(土) 20:45:43コピーとか元に戻すとかの機能を実装したポップアップメニューを作りたかったのです
テキストボックスにCtrl+CやCtrl+Zを投げることができれば、Windows標準機能を利用してできるかなと考えたのですが間違いでしたか
Copy()とかUndo()とかを使う手も考えたのですが、それだとWindows標準のと本当に同じなのか不安でしたので・・・
0530520
2007/04/14(土) 20:49:31そこまでしなくちゃできんもんなんだな・・・
じゃあなんかすっきりしないけど KeyDown でやっとくよ
トンクス
0531デフォルトの名無しさん
2007/04/14(土) 20:50:42イベントなんて何の関係もない話じゃないか。
0532デフォルトの名無しさん
2007/04/14(土) 20:52:30KeyDownイベントに乗せてキーを送ろうと考えたんですよ
それ以外にキーを送る手段があるのですか?
0533デフォルトの名無しさん
2007/04/14(土) 20:56:21コントロール「に」他のオブジェクト「が」何かを命令するためのものじゃないでしょ。
0534デフォルトの名無しさん
2007/04/14(土) 20:57:38届くのはあなたが設定したKeyDownイベントのハンドラだけ。
TextBox自体には届かない。
そこんとこよろしく
0535デフォルトの名無しさん
2007/04/14(土) 20:58:510536デフォルトの名無しさん
2007/04/14(土) 21:01:16Copy()とかUndo()はWM_COPYとかEM_UNDOとかを投げてるだけだよ
0537デフォルトの名無しさん
2007/04/14(土) 21:55:03マジっすか?
もしかしてVistaでやってるのが・・・いや、初心者が処理系のせいにしてはいかんのでしたね
どうにも解決方法が見つからないので悩んでおります
0538デフォルトの名無しさん
2007/04/14(土) 21:55:550539デフォルトの名無しさん
2007/04/14(土) 23:03:28それはちと厳しいですね。
FormのLoadの中で設定ファイルを読み込む処理をしてまして、
それをもとにFormのTopMostや位置、サイズをセットしてるだけなんですよ。
ブレーク張ったりコメントアウトしたりしてやってみた結果、
TopMostをセットしているところが原因だったという次第です。
はぁ、何がいけないのかさっぱりさっぱり。
0540デフォルトの名無しさん
2007/04/14(土) 23:06:120541デフォルトの名無しさん
2007/04/14(土) 23:22:31JavaだとBufferStrategyで一発なんだけど
0542デフォルトの名無しさん
2007/04/14(土) 23:24:51スケルトンから、
> FormのLoad処理中にそのFormのTopMostをtrueにする
だけのコードを書いてみたら?
0543デフォルトの名無しさん
2007/04/14(土) 23:28:46http://www.google.co.jp/search?num=20&hl=ja&ie=UTF-8&oe=UTF-8&q=C%23%E3%81%A7%E3%83%80%E3%83%96%E3%83%AB%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%83%AA%E3%83%B3%E3%82%B0
0544デフォルトの名無しさん
2007/04/14(土) 23:47:06おう、そうだよね
自分で調べるのは常識だよね
スマンかったYO
0545デフォルトの名無しさん
2007/04/14(土) 23:52:23やってみました。
そしたら特に問題はなかったです。
益々今の現象が不思議で仕方がなくなりました。
明日情報処理試験だというのにこれが気になって気になって・・・
諦めます(両方とも)。
0546デフォルトの名無しさん
2007/04/15(日) 00:16:020547デフォルトの名無しさん
2007/04/15(日) 02:25:48これらには標準的なアイコンが存在すると思いますが、
どこで手に入れることができますか?
またそのアイコンを使ったプログラムを無断でフリーソフトとして
公開してしまっても著作権違反にはならないでしょうか?
0548デフォルトの名無しさん
2007/04/15(日) 02:30:41著作権違反云々の前に、とりあえず、マルチはマナー違反になるってことを覚えておこうな。
0549デフォルトの名無しさん
2007/04/15(日) 04:17:55上手くいきません。ご教授お願いします。
====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);
0550デフォルトの名無しさん
2007/04/15(日) 04:18:58private 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
0551デフォルトの名無しさん
2007/04/15(日) 05:02:330552デフォルトの名無しさん
2007/04/15(日) 05:15:00にしても上手くいきません><
何がおかしいんでしょうか・・・
0553デフォルトの名無しさん
2007/04/15(日) 09:53:07いやな予感がするんだが別プロセスだったりする?
だったらポインタはプロセス固有なので渡すの(原則)無理だし
VistaだとWM使った通信はややこしい面があるので別の方法を
推奨。
…まぁこんなこと基本中の基本なんで違ったらごめんね。
0554553
2007/04/15(日) 10:02:40するなよなぁと言う気もする…
0555デフォルトの名無しさん
2007/04/15(日) 13:02:10デフォルトではC++は4byteごとでC#は8byteごとに配置されるからずれる。
0556デフォルトの名無しさん
2007/04/15(日) 13:09:43実際はデフォで4byteだったような
0557デフォルトの名無しさん
2007/04/15(日) 13:28:52↓こんなん関係ある?
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
*/
0558デフォルトの名無しさん
2007/04/15(日) 13:31:250559デフォルトの名無しさん
2007/04/15(日) 13:33:25できればスタック上のものを取得したいです。
0560デフォルトの名無しさん
2007/04/15(日) 13:43:150561デフォルトの名無しさん
2007/04/15(日) 13:48:19・・・
0562デフォルトの名無しさん
2007/04/15(日) 14:25:00俺もアライメントかなーと思ったんだけど、
全て16進にしてみても何も共通点がないんだな。
前の人が言ってるように、別プロセスとか、
あるいはアパートメントスレッド同士のように、
全く別のアドレスを指してることはあるかも。
ストリームで解決したらあかんか?
0563デフォルトの名無しさん
2007/04/15(日) 14:35:08別プロセスが濃厚(FindWindowとかやってるし)かと思うが、
ローカルにとってPostMessageしているのを見るとこれが
原因の可能性も。
>>549 == >>559 だとしたらもう絶望的に駄目駄目なので
お前じゃ無理を結論とするのがよかろうかと。
0564デフォルトの名無しさん
2007/04/15(日) 15:10:040565デフォルトの名無しさん
2007/04/15(日) 15:12:050566549-550
2007/04/15(日) 15:39:10SendMessageに変え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));
0567デフォルトの名無しさん
2007/04/15(日) 17:46:38あるサイトでXNAという開発環境があることを知りました。
そこで質問なのですがこの二つにそれぞれメリットがあるとすればどういった所なのでしょうか。
ご教授お願いします。
0568デフォルトの名無しさん
2007/04/15(日) 20:02:260569デフォルトの名無しさん
2007/04/15(日) 20:02:51いるもののMDX3.0 = XNA Frameworkみたいなもの。
0570デフォルトの名無しさん
2007/04/15(日) 20:04:330571デフォルトの名無しさん
2007/04/15(日) 20:13:48今日が試験だって事を忘れてたうっかりさんがココに
毎日スレ覗いてたのに、たまたま昨日だけ見ずに寝たら・・。
ソフ開受けれなかったよ。・゚・(ノД')・゚・。
0572デフォルトの名無しさん
2007/04/15(日) 20:14:270573デフォルトの名無しさん
2007/04/15(日) 20:17:56受験票、PC横に置いてたのに!
0574デフォルトの名無しさん
2007/04/15(日) 20:32:10なるほど…MDXがコケたので後継を作った、という事なんですね。
では、XNAの入門書や解説サイトでお勧めのものはありますでしょうか?
重ね重ね申し訳ないですがお願いします。
0575今日のソフ開
2007/04/15(日) 20:58:29___ ┗┃ ヽヾ\
|←SW| ヽ\\
 ̄ || ̄ 三二=
|| 三二=
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄
∧∧∧∧∧∧∧∧∧∧∧ 午前
午後1
___
|←SW| ミエタ!
 ̄ || ̄ ┗(^o^ )┓三 彡
|| ┏┗ 三 ∠
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄
∧∧∧∧∧∧∧∧∧∧∧
午後1
§ ティウンティウンティウン
§
| | .§ | |
___ | | |. §◎| | 午後2
|←SW| __◎§__◎
 ̄ || ̄ |____ ◎_ _|
|| ▼◎▼ ▼◎ ▼◎
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄ ̄
∧∧∧∧∧∧∧∧∧∧∧
0576デフォルトの名無しさん
2007/04/15(日) 21:04:26入門書はない。日本語の解説は徐々に増えてきたけど、まだまだ足りない。
誰かに聞いても教えてもらえない事を覚悟する必要がある。
それと、英語アレルギーがあるなら諦めた方がいいと思う。
>>575
今回も午後2が鬼門だったのか。
0577デフォルトの名無しさん
2007/04/15(日) 21:07:170578デフォルトの名無しさん
2007/04/15(日) 21:10:320579デフォルトの名無しさん
2007/04/15(日) 22:13:56VS05EEベースって事はかなり最近ですから、当たり前といえば当たり前ですよね…
英語は余り得意でないので暫く様子見としてMDXを使ってみることにします、ありがとうございました。
>>577,>>578
箱コントローラー以外使えないとはDirectInput(相当)で箱コントローラーしか認識しないということですか?
0580デフォルトの名無しさん
2007/04/15(日) 22:23:27この連載を参考にしてみるとか
0581デフォルトの名無しさん
2007/04/15(日) 22:55:59というかコントローラとかは本家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氏とかを適当に。
0582デフォルトの名無しさん
2007/04/16(月) 02:02:08ありがとうございます。
XNAについて殆どわかっていなかったので大変参考になりました。
これからの技術ということなので定期的に調べていきたいと思います。
>>581
あ、確かにそうでした。
Vista導入でDX関連はかなり変更されていたんでしたね…
尚更、MDXでやろうかなって思います…w
NyaRuRu氏は時々拝見させて頂いてます。
他の方のブログも定期的に見るようにしますね
それにしても「出来る」シリーズでプログラミング言語とは凄いですね。
本のレベルがそういった域に来てるのかそれだけ言語が簡単なのか…
ともかく、遅くまでお答え頂きありがとうございました。
0583デフォルトの名無しさん
2007/04/16(月) 10:49:18人生までオワルナ
0584デフォルトの名無しさん
2007/04/17(火) 14:42:43ゲームする奴だったら大体大丈夫だろうけど
0585デフォルトの名無しさん
2007/04/17(火) 16:30:19動作をカスタマイズできるようになってるIDictionary<T>はないの?
0586デフォルトの名無しさん
2007/04/17(火) 16:35:580587デフォルトの名無しさん
2007/04/17(火) 19:17:120588デフォルトの名無しさん
2007/04/17(火) 20:29:13教えてください。
TabControlにRichTextBoxを描画していまして
新たにTabPageをAddしてRichTextBoxをそのTabPageにAdd
したとき、focusをそのRichTextBoxに設定してるんですが
2つ目以降のTab生成時そのTabを前面に出るようにするには
どうしたら良いんでしょうか。
分かりづらい質問だと思いますが、どなたか教えてください。
0589デフォルトの名無しさん
2007/04/17(火) 20:40:140590デフォルトの名無しさん
2007/04/17(火) 23:08:36ありがとうです
0591デフォルトの名無しさん
2007/04/18(水) 01:16:04ただのフォームアプリなのでできればDirectXを呼びたくないのですが
DirectInputを用いずにゲームパッドのキーコードを取得する方法はないでしょうか。
0592デフォルトの名無しさん
2007/04/18(水) 01:31:56RichTextBoxで一般的なWindowsアプリにあるようなダブルクリックによる
単語選択ができません。
トリプルクリックによる行選択は出来るのですが、ダブルクリックでは1文字だけが
選択されてしまいます。
また、ドラッグによるテキスト選択を行おうとすると、カーソルの彼方の方まで選択
してしまったりと、謎の挙動で困っております。
このような場合は、どのようにしたらいいのでしょうか?
0593デフォルトの名無しさん
2007/04/18(水) 02:10:52.NETにそのものの機能はない。
joyGetPosとかRawInputとかでぐぐる。
0594デフォルトの名無しさん
2007/04/18(水) 12:47:42その仮想メソッドをオーバーライドして動作をカスタマイズしたいんですが
そのメソッドから派生クラスのコンストラクタ引数に間接的にでもアクセスすることって可能でしょうか?
0595デフォルトの名無しさん
2007/04/18(水) 13:44:460596デフォルトの名無しさん
2007/04/18(水) 13:59:03> 基底クラスのコンストラクタから呼び出されている仮想メソッドがあって、
> その仮想メソッドをオーバーライドして動作をカスタマイズしたいんですが
> そのメソッドから派生クラスのコンストラクタ引数に間接的にでもアクセスすることって可能でしょうか?
質問の意味を勘違いしてるかもしれないが…
派生クラスのコンストラクタで、引数をインスタンス変数に記憶しておけばいいのでは?
↓こんな感じで。
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; // この辺は適当な処理にあてはめて。
}
}
0597デフォルトの名無しさん
2007/04/18(水) 14:01:34お返事ありがとうございます!
ただ、キーの割り当てが一つとは限らない上
キーボードとパッドを同時に設定する場合もあるので
キーボードはKeyDownハンドラ内でフォーカスもってるコントロールを調べて
そこに対して処理、という風にしていたのですが
joyGetPosはイベント化できないので少し悩んでいます…。
0598デフォルトの名無しさん
2007/04/18(水) 14:08:320599デフォルトの名無しさん
2007/04/18(水) 14:10:14RawInputでぐぐったらWM_INPUTっての出てこなかった?
0601デフォルトの名無しさん
2007/04/18(水) 15:14:49ふと思ったんだけど、オーバーライドしたメソッドでやりたい処理を
派生クラスのコンストラクタのなかでやったら駄目なの?
0602デフォルトの名無しさん
2007/04/18(水) 15:19:45わ、ごめんなさい、joyGetPosでの認識が簡単だったのでそっちでばかり考えていました…。
RawInputでWM_INPUT取得するサンプルソース、すぐに見つかりました。
なんとかなりそうです、ありがとうございました。
0603デフォルトの名無しさん
2007/04/18(水) 17:53:16ボタンのハンドラを一つにしてsenderの情報にTEXTが入ってるのを利用しようと思ったんですけど
欲しいのはコントロールのTEXTプロパティだけなんで他の情報が邪魔です。
そこで、stringに代入してSubstringを使おうと思ったのですがうまくいきません。
こういうときはどうしたらいいでしょうか、お知恵をお貸しください。
0604デフォルトの名無しさん
2007/04/18(水) 18:04:240605デフォルトの名無しさん
2007/04/18(水) 18:12:16これを行うとこのコードが実行される所でそのまま落ちてしまい、デバッカが
型 'System.Windows.Forms.Button' のオブジェクトを型 'System.String' にキャストできません。
とエラーを出してしまいます。。
0606デフォルトの名無しさん
2007/04/18(水) 18:41:220607デフォルトの名無しさん
2007/04/18(水) 19:03:48クライアントプログラムでライブラリをロードし,
以下のコードを実行しました
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)
のエラーらしいのですが,それ以上がわかりません
何をしたら解決できるでしょうか?
0608デフォルトの名無しさん
2007/04/18(水) 19:44:59なるほど!自分の欲しいものが貰えるようにキャストすればいいんですね。
ありがとうございました
0609デフォルトの名無しさん
2007/04/18(水) 20:07:11少し教えて貰いたいんですがパッドの情報を取得するUsagePageとUsage値は何にしました?
1と2でマウスデバイスを指すのはわかるんですがパッドを取得するときはどうするんですか?
0610607
2007/04/18(水) 20:22:05System.MarshalByRefObjectを継承していませんでした・・・
0612デフォルトの名無しさん
2007/04/19(木) 00:11:37その理解はおかしいぞ
ここではsenderにはButton型のオブジェクトが入ってるはずだから
それに合わせてキャストしてるんだよ
0613デフォルトの名無しさん
2007/04/19(木) 02:23:18>欲しいのはコントロールのTEXTプロパティだけなんで他の情報が邪魔です。
ここで言っていることが怪しい
0614デフォルトの名無しさん
2007/04/20(金) 00:38:490615デフォルトの名無しさん
2007/04/20(金) 01:02:49KeyCodeの数値をキーの文字名(ESCやF1、Enter)などに変換するにはどうすればいいでしょうか?
アプリケーション内部ではKeyEventArgsのままやりくりしてたのですが、
設定を保存したときに数値にKeyCodeで保存し、復元ができなくて困っています・・
ご教授ください。
0616デフォルトの名無しさん
2007/04/20(金) 01:07:15保存する時に int にキャストして数字で保存してやりゃ良いんじゃね
ロードする時は数値にしてから Keys にキャスト
0617デフォルトの名無しさん
2007/04/20(金) 12:27:05あるメソッドにパラメータを与えて呼んでいるだけ。
メニュー項目一つ一つごとにイベントメソッドを定義するのは、無駄に感じます。
イベントメソッド自体にパラメータを与えることってできませんかね?
0618デフォルトの名無しさん
2007/04/20(金) 12:33:500619デフォルトの名無しさん
2007/04/20(金) 12:35:19その同じメソッドにたいして別々のパラメータを与えたいんです。
0620デフォルトの名無しさん
2007/04/20(金) 12:39:480621デフォルトの名無しさん
2007/04/20(金) 12:44:45なるほど。どっから呼ばれたのはどうやって判定するのでしょうか?
EventArgs?
0622デフォルトの名無しさん
2007/04/20(金) 12:50:16つうか、無駄に感じる程度ならたぶん無駄じゃないよ。
0623デフォルトの名無しさん
2007/04/20(金) 19:45:52結局メソッド分けるのと同じ。
だいたい同じ処理するメニューなんて存在するわけないんだから
メニュー項目ひとつひとつにメソッド定義するのが普通に決まってるだろ。
「無駄」って何が無駄なのか徹底的に考えてみろよ >>617
0624デフォルトの名無しさん
2007/04/20(金) 19:49:540625デフォルトの名無しさん
2007/04/20(金) 20:34:59いやコンパイラの立場にたてばどっちでも一緒だけど、
イベントハンドラを一つにまとめちゃった方が意味的にわかりやすい場合も
ないことはないと思うよ。
まあ、あんまりないのは確かだけど。
いま例を挙げようと思ってもぱっと思い浮かばないし。
0626デフォルトの名無しさん
2007/04/20(金) 20:38:08後から選択肢が増えたり減ったりしたとき変更が1ヶ所にまとまりそうじゃん。
0627デフォルトの名無しさん
2007/04/20(金) 20:38:47まあTagじゃなくて拡張プロバイダとか使うと思うけどね。
0628623
2007/04/20(金) 23:45:15メニュー項目自体が既に別オブジェクトになっちゃってるんだから。
たとえばフォントサイズにしたって、senderからフォントサイズをどうやって決めるんだ?
普通なら各イベントから SetFontSize(n) ってメソッド呼ぶ方法を薦めるだろうが。
結局 switch するならイベント纏める意味ないと思うのは俺だけ?
Tagでいいってやつは好きにすればいいけど。
0629デフォルトの名無しさん
2007/04/20(金) 23:46:270630623
2007/04/20(金) 23:53:04>>618 が言ってるのは各イベントから同じメソッドを呼べといってるんじゃないのか?
>>620 でなんで呼び出し元の話になるのかよくわからんが。
>>621 もなんで呼び出し元を気にする必要があるのかわからん。
もうオレ逝ってきます
0631デフォルトの名無しさん
2007/04/21(土) 00:01:04「お気に入り」を実装するとしたら。
DropDownごとにItemClickでまとめるか
各アイテム作るときに同じハンドラくっつけるっしょ
0632デフォルトの名無しさん
2007/04/21(土) 00:16:05Tagとか拡張プロバイダっていってんのに
完全無視ワロタ
0633デフォルトの名無しさん
2007/04/21(土) 00:30:50俺は拡張プロバイダよりこっちの方がすっきりしてて好み。
0634デフォルトの名無しさん
2007/04/21(土) 00:40:26チミは自分がコンパイラ(あるいはCPU)の目線で問題を語ってる自覚がないんじゃないの?
自分も人間の癖にw
0635デフォルトの名無しさん
2007/04/21(土) 00:49:34おいらも、カスタムコントロール作る派に1票
コントロールを生でつかうよりは、
仕様に応じたプロパティを追加したりして、属性もきちんと付与したりしたほうが
いろいろ、便利じゃない?
0636デフォルトの名無しさん
2007/04/21(土) 03:06:46public 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ですか?
0637デフォルトの名無しさん
2007/04/21(土) 03:12:370638デフォルトの名無しさん
2007/04/21(土) 03:26:38どもです.
再利用可能なイベントハンドラを用意したいんですけど,
イベントハンドラ中で使う値を変更可能にしたい場合,
上のBarみたいなクラスを用意するしかないんですかね・・.
(_attr1はコンストラクタで変更可能にする)
0639デフォルトの名無しさん
2007/04/21(土) 07:26:170640デフォルトの名無しさん
2007/04/21(土) 12:36:240641デフォルトの名無しさん
2007/04/21(土) 18:29:24具体処理は別オブジェクトにやらせたりすれば抽象化もできるし。
0642デフォルトの名無しさん
2007/04/21(土) 22:05:230643デフォルトの名無しさん
2007/04/21(土) 22:42:400644デフォルトの名無しさん
2007/04/21(土) 23:10:42同コントロールのメソッドに Delete() が無いのでどうやって実現しようか悩んでいます
現在は this.richTextBox1.SelectedText = ""; でやってますが、
一般的?なやり方はどうなのか教えてください
0645644
2007/04/21(土) 23:11:180646デフォルトの名無しさん
2007/04/21(土) 23:16:480647デフォルトの名無しさん
2007/04/21(土) 23:17:30ありがとうございました
0648デフォルトの名無しさん
2007/04/21(土) 23:33:22偽名やペンネームを使うだけでなく名前を秘匿することも匿名と呼ぶよ〜。
でもこういう匿名デリゲートはいやだ
delaget void <丶`∀´>(´・ω・`)(`ハ´ )さん()
0649デフォルトの名無しさん
2007/04/21(土) 23:40:47言語によってAnonymousを匿名〜と訳すものと無名〜と訳すものがある。それだけ。
0650デフォルトの名無しさん
2007/04/21(土) 23:48:47訳さなければAnonymousだし無名と匿名は日本人は区別してない。
あんまり。
0651デフォルトの名無しさん
2007/04/21(土) 23:51:18ちゃんと名前のついたメソッドがどこかに自動的に作られ、それがプログラマからは見えなくなっているだけ、
なのだから、「匿名」でもいいのでは?
というか、単なる anonymous の訳語ですがな。
0652デフォルトの名無しさん
2007/04/21(土) 23:54:500653デフォルトの名無しさん
2007/04/22(日) 01:37:510654デフォルトの名無しさん
2007/04/22(日) 02:13:300655638
2007/04/22(日) 08:37:43プロパティ名とそこでnew()するクラス以外同じだから
そこだけ穴あけたいと思っただけです.
「new()するクラス」のほうはGenericsで穴空けられるけど
「プロパティ名(string)」の方はハンドラとしてdelegateの
シグネチャが決められていると穴をあけられない状況.
JavaScriptみたいにdelegateにプロパティを付加したいイメージですかね.
とりあえずこんな感じに書けるような実装でおちつきますた.
foo.PropChanged = new ListPropChangedHandler<FooView>("propname").Handle;
0656デフォルトの名無しさん
2007/04/22(日) 15:29:36いきなりCから行っちゃったやつばっかだろ?
0657デフォルトの名無しさん
2007/04/22(日) 15:30:450658デフォルトの名無しさん
2007/04/22(日) 17:27:33俺には何を言ってるのかさっぱりわからんのだけど。。
0659デフォルトの名無しさん
2007/04/22(日) 17:31:080660デフォルトの名無しさん
2007/04/22(日) 21:18:520661638
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");
0662638
2007/04/23(月) 07:36:42661のだとpropNameがおかしくなりそうだ・・・.だめぽ.
0663デフォルトの名無しさん
2007/04/23(月) 07:37:430664638
2007/04/23(月) 07:39:39propNameとして渡された値と同じかどうかで処理が変わるような
イベントハンドラなんです.
0665638
2007/04/23(月) 07:42:10無名delegateで呼んでもらえばいいやな気分・・・
利用者の記述量と覚えないといけない文法とか注意点が増えていやだな・・・
0666デフォルトの名無しさん
2007/04/23(月) 07:49:31でよくないか?型推論が利くから<>の記述もいらなくなるし。
(C#3.0だったら、そのまま拡張メソッドにも出来るな)
0667638
2007/04/23(月) 07:55:54INotifyPropertyChangedをimplementsしてる型とPropViewType(TView)型は別物です.
INotifyPropertyChangedをimplementsしてるオブジェクトの
PropertyChangedイベントを受けて,ハンドラでPropViewType(TView)を生成したいです.
0668638
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はちゃんとしらないんだけど違ったかな?
「思います」ばっかりで申し訳ない・・)
0669デフォルトの名無しさん
2007/04/23(月) 08:19:41処理が定型ならイベントにする必要がそもそも無いはずと思うんだけど。。
0670638
2007/04/23(月) 08:22:12> 大量なわりにほとんど同じなので,最小限のパラメタ化だけしたものを
> みんなに再利用してほしいなぁ,という話です.
イベントはすでに私以外の人が用意してますです.
0671638
2007/04/23(月) 08:23:220672638
2007/04/23(月) 08:53:04662や668のコードは期待通りに動くっぽいです.
ちゃんとdelegate理解してなかったぽ・・・.
0673デフォルトの名無しさん
2007/04/23(月) 08:55:470674638
2007/04/23(月) 09:21:56Stringクラスのint IndexOf()メソッドを組み合わせたらとりあえずできそうです.
0675638
2007/04/23(月) 09:27:20delegate内でforのインデックス変数とかを参照したり,
foreachで要素値を参照するようなときだけかな.調べるのチカレタ
0676デフォルトの名無しさん
2007/04/23(月) 10:05:050677デフォルトの名無しさん
2007/04/23(月) 11:28:560678デフォルトの名無しさん
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);
0679デフォルトの名無しさん
2007/04/23(月) 16:17:44かなじゃなくて試してから言えよ。鬱陶しいな
0680デフォルトの名無しさん
2007/04/23(月) 20:20:04君も鬱陶しいよ
0681デフォルトの名無しさん
2007/04/23(月) 20:58:010682デフォルトの名無しさん
2007/04/23(月) 21:25:510683デフォルトの名無しさん
2007/04/23(月) 21:35:13どうぞどうぞ
0684デフォルトの名無しさん
2007/04/23(月) 22:41:27そのエラーの通りなんだけど。
0685デフォルトの名無しさん
2007/04/23(月) 22:57:57いちいちネットで調べるのイヤで。個人的に本で読むほうが好きなので。
0686デフォルトの名無しさん
2007/04/23(月) 23:07:43その前に
>table2.Columns.Add(col);
で止まると思うが?
0687デフォルトの名無しさん
2007/04/23(月) 23:07:440688デフォルトの名無しさん
2007/04/23(月) 23:10:26apiって何だ?
.netフレームワークには山ほどクラスがあるけど全部読みたいの?
読むだけ無駄だと思うけどな。
0689デフォルトの名無しさん
2007/04/23(月) 23:11:02それとも名前空間別で引くのか?
オンライン以外ありえない。
0690デフォルトの名無しさん
2007/04/23(月) 23:11:39すいません。なんていえばいいのかわかんなくって。
>読むだけ無駄だと思うけどな。
まじっすか・・・
0691デフォルトの名無しさん
2007/04/23(月) 23:12:050692デフォルトの名無しさん
2007/04/23(月) 23:12:32全部載ってる本なんてないだろ。
0693デフォルトの名無しさん
2007/04/23(月) 23:14:001ページ1クラスっていうありえないつめ方でも数千ページいくんだぞ。
0694デフォルトの名無しさん
2007/04/23(月) 23:14:270695デフォルトの名無しさん
2007/04/23(月) 23:16:10俺は知らないけどさ
0696デフォルトの名無しさん
2007/04/23(月) 23:16:18MSDNを全部印刷して製本Go!
0697デフォルトの名無しさん
2007/04/23(月) 23:19:03MSDNダウンロードして入れてみたら?
ローカルだからネットほどストレス無いし。
0698デフォルトの名無しさん
2007/04/23(月) 23:21:45じゃ全部じゃなくてもかなりの数載ってるのって無いんですか?
とにかくいろいろ覚えたいんです。
まず元となるもの覚えないとなんかダメな感じがして。
0699デフォルトの名無しさん
2007/04/23(月) 23:22:27本がいいんです。
0700デフォルトの名無しさん
2007/04/23(月) 23:23:250701デフォルトの名無しさん
2007/04/23(月) 23:24:36英語とか習い始めるとき辞書のAから勉強するひとはいないんじゃないの?
0702デフォルトの名無しさん
2007/04/23(月) 23:27:14英語で言うと基本英単語500みたいな
0703デフォルトの名無しさん
2007/04/23(月) 23:28:17ダメな感じのままでいいんじゃね?向いてないよ
0704デフォルトの名無しさん
2007/04/23(月) 23:28:28MSDNのメンバーのページのように。
そんな本が本当に必要か?
0705デフォルトの名無しさん
2007/04/23(月) 23:29:13そう。そんなかんじのが欲しいんです。
なんかどうも取っ掛かりが無くて。
0706デフォルトの名無しさん
2007/04/23(月) 23:29:450707デフォルトの名無しさん
2007/04/23(月) 23:30:05結構そういう本好きなんです。
0708デフォルトの名無しさん
2007/04/23(月) 23:34:11最近死ぬほどC#関連本出だしたから好きな本選んで来いよ。
0709デフォルトの名無しさん
2007/04/23(月) 23:35:56いっぱいありすぎてよくわからん。
でも確かにそうですね。やっぱ地道に探すことにします。
0710デフォルトの名無しさん
2007/04/23(月) 23:38:00応接間の飾り物にちょうどよさそうだなw
0711デフォルトの名無しさん
2007/04/23(月) 23:39:500712デフォルトの名無しさん
2007/04/23(月) 23:50:02毎週木曜発売
各号で一つのクラスについての詳細な説明とサンプルコード付き。
創刊号は整理に便利な特製バインダーがついて890円!! (通常定価1360円)
デアゴスティーニ♪
0713デフォルトの名無しさん
2007/04/23(月) 23:53:510714デフォルトの名無しさん
2007/04/23(月) 23:56:110715デフォルトの名無しさん
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
0716デフォルトの名無しさん
2007/04/24(火) 00:02:32>同じなのにはわが目を疑ってしまいました。
>本を置く場所に余裕があって、リファレンスはどうも紙ベースでないとやりにくいという方
>以外にはお奨めできません。
>HELPと全く同じリファレンスなど誰が購入するでしょうか?
>Microsoft公式解説書には良いものが多いのに、なぜこうなってしまったのでしょうか?
Helpの内容を書き改めるだけの労力はだれもかけたくない。
100%報われないのは分かっているから。
0717デフォルトの名無しさん
2007/04/24(火) 00:05:260718デフォルトの名無しさん
2007/04/24(火) 00:09:02よその会社で見たことはある。
0719デフォルトの名無しさん
2007/04/24(火) 00:11:030720デフォルトの名無しさん
2007/04/24(火) 00:12:17実は丸写しじゃないらしいんだが(今は知らない)そもそも人間に読める
量じゃないのでほとんどの人はわからない。
0721デフォルトの名無しさん
2007/04/24(火) 00:17:14>その前に
>>table2.Columns.Add(col);
>で止まると思うが?
複数のテーブルで同じカラムの組を指定するのはまずいんですかね?
とりあえずとまりません。
>>684
>そのエラーの通りなんだけど。
一度属した行を解除するにはどうしたらよいのですか?
Removeだと思ったのですが・・・
0722デフォルトの名無しさん
2007/04/24(火) 00:26:450723デフォルトの名無しさん
2007/04/24(火) 00:29:560724684
2007/04/24(火) 03:56:20確かめてないけど、table1.Add(row) と table1.Remove(row) を消しても
table2.Add(row) でエラーでない?
ようは row = table1.NewRow() で rowがtable1に属することが決定するんじゃないのかと。
0725デフォルトの名無しさん
2007/04/24(火) 07:43:27> >>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);
0726デフォルトの名無しさん
2007/04/24(火) 12:43:19private void Form1_KeyDown(object sender, KeyEventArgs e)
this.KeyPreview = true;
でキーイベント受け取ろうとしてるんですけど全然キャッチしてくれません
新規プロジェクト作ってやってみても無理でした
やりたいのは↓です
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/231winentermove/winentermove.html
0727デフォルトの名無しさん
2007/04/24(火) 13:27:410728デフォルトの名無しさん
2007/04/24(火) 14:00:10VBみたいに書くだけでいいのかと思ってました
0729デフォルトの名無しさん
2007/04/24(火) 14:04:260730デフォルトの名無しさん
2007/04/24(火) 14:05:400731デフォルトの名無しさん
2007/04/24(火) 14:19:44KeyDownイベントハンドラを. 追加します。
これにより、ある特定でのキー入力によりテキストボックス
間のカーソル移動ができるようになり
とかかいてるけどわかんねぇ
やってるつもりなのにな
0732デフォルトの名無しさん
2007/04/24(火) 14:40:24ヘッダに何か渡せばいいのかなと思っていますが見つけられていません
ご存知の方いましたら教えてください
0733デフォルトの名無しさん
2007/04/24(火) 14:49:57これか・・・・こんなんでずっとつまるとかあほくせぇ
本買うしかないな経費でおちないかなー
0734732
2007/04/24(火) 15:15:04アップロード後のファイルにPROPPATCHで後から変更する方法で対応できました。
できればUploadFile時にまとめて設定したいと思いますので、ご存知の方は教えていただければと思います。
0735デフォルトの名無しさん
2007/04/24(火) 15:39:22VisualStudio2005じゃないのか?
0736デフォルトの名無しさん
2007/04/24(火) 15:46:05C#2005でわかるでしょ
0737デフォルトの名無しさん
2007/04/24(火) 16:28:030738デフォルトの名無しさん
2007/04/24(火) 16:39:150739デフォルトの名無しさん
2007/04/24(火) 16:39:520740デフォルトの名無しさん
2007/04/24(火) 16:40:360741デフォルトの名無しさん
2007/04/24(火) 16:57:250742デフォルトの名無しさん
2007/04/24(火) 17:27:32他の所(普通のコンソールと分離できて,リアルタイムで確認できれば何でもいい)
に出力したいんだけど,どこに出すのが一番いい?
0743デフォルトの名無しさん
2007/04/24(火) 17:30:160744デフォルトの名無しさん
2007/04/24(火) 17:51:47RichTextBox内で、シンタックス(C言語ならintとか)
をハイライトで表示するようなエディタもどきを練習がてら
作ってるんですが、fontDialogを使って文字を調整すると
全部の色が黒に塗り変わってしまいます。
自分の知識不足だとおもいますが、どなたか
文字サイズだけを変える方法を知ってらっしゃる方がいれば
教えていただきたいです。
0745デフォルトの名無しさん
2007/04/24(火) 17:56:39そういうのは独自実装。
0747デフォルトの名無しさん
2007/04/24(火) 19:45:140748デフォルトの名無しさん
2007/04/24(火) 20:21:460749デフォルトの名無しさん
2007/04/24(火) 20:38:54>>731
> KeyDownイベントハンドラを. 追加します。
とりあえず、「表示」メニューで「プロパティ ウィンドウ」。
プロパティウィンドウのなかの稲妻みたいなアイコン(イベントアイコン)を押す。
で、そのなかのKeyDownの隣にある欄をダブルクリック→空のイベントハンドラが
自働で作成されるので、そのなかにコードを書くべし。
0750デフォルトの名無しさん
2007/04/24(火) 22:41:17参考になる本やサイトなどがありましたら教えてください。
0751デフォルトの名無しさん
2007/04/24(火) 23:01:19NUnit
0752デフォルトの名無しさん
2007/04/25(水) 07:26:17タブやらが→と・で表示されるような設定になっちゃってるんですが、これを解除するには
どうしたらいいんでしょうか?
0753デフォルトの名無しさん
2007/04/25(水) 07:29:380754752
2007/04/25(水) 07:35:37ありがとうございます。助かりました。
0756731
2007/04/25(水) 10:06:41Enter += new System.EventHandler(textBox1_Enter);
private void textBox1_Enter(object sender, EventArgs e)
{
textBox1.SelectAll();
}
ttp://jeanne.wankuma.com/tips/textbox/onfocusselectall.html
雷から自動作成してみたけどだめでした
イベントすら発生してないみたいです
0757デフォルトの名無しさん
2007/04/25(水) 10:14:51http://pc11.2ch.net/test/read.cgi/tech/1176387265/
0758デフォルトの名無しさん
2007/04/25(水) 10:17:07ありがとう
0759デフォルトの名無しさん
2007/04/25(水) 10:20:40http://pc11.2ch.net/test/read.cgi/tech/1176387265/
0760デフォルトの名無しさん
2007/04/25(水) 10:23:19まぁForm1にかいててだめだっただけだった^^
さいなら
0761デフォルトの名無しさん
2007/04/25(水) 12:37:09デリゲート理解してても。
最初はVB.NETで慣れた方が理解しやすいかも。
でもVB.NETから入ると、なんでC#にはHandlesに相当する機能がないんだ、
みたいな体になるかもしれんが。
0762デフォルトの名無しさん
2007/04/25(水) 14:08:25素直にC#かC++にしておけw
0763デフォルトの名無しさん
2007/04/25(水) 17:22:56みたいな書き方も可能だからそんなに難しくないと思うけどなあ
0764デフォルトの名無しさん
2007/04/25(水) 22:29:150765デフォルトの名無しさん
2007/04/25(水) 22:50:160766通りすがりのオッサン
2007/04/25(水) 23:10:29っと渡り歩いてきた感想からすると、結構、最強言語かもしれないと思ったりする。
ただ・・・、性能だすのがなかなか、癖あるね〜
javaとは全然違うけど、JNIとかと比べたら、unsafe,fixedはわかりやすいし、昔のinline assemblerと比べたら、
はるかにエレガントだと思うけど・・・
ハイエンドマシンへの対応状況がネックかもしれないね。
MIPS、SPARCプロセッサ、PowerPCのSMP構成とか、使ったこと無いけどCELLとか、とか、とか・・・
でも、そのうち、Xeonのクラスタリングが追い抜くのかな?
0767デフォルトの名無しさん
2007/04/25(水) 23:17:10半角全角キー、CapsLockなどの状態をトグルで扱うようなキーを入力すると
ずっとそのキーが押されっぱなしになった状態になります。
押されたかどうかを判定したいだけなので代替手段があるのでしたら教えていただけませんか?
0768デフォルトの名無しさん
2007/04/25(水) 23:20:100769デフォルトの名無しさん
2007/04/25(水) 23:22:100770デフォルトの名無しさん
2007/04/26(木) 00:41:24うわ、オレの経歴かと思うくらいそっくり…w
そういうオレも現時点では限りなくC#最強だと思う。特にWindowsなら。
パフォーマンスがどうのとかは、最近のPC性能の高さがカバーしてくれる。
それでもダメならアルゴリズムや手法自体がダメ、或いは今の時代では無理な課題だと切をつける。
昔ならCで作って遅い→アセンブラって以降したけど、C#で遅い→C++って戻る気がしないこの頃。
0771デフォルトの名無しさん
2007/04/26(木) 04:42:01例えば、int array[10, 20] とした場合
array.Length だと多次元配列全体の大きさである 300 が取得できますが
片方の、10 もしくは 20 という 1 次元分のサイズの方を取得したいのです。
よろしくお願いします。
0772デフォルトの名無しさん
2007/04/26(木) 04:45:140773デフォルトの名無しさん
2007/04/26(木) 04:48:120774デフォルトの名無しさん
2007/04/26(木) 07:32:14どうもありがとうございます。
Length だけじゃなくて、GetLength というメソッドもあったのですね。
助かりました。
0775デフォルトの名無しさん
2007/04/26(木) 09:49:530776デフォルトの名無しさん
2007/04/26(木) 09:57:41ライブラリとかってありますでしょうか
0777デフォルトの名無しさん
2007/04/26(木) 10:15:100778デフォルトの名無しさん
2007/04/26(木) 10:30:49君も仕事いきなさいよ家でPCばっかしてないで
0779デフォルトの名無しさん
2007/04/26(木) 10:38:440780デフォルトの名無しさん
2007/04/26(木) 11:27:420781デフォルトの名無しさん
2007/04/26(木) 12:38:08屁は屁元から騒ぎ出す、という感じだなw
三角関数は中学数学でも高校の数Iでも出てこないぞ
たぶんピタゴラスで>>776が解決できると勘違いしてるってところだろうがな
なんにしろ恥ずかしい奴(ら)だなw
0782デフォルトの名無しさん
2007/04/26(木) 12:45:310783デフォルトの名無しさん
2007/04/26(木) 12:48:050784デフォルトの名無しさん
2007/04/26(木) 13:24:42private 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 ) );
}
0785デフォルトの名無しさん
2007/04/26(木) 14:06:260786デフォルトの名無しさん
2007/04/26(木) 14:31:460787デフォルトの名無しさん
2007/04/26(木) 14:37:290788デフォルトの名無しさん
2007/04/26(木) 19:12:000789デフォルトの名無しさん
2007/04/26(木) 19:24:11感動した
0790デフォルトの名無しさん
2007/04/26(木) 20:10:15DがC++とJavaの欠点を見直した比較的低水準言語を目指すというのなら、
C#はJavaとECMAScriptっぽい高水準事務処理言語といったところだろうか。
今すごい勢いで虫歯が飛んだ。
0791デフォルトの名無しさん
2007/04/26(木) 20:18:29C#のネイティブコンパイラでいいのに
0792デフォルトの名無しさん
2007/04/26(木) 20:38:00クラスをDLLで作成し、クライアントのEXEのプロジェクトと
サーバのWebServiceのプロジェクト双方に参照設定し、
このクラスをパラメータとしてクライアントからWebService
を呼びたいのですが、
DLLのネームスペースはaaa.test.xxxxxなのに、
WebService側はWindowsApplication1.localhost.xxxxx
となっていて同じクラスとして認識してくれません。
どなたか対処方法分かりませんか
0793デフォルトの名無しさん
2007/04/26(木) 20:53:36それってdelphiじゃない?
0794デフォルトの名無しさん
2007/04/26(木) 22:47:59あきらめろ。
まあプロキシ自分でいじったらできるよ。
そんなことしたくないけど。
0795デフォルトの名無しさん
2007/04/27(金) 03:21:27$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);
0796デフォルトの名無しさん
2007/04/27(金) 05:14:320797デフォルトの名無しさん
2007/04/27(金) 07:26:51その関数のCやなんなりでの宣言を見せてみろ。
0798デフォルトの名無しさん
2007/04/27(金) 07:30:53マルチ死ね
0799デフォルトの名無しさん
2007/04/27(金) 08:25:32ごめんなさい
>>797
Cだと下記の表現みたいです・・
int WINAPI mng(char*, int)
>>796
DLLの関数を調べるツールってご存じないですか?
0800デフォルトの名無しさん
2007/04/27(金) 11:43:53関数は呼ばれてるのかとか文字化けするのかとか
LastErrorとってるならそれも出せハゲ。
0801デフォルトの名無しさん
2007/04/27(金) 13:27:03それじゃあperlのと一致しないじゃないか
0802デフォルトの名無しさん
2007/04/27(金) 15:44:44と出るから
引数がまちがっていると思うんですが・・・
>>801
別の関数でした。。
$getstr = new Win32::API("strmng", "mng", "PN", "N");
です
0803デフォルトの名無しさん
2007/04/27(金) 16:44:080804デフォルトの名無しさん
2007/04/27(金) 20:09:57public static extern int mng( string dr1, int dr2 );
0805デフォルトの名無しさん
2007/04/27(金) 20:12:340806デフォルトの名無しさん
2007/04/27(金) 22:50:42>$getstr = new Win32::API("strmng", "mng", "PNNPN", "N");
何で intに "N" 渡してるんだ?
ということで…
>>804は没。
0807デフォルトの名無しさん
2007/04/27(金) 22:53:300808デフォルトの名無しさん
2007/04/27(金) 23:04:05ttp://homepage3.nifty.com/hippo2000/perltips/perllha.htm
>N 数値(LONG)
>I 数値(Integer)
>P その他(文字列、構造体など)
0809デフォルトの名無しさん
2007/04/27(金) 23:07:130810デフォルトの名無しさん
2007/04/27(金) 23:40:54取得するには、どうすれば良いのでしょうか。
すいませんが教えてください
0811デフォルトの名無しさん
2007/04/27(金) 23:41:420812デフォルトの名無しさん
2007/04/27(金) 23:42:31ふらっとの方が向いてるよ。
0813デフォルトの名無しさん
2007/04/28(土) 13:52:56TextBox textBox;
List<string> list;
foreach(string str in list){textBox.AppendText(str + "\r\n");}
0814810
2007/04/29(日) 03:54:45取得設定方法に関してで、設定、っていうか加えるなら
this.textBox1.AutoCompleteCustomSource.Add("ghq");
みたいな感じで出来るのがわかるんですが取得方法
がわからないんです。
フォーム(デザイナ)画面で、プロパティタブ開いて
AutoCompleteCustomSourceの欄の(コレクション)で書き込んだ
stringはデザイナのcsを見ると
this.textBox1.AutoCompleteCustomSource.AddRange
で設定されてるのは分かったんですが、取得方法がいまいち
わかりません。
初心者の質問で申し訳ないですが、教えていただけないでしょうか。
0815デフォルトの名無しさん
2007/04/29(日) 04:07:190816デフォルトの名無しさん
2007/04/29(日) 04:40:42なにが「いや」だよ。
>>810の説明でわかるヤツなんていねーよ。
ほんとにコミュニケーション能力というか、日本語力というか相手に伝えられないヤツが多いな…
指定して取得したいなら
string text = textBox1.AutoCompleteCustomSource[n];
列挙したいなら
foreach (string text in textBox1.AutoCompleteCustomSource)
0817デフォルトの名無しさん
2007/04/29(日) 05:02:040818デフォルトの名無しさん
2007/04/29(日) 13:40:19OnPaint(PaintEventArgs e) の無効領域を、OnPaint( )内でクライアントエリア最大にできないものでしょうか。
Panelのクライアントエリアに背景画像があって、その上に四角形を描いています。
スクロールしたときに、背景だけ動かして、四角形は動かさないようにしたいのです。
OnScrollでInvalidateしても、いったんスクロールしてからOnScrollが呼ばれるみたいで、四角形がガクガクします。
0819デフォルトの名無しさん
2007/04/29(日) 13:49:290820デフォルトの名無しさん
2007/04/29(日) 13:56:16コメントありがとうございます。
OnPaintで背景も描いています。
ただ、Panelのスクロールバーでスクロールしたときに、実際に再描画が発生しているのは
スクロールした結果発生した無効領域だけなのです。
スクロールバーを50ピクセル下に動かすと、クライアント領域は50ピクセル上にスクロールします。
その結果として、クライアントエリアの下50ピクセル高さ幅ぶんだけ再描画になります。
0821デフォルトの名無しさん
2007/04/29(日) 13:59:460822デフォルトの名無しさん
2007/04/29(日) 14:06:08それはまずいでしょw
>>820
パネルの位置が変わった時点で無効化すればいいと思うけどな。
試してないけど、パネルじゃなくてPictureBoxならSetStyleでResizeRedraw指定すると
希望するような動作になったような気もしたけど。
0823デフォルトの名無しさん
2007/04/29(日) 14:46:15実は、背景が地図で、スクロールしたときに地図上の位置を示す中央のターゲットマークの
描画位置を保持したいのです。
>パネルの位置が変わった時点で無効化すればいいと思うけどな。
はい、今はOnScrollで無効化しています。
しかし、これでもスクロールの後で無効化が発生するため、四角形がガクガクします。
ガクガク、というのは次の例のような動作です。
(1)Panelのスクロールバーを50ピクセル下へ
(2)Panel自身の機能でクライアントエリアが50ピクセル上へ。
このとき、背景とともに、ターゲットマークも上へ移動します。
Win32で言えば、クライアントエリアを上へBitBltしている様子です。
(3)無効になったエリアの再描画のためにOnPaintが呼ばれる
無効になった領域*だけ*に背景(と場合によってはターゲットマークの一部)を描画。
(4)OnScrollが呼ばれて、この中でInvalidate
(5)クライアントエリア前面再描画のためににOnPaintが呼ばれる。
背景とターゲットマークを完全に再描画。
この例の場合、ターゲットマークはいったん上へ移動してから再描画されます。
ResizeRedrawは、サイズが変わったときだけで、スクロールしたときには影響がないようです。
ScrollableControlを使うのが無理があるのかなあ。
0824デフォルトの名無しさん
2007/04/29(日) 14:54:580825デフォルトの名無しさん
2007/04/29(日) 15:00:20おつきあいありがとうございます。
ダブルバッファリングはしています。
0826デフォルトの名無しさん
2007/04/29(日) 15:06:23ああ、やっと意味がわかった。
Win2K以降はWindowの位置が変わったときのBitBltはシステムが自動でやってくれる
みたいだけど、それが裏目にでるというわけか。
じゃあUserPaintフラグ指定してもダメかな?
0827デフォルトの名無しさん
2007/04/29(日) 15:08:310828デフォルトの名無しさん
2007/04/29(日) 15:30:16ありがとうございます。
UserPaintを試してみましたが、関係がないようです。
>>827
はいそうです。
ただ、ターゲットマークを表示していないときには、BitBltはやってくれた方が再描画エリアが
少ないので動作が軽くなるかもしれません。
ターゲットマークを表示しているときだけ、スクロールで発生するOnPaintの無効領域を
クライアントエリアいっぱいにできれば済むのですが。
ところで私の書き込みってsageなくて良いんですかね。
どこかで「質問者はageろ」と書かれていたのにならって、sageていないのですが。
0829デフォルトの名無しさん
2007/04/29(日) 15:40:56実行時にマーカー位置に移動しとく。
これでスクロールから守られる。
ただ、MakeTransparent()しても透過色が機能しない・・・なんでなの?
ペイント動作をよく理解していないからなぁ。
0830デフォルトの名無しさん
2007/04/29(日) 15:41:15public 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;
}
0831デフォルトの名無しさん
2007/04/29(日) 15:44:43コントロール上のカーソル(点滅している縦棒)の位置を知るにはどうしたら良いですか?
メソッドを調べているのですが中々使えそうなのが見つからず困っております
0832デフォルトの名無しさん
2007/04/29(日) 15:45:30いただいたアドバイスを参考に検討してみます。
成果があったら報告させていただきます。
0833デフォルトの名無しさん
2007/04/29(日) 15:46:350834831
2007/04/29(日) 15:49:16○行 △列 とステータスバーに表示することが目的です
0835デフォルトの名無しさん
2007/04/29(日) 15:57:48DOBON.Net ぐぐってみてください。
「TextBox(またはRichTextBox)の現在のカレット位置(行と列)を取得する」
というそのままズバリなTipsがありますよ。
0836デフォルトの名無しさん
2007/04/29(日) 15:59:45すみません、調査不足でした
情報ありがとうございました
0837829
2007/04/29(日) 18:38:50namespace 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);
}
}
}
0838デフォルトの名無しさん
2007/04/29(日) 20:41:54みたいに,演算子の戻り値に対してメンバを呼び出そうとすると
インテリセンスが働かないのはなんで?
0839デフォルトの名無しさん
2007/04/29(日) 20:45:460840デフォルトの名無しさん
2007/04/29(日) 21:10:520841デフォルトの名無しさん
2007/04/29(日) 22:52:32マジレスすると、それをやるなら Convert.ToString(値型1 + 値型2, 基数) 。
0842デフォルトの名無しさん
2007/04/29(日) 22:54:18寝言は寝て言え
0843デフォルトの名無しさん
2007/04/29(日) 23:22:280844デフォルトの名無しさん
2007/04/29(日) 23:57:041.ToString()では出ないのかも気になる
0845デフォルトの名無しさん
2007/04/30(月) 00:21:240846828
2007/04/30(月) 01:03:26結局、自前のスクロールパネルを作ることにしました。
工夫のない力技になってしまい、>>829、>>830さんには申し訳けありません。
0847デフォルトの名無しさん
2007/04/30(月) 21:04:57これには一つ一つRowStateを見ていくほかに無いのでしょうか?
TableState 見たいなのがあると良いんですが。
変更が起こるたびにExtendedPropertiesにフラグをセットするとか考えたんですが・・・
簡潔な方法があれば教えてください。
0848デフォルトの名無しさん
2007/04/30(月) 21:10:050849デフォルトの名無しさん
2007/04/30(月) 21:50:47ありがとうございます!
こんな便利なメソッドがあるんですね
これのおかげで他の場所での処理もかなり簡潔に書けそうです
0850デフォルトの名無しさん
2007/05/01(火) 16:34:02いやいやDataViewのRowStateFilterじゃね?
0851デフォルトの名無しさん
2007/05/02(水) 01:13:27フリーウェアを付くっているんですが、正式にリリースする前に、すべての例外を確かめたいのです。
全部の例外を網羅しようとしたら、ひとつひとつの関数をすべて調べて回る必要があるんでしょうか。
それとも、VisualStudioの機能で、投げられるすべての例外の一覧などを取得することはできますか?
0852デフォルトの名無しさん
2007/05/02(水) 01:16:580853デフォルトの名無しさん
2007/05/02(水) 01:35:16>すべての例外を確かめたいのです
非現実的だし、そんなことする意味がない。
0854デフォルトの名無しさん
2007/05/02(水) 01:42:460855851
2007/05/02(水) 02:04:49正確には、プログラム中で投げられる例外をチェックしたいんです。
C#では、Javaのように例外のキャッチを強制するようにできてないので、
textboxで求めるものと違う文字列を入力したとしても、
明示的にキャッチしないとプログラムを強制終了させてしまいます。
ある程度コードを書いてから、処理していない例外がたくさんあることに気づいたのですが、
いまさらコードをすべて見直すのも手間がかかるので、例外をスローする可能性のある部分だけを
列挙したいわけです。
それとも>>853 さんのいうように、このような考え方はC#ではしないんでしょうか。
0856デフォルトの名無しさん
2007/05/02(水) 02:16:14http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html
0857デフォルトの名無しさん
2007/05/02(水) 02:19:22例外を出さない処理を心がける方向へどうぞ。
textboxで求めるものと違う文字列を入力したとしても
それは例外ではなく想定できる状況でしょ。
たぶんJavaの例外と概念が違います。
フリーウェアとして公開するならなおさら握りつぶさずに。
ぶっちゃけtry-cathだらけのアプリケーションなんて公開されても迷惑です。
0858853
2007/05/02(水) 02:22:57>>852 のようにメモリ不足なんて常に発生しうるし、HDDの故障によるリードエラーも同じ。
普通、TextBoxに求めるものと違うものを入力された場合の処理は例外を使用しない。
っつーか入力された文字が原因で例外が発生してるんじゃなくて
お前のプログラムが入力された文字に対応してないだけだろーがw
0859851
2007/05/02(水) 02:38:14なるほど、C#、というかC系では例外を投げないように作るんですね。
概念が違うのがよくわかりました。
>>858
おっしゃるとおりだと思います。たしかにスローしうるすべての例外をチェックしてたらきりがありません。
しかし、それだと普通にプログラムしていて想定外の入力などあったときの処理などは、
すべて自前で各必要があるんでしょうか。
言い換えれば、入力が期待した値にそっているかすべてチェックするんですか?
それだとどうしてもカバーし忘れたりしないですか?
例えば、
テキストの入力に整数を期待していて、事前チェックで文字列の場合は警告するようにしたとします。
でも、ここで実数を入力されたときの処理を忘れてます。
同じようなことは、もっと複雑にもっと多く存在しうるわけで、それらすべてを想定する値かチェックすると
非常に複雑になりませんか?
それなら一度関数に入れて、例外が出れば警告する、という方法をJavaではとってきました。
まあ、その程度の処理もできないのか、といわれればそれまでなんですが・・・
0860デフォルトの名無しさん
2007/05/02(水) 02:48:34いや、自分がほしいのはすべての例外を処理する方法なんです。
それこそ強制終了させないだけならmain文でtry catchかけばいいんで。
0861851
2007/05/02(水) 02:56:03要は、通常C#では例外を出さないように、
事前チェックですべてを処理しようとするのか、
それで本当に例外を排除できるのか、
ということが聞きたいわけです。
0862デフォルトの名無しさん
2007/05/02(水) 02:58:260863デフォルトの名無しさん
2007/05/02(水) 04:33:46>テキストの入力に整数を期待していて、事前チェックで文字列の場合は警告するようにしたとします。
>でも、ここで実数を入力されたときの処理を忘れてます。
>それなら一度関数に入れて、例外が出れば警告する、という方法をJavaではとってきました。
わけ分からん入力をわけ分からん入力のまま扱おうとするなよ。
それ想定外の入力が入るっていうバグだから例外はいて落ちるほうが正解
あと一応。WinFormsだとApplication.ThreadExceptionみれ
0864デフォルトの名無しさん
2007/05/02(水) 06:44:12それまでです。
0865デフォルトの名無しさん
2007/05/02(水) 08:14:28ユーザー入力の妥当性検査に例外を流用しちゃうボクを認めてくれよ、って話か?w
碇シンジ君だなそりゃ
0866デフォルトの名無しさん
2007/05/02(水) 08:52:50>いや、自分がほしいのはすべての例外を処理する方法なんです。
この場合の処理って例外に応じた適切な処理ってことだよね?
そんなエスパーみたいなコードかけるなら今の給料の2倍でいいんでうちの会社に来てほしい。
0867デフォルトの名無しさん
2007/05/02(水) 09:21:090868デフォルトの名無しさん
2007/05/02(水) 11:11:31テスト項目作るのも大変
0869デフォルトの名無しさん
2007/05/02(水) 11:19:090870デフォルトの名無しさん
2007/05/02(水) 12:43:23漏
れw
ファーストネームはフランソワーズか?w
0871851
2007/05/02(水) 14:48:10逆に疑問なんですが、C#では潜在的に例外が処理されない可能性を
残したままソフトウェアをリリースしてるんですか?
それに例外に応じた処理をかけるっていうのがそれほどすごいことではないと思うんですが。
単に投げられる主要な例外をすべてキャッチすればいいだけの話ですし。
もちろん、絶対に投げられないような例外処理は書く必要がありませんし、
Javaでもゼロ除算など(上で上げられた OutOfMemoryException なども)基本的なものは
例外処理を強制されませんが。
0872デフォルトの名無しさん
2007/05/02(水) 15:01:18例外について再学習する事をお勧めする。
0873デフォルトの名無しさん
2007/05/02(水) 15:09:130874デフォルトの名無しさん
2007/05/02(水) 15:15:23探せばJavaからの移行ガイドみたいなのがいくつかあったはずだから
先にそっちに目を通すことをおすすめする。
別におまいさんのやり方を否定したいわけじゃないんだが、考え方それぞれだ。
0875デフォルトの名無しさん
2007/05/02(水) 16:45:17そこに投げる例外を書いとくとインテリセンスのメンバ説明に表示されるよ
そういう話ではないのはわかってるが
0876デフォルトの名無しさん
2007/05/02(水) 16:50:26さすれば彼もニュアンスを汲み取れるであろう。
0877デフォルトの名無しさん
2007/05/02(水) 17:19:47わかりました。いわれれば例外をJavaとC#でまったく同じものと思いこんでいました。
シンタックスが同じなので、使い方も全く同じと思っていました。
すぐにJavaとC#の例外の違いについて調べてみます。
>>876
たしかにそれが一番良い方法かもしれません。
よろしければ、C#でどういったときに例外として処理するかを教えてください。
再三の質問、すみませんがよろしくお願いします。
0878デフォルトの名無しさん
2007/05/02(水) 18:23:510879デフォルトの名無しさん
2007/05/02(水) 19:08:45.NETでJava風の例外機構がどうしても使いたいならJ#とかどうよ。
微妙に両方が混ざってカイカンだぞ。
0880デフォルトの名無しさん
2007/05/02(水) 19:33:460881デフォルトの名無しさん
2007/05/02(水) 19:43:00あれを導入しようと思ったら、.NET 対応の全言語に同様の機構用意しないと意味ないから、
C# にだけ導入するのは避けたって話よね。
つーか、そんなに例外を受け漏らしたくないなら、
catch(Exception) でもすりゃいいじゃん。
あんまり勧められたもんじゃないけど。
0882デフォルトの名無しさん
2007/05/02(水) 19:44:340883デフォルトの名無しさん
2007/05/02(水) 19:46:56> C# にだけ導入するのは避けたって話よね。
.NET に throws の導入を避けたのも、
> catch(Exception)
みたいなコードが Java で量産されてて「これじゃ意味無いじゃん」って理由が大きい。
0884デフォルトの名無しさん
2007/05/02(水) 20:52:02チェック済み例外なくしたのはなんで?ってインタビューしてる記事
ttp://www.artima.com/intv/handcuffs.html
IBMのJava例外に関する記事。チェック済み例外の批判について書いてある
ttp://www-06.ibm.com/jp/developerworks/java/040618/j_j-jtp05254.html
0885デフォルトの名無しさん
2007/05/02(水) 22:42:34予期しない例外が発生した場合のみキャッチするようにするのベスト。
予期しない例外は大抵ログに書き込み、例外の度合に応じて
処理を継続するか異常終了させるか選択する。
0886デフォルトの名無しさん
2007/05/02(水) 22:45:36throws()をたまに書く位か
0887デフォルトの名無しさん
2007/05/02(水) 23:03:00なるべく例外を発生させないようにするのは当然として
予期できる例外こそcatchすべきじゃないの?
予期できないのはApplication.ThreadExceptionとかにおまかせで
0888デフォルトの名無しさん
2007/05/02(水) 23:05:53>残したままソフトウェアをリリースしてるんですか?
windowsやieハングした経験はないのか???
お前大丈夫か?
0889デフォルトの名無しさん
2007/05/02(水) 23:13:53>明示的にキャッチしないとプログラムを強制終了させてしまいます。
どうやったらそうなるのか教えて欲しい。
求めるものに変換できるかどうか1度調べるだけだとおもうけどなあ
0890デフォルトの名無しさん
2007/05/02(水) 23:22:150891デフォルトの名無しさん
2007/05/02(水) 23:32:240892デフォルトの名無しさん
2007/05/02(水) 23:37:21>明示的にキャッチしないとプログラムを強制終了させてしまいます。
求めるものと違うものを入れたからといって例外吐くのは糞仕様だと思います。
0893デフォルトの名無しさん
2007/05/02(水) 23:40:190894デフォルトの名無しさん
2007/05/02(水) 23:41:440895デフォルトの名無しさん
2007/05/02(水) 23:42:03入れたとたんに例外はくようなのは問題外。
0896デフォルトの名無しさん
2007/05/02(水) 23:45:07c++使いだな。
それを避けるために例外があるんじゃないのか?
0897デフォルトの名無しさん
2007/05/02(水) 23:52:300898デフォルトの名無しさん
2007/05/02(水) 23:57:570899デフォルトの名無しさん
2007/05/03(木) 00:01:210900デフォルトの名無しさん
2007/05/03(木) 00:02:03んー何でもかんでも例外はきまくるのは帰ってコードがおかしくなる。
実際にオブジェクト構造とかがおかしくなってるようなときは例外はくけど想定できるエラーとかがあるときは例外はかんよ
0901デフォルトの名無しさん
2007/05/03(木) 00:02:500902デフォルトの名無しさん
2007/05/03(木) 00:11:150903デフォルトの名無しさん
2007/05/03(木) 00:12:03データが失われたらマズイ場合は別だけど。
0904デフォルトの名無しさん
2007/05/03(木) 00:19:09String.IndexOfの見つからない場合の戻り値は-1は準エラーコードかなあ…
0905デフォルトの名無しさん
2007/05/03(木) 00:24:580906デフォルトの名無しさん
2007/05/03(木) 01:18:22GUI層の想定漏れでプロセス全体落ちられると嫌という話から
サーバ内に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とかで分類しても
こういう視点は得られない気がする。
0907デフォルトの名無しさん
2007/05/03(木) 01:22:51ASP.NETとかSQL CLRがこういう動作だっけな。
0908858
2007/05/03(木) 02:46:52もう一度最初の話に戻すと、普通は入力値のチェックに例外は使用しない。
しかし >>860 には「自分がほしいのは全ての例外を処理する方法」とあるので
何が何でも例外で処理したいなら、これ以上何も言えないが…
>>871 は言語と例外処理とその使用法を乱暴に扱いすぎ。
例外の使い道に言語は無関係だし、ゼロ除算が想定できるなら計算前に
分母が0かどうかチェックするのが普通。
数値入力に関してはコストと安全性を考えてサードパーティー製の数値入力
コントロール等を利用したりする。
どうもあなたは例外と条件文の選択を間違えているような気がする。
例外優先で考えてないか?文字通り例外は例外です。
0909851
2007/05/03(木) 04:21:53Javaと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#では、例外の扱いと考え方を変えてみようかと思います。
だらだらと一日以上書き続けてしまいましたが、つきあってくださった方、ありがとうございました。
0910デフォルトの名無しさん
2007/05/03(木) 08:30:30単に851が「例外」という概念についてずっと勘違いしてただけじゃないの?
0911デフォルトの名無しさん
2007/05/03(木) 14:39:38public void Hoge() {...}
とかやっとけば列挙できないこともないが
0912デフォルトの名無しさん
2007/05/04(金) 00:53:12JavaとC#の例外処理は全く別。
C#は非チェック済み例外だけだが、Javaはそれに加えてチェック済み例外もある。
0913デフォルトの名無しさん
2007/05/04(金) 01:17:17その違いがわかった上で、それでもそこで例外を使うのはおかしいという流れだよ。
0914デフォルトの名無しさん
2007/05/04(金) 02:30:47だったらどこで例外を使うんだよ。
そもそも例外をださないようにプログラムするのが常識ってんなら、例外の存在意義って何だ?
失敗したことだけを知るなら例外クラスにヴァリエーションなんていらんだろうが。
出された例外別に対処するためにそれぞれキャッチできるようになってんだろ。
例外そのものがおまけなC++的思考から抜け出せてないんじゃないか?
0915デフォルトの名無しさん
2007/05/04(金) 02:34:290916デフォルトの名無しさん
2007/05/04(金) 02:37:45例外処理
http://pc11.2ch.net/test/read.cgi/tech/1142667446/>>914
0917デフォルトの名無しさん
2007/05/04(金) 02:47:42「戻り値の型はT型またはU型またはV型」みたいな奴。
Javaだと「戻り値の型はint型またはHogeException型またはFugaException型」みたいなコードが書けていたのが
C#に移ったとたん「そーゆーのは流行んないんだよプゲラ」と言われてムッとなるのは分からんでもない。
そういう人は例えばNemerleにVariantがあるからそっち行ってみるのはどう?
ttp://d.hatena.ne.jp/akiramei/20050323#p2
まあBCL再実装とか現実的じゃないんで結局は「そーゆーのは流行んないん」という話だと思うけど。
0918デフォルトの名無しさん
2007/05/04(金) 03:35:35だから入力値のチェックに普通例外は使わないって話をしてるんだよバカ
0919デフォルトの名無しさん
2007/05/04(金) 04:29:38例外処理はプログラミングの構造から外れた所の処理だけ行えば良い。
構造から外れることが解っている例外処理を行うのはナンセンスだ
0920デフォルトの名無しさん
2007/05/04(金) 04:58:570921デフォルトの名無しさん
2007/05/04(金) 05:12:57だから、処理コストの高い例外なんか使わずに、きちんとチェックしろよということじゃねーの?
0922デフォルトの名無しさん
2007/05/04(金) 08:40:44そういうケースでは.NET2.0以降のC#の場合、outパラメータが使えるからTryParseパターンで対応してる。
JavaのInteger.parseIntは例外の使い方としては?な部分が多いといわれていて、
さらにNumberFormatExceptionがRuntimeExceptionなのでますます謎。
本来はTester-Doerパターンがいいと思うのだけどね。
if (Integer.canParse(str)) i = Integer.parse(str);
これならparseの例外がRuntimeExceptionなのは納得がいく。
0923デフォルトの名無しさん
2007/05/04(金) 09:55:17エラーは全て例外にして投げておくのが良い。
もしくは全く例外を使わないのが良い。
中間は全てナンセンスだ
0924デフォルトの名無しさん
2007/05/04(金) 10:12:37メソッドの戻り値がすべてvoidで、
エラーはすべて例外になるのはなんで?
0925デフォルトの名無しさん
2007/05/04(金) 11:16:19例外にする方を選んだのはそっちの方が多い使われ方だったからだろ。
気に食わなきゃ自分でインポート書けばいいだけの話。
0926デフォルトの名無しさん
2007/05/04(金) 16:44:16C#側のただしい記述方法について教えていただけないでしょうか?
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;
}
0927デフォルトの名無しさん
2007/05/04(金) 17:49:39<log xxx='xxx'/>
<log xxx='xxx'/>
・・・
というファイルがあったとき、私はJavaではSequenceInputStreamでルートノードをくっつけてSAXParser
で読んだりしていますが、.NetではSequenceInputStreamに該当するクラスが見つかりません。
SequenceInputStreamを自作する必要があるのでしょうか?見落としているだけでしょうか?(ありそう)
それとも元々SequenceInputStreamを使っている自分が馬鹿で、別に簡単な方法があるのでしょうか?
全部読むという選択肢は考えていません。
テンポラリファイルに書き出すとスピードが、メモリに読み込むとメモリサイズが犠牲になりますので。
0928デフォルトの名無しさん
2007/05/04(金) 17:56:340929デフォルトの名無しさん
2007/05/04(金) 18:17:510930デフォルトの名無しさん
2007/05/04(金) 18:43:49C 側で関数を export してなくね?
つか例外出るならそれ書け。
0931デフォルトの名無しさん
2007/05/04(金) 18:47:10そもそもログに XML って相性悪いと思うが。
XmlReader では XML フラグメントの読み取りがサポートされてるが、どうかね?
0932デフォルトの名無しさん
2007/05/04(金) 20:04:06XML フラグメント」でぐぐり、http://support.microsoft.com/kb/318504/ja を見つけ、テスト実行してみたら無事読めました。
ログをXMLで書いておくと、出力する内容を追加した時に、以前に書いたログリーダーを修正しなくても使えるという利点があるので
XMLで出すようにしているんです。
csvだとそこいらが・・・だから、ログにXMLは意外と相性いいと思います。
0933ちらしの裏
2007/05/04(金) 21:13:56ちょっと代替方法を調べましたのでメモっておきます。
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlReader reader = XmlReader.Create(new StringReader(xmlFrag + xmlFrag), settings);
これだけでも XMLフラグメント xmlFrag を並べた文字列を解析できるようです。
0934デフォルトの名無しさん
2007/05/04(金) 21:47:420935デフォルトの名無しさん
2007/05/04(金) 21:51:310936934
2007/05/04(金) 22:03:212003ではどうすれば・・・@@
0937デフォルトの名無しさん
2007/05/04(金) 22:21:51DrawImage一行書くのがそんなに面倒か?
0938934
2007/05/04(金) 22:58:03リソースの読み方を調べてpaintイベントにDrawImage書いて解決しました。
ありがとうございました。
0939ちらしの裏2
2007/05/05(土) 20:47:45sc.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内の行番号と桁位置を取得できました。
0940デフォルトの名無しさん
2007/05/06(日) 17:16:35たとえば、EventA+=delegate(Obj o,EA e){};のようにイベントを匿名で
追加した場合、その後イベントから外す方法が知りたいです。
同一インスタンスでなきゃだめなのかな。
0941デフォルトの名無しさん
2007/05/06(日) 17:21:13さっさとメソッドにしてしまえ
匿名デリゲートにゃ荷が重すぎたのさ
0942デフォルトの名無しさん
2007/05/06(日) 18:00:300943デフォルトの名無しさん
2007/05/06(日) 18:01:010944デフォルトの名無しさん
2007/05/06(日) 18:03:170945デフォルトの名無しさん
2007/05/06(日) 18:57:050946デフォルトの名無しさん
2007/05/07(月) 15:57:42フォームがアクティブじゃないときにマウスで通常のボタンをクリックすると
フォームがアクティブになると同時にボタンも押されたことになりますが、
これがツールストリップのボタンだと、
フォームがアクティブになるだけでボタンは押されたことになりません。
結局もう一度ボタンを押して実行しないといけないんですが
これを通常のボタンのようにするにはどうしたらよいのでしょうか?
0947デフォルトの名無しさん
2007/05/07(月) 16:01:10WebBrowserコントロール上で選択されている文字列を取得しようとしています。
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' キーワードと共に渡すことはできません。
というエラーになります。(当たり前か)
正しい方法をご存知の方いますか?
0948946
2007/05/07(月) 16:12:14ろくに調べずに質問してすみませんでした。
0949947
2007/05/07(月) 16:24:51web.Document.ExecCommand("Copy", false, o);
string text = Clipboard.GetText();
で取得できました。
サンプルがすべてコメントアウトされていた理由がわかった気がします。。。スミマセン
0950デフォルトの名無しさん
2007/05/08(火) 21:03:51俺は前やったときInvokeScriptでeval使ってJavaScript実行させて戻り値で取った。
その方法と比べてクリップボードを汚さないけど、Scriptきられていると動かないので
良し悪し。
0951947
2007/05/08(火) 21:42:30なるほどそういう手もあるんですね。。。
949の方法だとクリップボードの内容をいちいち退避しなければいけなくて面倒でした。
社内LAN等、ある程度限定された環境ならいけそうですね。
ありがとうございます。
0952デフォルトの名無しさん
2007/05/09(水) 00:48:31Part36 http://pc10.2ch.net/test/read.cgi/tech/1165656839/
Part35 http://pc8.2ch.net/test/read.cgi/tech/1162490865/
Part34 http://pc8.2ch.net/test/read.cgi/tech/1157549657/
Part33 http://pc8.2ch.net/test/read.cgi/tech/1153537081/
Part32 http://pc8.2ch.net/test/read.cgi/tech/1149934230/
Part31 http://pc8.2ch.net/test/read.cgi/tech/1145075577/
Part30 http://pc8.2ch.net/test/read.cgi/tech/1141448072/
Part29 http://pc8.2ch.net/test/read.cgi/tech/1138925245/
Part28 http://pc8.2ch.net/test/read.cgi/tech/1134514022/
Part27 http://pc8.2ch.net/test/read.cgi/tech/1131544541/
Part26 http://pc8.2ch.net/test/read.cgi/tech/1127063469/
Part25 http://pc8.2ch.net/test/read.cgi/tech/1122352650/
Part24 http://pc8.2ch.net/test/read.cgi/tech/1117631000/
Part23 http://pc8.2ch.net/test/read.cgi/tech/1112968209/
0953デフォルトの名無しさん
2007/05/09(水) 00:53:48http://pc11.2ch.net/test/read.cgi/tech/1178639189/
>>952 誤爆してしまいました。すみません。
0954デフォルトの名無しさん
2007/05/09(水) 22:06:33遅レスだが。
IHTMLDocument2 には selection プロパティがあるぜ。
HtmlDocument の DomDocument から先は COM/RCW の世界になっちゃうけど。
0955デフォルトの名無しさん
2007/05/09(水) 22:56:12[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の多重継承はできないし・・
0956デフォルトの名無しさん
2007/05/09(水) 23:09:23こんなのを見つけたが。
デシリアライズ用の特殊なコンストラクタが必要らしいよ?
0957デフォルトの名無しさん
2007/05/10(木) 00:17:49Threadのハンドルが閉じられていなくて、ThreadクラスにはDisposeなどハンドルを閉じられそうなメソッドが見あたらなかったです。
多分物理的なスレッドと.NETのスレッドは対応してないことになってるからかなと思ったのですが、
GCが動けばハンドルは解放されるのですが、GCが動く前にハンドル数不足でOutOfMemoryが発生することがあります。
とりあえずThreadの処理が終わるたびに必ずGCを叩いて回避したのですがパフォーマンスが悪化するのが気になるので
これをGCを動かす以外に明示的に閉じる方法ってないのでしょうか?
0958デフォルトの名無しさん
2007/05/10(木) 00:24:070959デフォルトの名無しさん
2007/05/10(木) 00:25:33きみほんとにRemoting理解してる?
0960デフォルトの名無しさん
2007/05/10(木) 00:27:34Threadクラスのリファレンスを隅々まで読んでごらん?
0961デフォルトの名無しさん
2007/05/10(木) 00:49:08それらしい記述は見あたらないけど。
0962デフォルトの名無しさん
2007/05/10(木) 02:27:44struct 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]分だけ
0963962
2007/05/10(木) 02:31:40取得するプログラムがC++で作ってありまして、
それを全コードC#に移植したいのですがC#で実現するにはどうすればいいのでしょうか?
今仕方なくC++のプログラムをdllにして呼び出してますが
出来ればC#で全て行いたいので。
方法をご存知のかた居ましたらご教授おねがいします
0964962
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で読み込んだのはいいもののどうアドレスを指定して構造体にしていいものやら・・・
0965デフォルトの名無しさん
2007/05/10(木) 03:02:59そういうウンコな処理をC#でやりたいって動機がワカンネ
0966デフォルトの名無しさん
2007/05/10(木) 03:20:59アドレス分進めて
メモリにコピーして
Marshal.PtrToStructureで構造体ゲット?
べつにC++とやることはあまり変わらないと思うけど
ファイル書き出しをC#でできるならBinaryFormatter使う。
まあ>>965に同意
0967デフォルトの名無しさん
2007/05/10(木) 12:30:28スレッドプールじゃ駄目なん?
Threadは作成と破棄を繰り返す処理には向いてないってどっかで見た。
0968デフォルトの名無しさん
2007/05/10(木) 12:41:01やたらスレッドプールを薦める人っているけど、スレッドプール向きの処理って
実際そんなにあるのかね?
スレッド使うような処理って一定の間(場合によってはアプリが起動してる間)
ずっと回ってる必要がある処理が多いと思うんだけど。
0969デフォルトの名無しさん
2007/05/10(木) 12:43:140970デフォルトの名無しさん
2007/05/10(木) 12:44:310971970
2007/05/10(木) 12:52:170972デフォルトの名無しさん
2007/05/10(木) 13:48:16いやむしろそういうのの方が少なくね?
0973デフォルトの名無しさん
2007/05/10(木) 13:57:18俺も972に同意
【スレッドクラス】
Threadクラス
【スレッドプール系】
スレッドプール
デリゲート
スレッドタイマー
バックグランドワーカー
0974デフォルトの名無しさん
2007/05/10(木) 15:16:12どのクラスが内部でThreadPool使ってるかなんて分かんないのでなるべく空けておかないと
高負荷な時に危険な状況が起きるのでいまいち積極的には使えないと思ってます。
Threadが短い処理をするのに向いてないのは分かってるが長時間動かす時、
たまたまハンドルが解放されない状況が起きると致命的なので
GC以外でちゃんと解放する手順を知りたいだけなのですが。
0975デフォルトの名無しさん
2007/05/10(木) 15:21:170976デフォルトの名無しさん
2007/05/10(木) 15:31:07というか少なくとも試すべき。
0977デフォルトの名無しさん
2007/05/10(木) 15:33:450978デフォルトの名無しさん
2007/05/10(木) 15:43:43キュー待ちじゃないの?
それからハンドルって何?
0979デフォルトの名無しさん
2007/05/10(木) 15:46:040980デフォルトの名無しさん
2007/05/10(木) 15:49:000981デフォルトの名無しさん
2007/05/10(木) 15:49:430982デフォルトの名無しさん
2007/05/10(木) 15:53:380983デフォルトの名無しさん
2007/05/10(木) 15:55:32似てても要求を満たさないものは”ないモノ”と一緒だから。
0984デフォルトの名無しさん
2007/05/10(木) 16:08:560985デフォルトの名無しさん
2007/05/10(木) 16:10:590986デフォルトの名無しさん
2007/05/10(木) 16:13:120987デフォルトの名無しさん
2007/05/10(木) 16:20:140988デフォルトの名無しさん
2007/05/10(木) 16:21:190989デフォルトの名無しさん
2007/05/10(木) 20:49:410990デフォルトの名無しさん
2007/05/10(木) 21:05:340991デフォルトの名無しさん
2007/05/10(木) 21:17:160992デフォルトの名無しさん
2007/05/10(木) 21:17:310993デフォルトの名無しさん
2007/05/10(木) 21:20:130994デフォルトの名無しさん
2007/05/10(木) 21:22:490995デフォルトの名無しさん
2007/05/10(木) 21:24:000996デフォルトの名無しさん
2007/05/11(金) 00:10:090997デフォルトの名無しさん
2007/05/11(金) 01:19:110998デフォルトの名無しさん
2007/05/11(金) 01:21:180999デフォルトの名無しさん
2007/05/11(金) 01:22:211000デフォルトの名無しさん
2007/05/11(金) 01:23:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。