C#, C♯, C#相談室 Part59
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/05/16(日) 23:13:52前スレ
C#, C♯, C#相談室 Part58
http://pc12.2ch.net/test/read.cgi/tech/1269261310/
Visual C# 2008 Express Edition 日本語版
http://www.microsoft.com/japan/msdn/vstudio/express/vcsharp/
その他テンプレ>>1-5くらい
0002デフォルトの名無しさん
2010/05/16(日) 23:49:58, ´ ー-ミ `丶、
/ ' , `ヽ/´. -ヽ
. ′' �U 厶>ー-'´‐¬ |
l i l | L!
| l ! i l レ-‐ '⌒LI
| l 」 にコ,. _- 斤L.!
l l lf| l |ィ ハ-‐┐イソ リ|
!.l l | 代ソ ,几`..ィ |
V ! | i i| ` ̄ ' ノi,⊥、
j l ! ! ! l| ー_'´∠-'─‐'ァ、 ゆっくりしていってね!
. 厶ノl l l li l|` ァーr'^7ー,⊆ニ´ イ
/⌒ヽ`、| | |l l| / ハ V /フニ二ブ、
/^ヽ ヽ ヽ`ヽ、{__'ノ `、V´ ヽ. \
i 丶 ヽ ヽ 〉V_∠___ヽ ヽ
. l V `、`、 _.. - ニ -ヘ `、 ノ
lヘ ヽ. l 二 -' 囘 ヽ `ー'
. lヽ l l ,. -‐┴゙- 、 ',
Tー---‐r' l / 二7´ 丿
l l ノ ,ニ7’.イ ) )
. l ム- ´ / ̄ _||'´ノハ (⌒ く
l '´ ∠ -‐ '´ ||´ / ハ、 ( _.. -‐)‐-
. l / ` ー ‖ / i , ´_.. -‐‐‐-
. ,ハ. /`丶、_ __ ‖_.. ..._ |f , ´c 〜⌒
{ `7丁 ヾニ二ブ |'、 〜 (つ
ヽ ,′l _, -'´ | ` ー----‐ ´
l �U _, -'´ _, -'´!
| | _, -'´ `ヽ ` ー- .._.. -
0003デフォルトの名無しさん
2010/05/17(月) 22:41:30テキストボックス内のワードで検索する、ということです。
まず、ファイル名.aspx内に
<body onkeydown="click_sub()"
<script language="Javascript">
function click_sub() {
if(windows.event.keyCode == 13) {
CallServer("","");
}
0004デフォルトの名無しさん
2010/05/17(月) 22:51:07テキストボックス内のワードで検索する、ということです。
まず、ファイル名.aspx内に
<body onkeydown="click_sub()"
<script language="Javascript">
<!--
function click_sub() {
if(windows.event.keyCode == 13) {
CallServer("","");
}
}
function ReceiveServerData(rBValue) {
window.open('Search.aspx', '検索')
}
略
と追加し、ファイル名.aspx.csのPage_Load(object sender, EventArgs e)に
callbackScript ="function CallServer(arg, contexct)" +
"{" + cbReference + ";};
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
"CallServer", callbackScript, true);
と追加しました。
public void RaiseCallbackEvent(String evenArguemnt)
でtxtSearch.Textの中が空になってしまい、
文字列が正常に取得できません。
デバッグでこの処理まで来るのは確認しましたが、
テキストボックスの値が何も入っていません。
ボタンクリックイベントだと正常に取得できました。
txtSearchに親の名前空間が必要なのでしょうか?
うまく説明できませんが、よろしくお願いします。
>>3は失敗しました。申し訳ありませんでした。
0005デフォルトの名無しさん
2010/05/17(月) 22:55:530006デフォルトの名無しさん
2010/05/18(火) 02:37:28その提示したソース以外の所に問題があるな
具体的にはTextBoxにrunat="server"ねーだろ?
0007デフォルトの名無しさん
2010/05/18(火) 06:01:06ありがとうございました。
その辺で調べてみます。
0008デフォルトの名無しさん
2010/05/18(火) 18:49:04プロパティの順番を任意に変える方法はすぐ見つかったんですが、カテゴリの
並び順を変えるのってなかなか見つからないです。
0009デフォルトの名無しさん
2010/05/18(火) 22:46:03プロパティグリッドねえ
あんまり非プログラマに触らせるようなもんじゃないと思う
0011デフォルトの名無しさん
2010/05/20(木) 01:27:20人生で初めてお礼を言われたように思う
うひょーw
0012デフォルトの名無しさん
2010/05/20(木) 10:02:49おめでとう!
おめでとう!!
おめでとう!!!
0013デフォルトの名無しさん
2010/05/20(木) 19:29:25どうしても使いたい場合、XmlDocumentで読み込まないといけないのかな?
0014デフォルトの名無しさん
2010/05/20(木) 20:22:200015デフォルトの名無しさん
2010/05/20(木) 22:38:490016デフォルトの名無しさん
2010/05/20(木) 23:36:020017デフォルトの名無しさん
2010/05/20(木) 23:38:260018デフォルトの名無しさん
2010/05/20(木) 23:54:210019デフォルトの名無しさん
2010/05/20(木) 23:59:290020デフォルトの名無しさん
2010/05/21(金) 00:01:25ユーザーに変な癖が付いてるのが最大のネックだと思います。
UACとか理解してくれるならありがたい機能をバシバシ使いますがな
それとベビーカーのCM?やってたけど多すぎると迷ったりするんですよ
あれこれ試す労力も大変なのでふら〜とこういとことで
何かいい方法な〜い?と愚痴をこぼすんですよ
0021デフォルトの名無しさん
2010/05/21(金) 00:08:580022デフォルトの名無しさん
2010/05/21(金) 00:11:12いまはそうしてるけど、せっかくVS標準のがあるんだから
あれが使えたらな〜って思ってさ
0023デフォルトの名無しさん
2010/05/21(金) 00:53:430024デフォルトの名無しさん
2010/05/21(金) 01:08:330025デフォルトの名無しさん
2010/05/21(金) 01:14:02(ProgramFiles以下にインストールした場合)
プログラマでもWin9x時代のラフな考え方をむしろ「俺はわかってるんだ」
みたいに勘違いしてる奴が未だに多いのは困ったもんだね
0026デフォルトの名無しさん
2010/05/21(金) 01:19:15世の中にはポータブル版っていうのがあるんだよ
0027デフォルトの名無しさん
2010/05/21(金) 01:34:520028デフォルトの名無しさん
2010/05/21(金) 01:41:51Program Files内にポータブル版をぶちこむのがそもそもの誤りだと気付けよww
0029デフォルトの名無しさん
2010/05/21(金) 02:14:23Program Files内に入れないといけないと勝手に思いこんでるのかw
どうしようもないなw
0030デフォルトの名無しさん
2010/05/21(金) 02:45:29ファイルを開く場所が前回開いた場所になってる
ちゃんとアプリごとに
OSがやってると思うんだけど、どこに設定保存してるんだろう?
0031デフォルトの名無しさん
2010/05/21(金) 02:58:550032デフォルトの名無しさん
2010/05/21(金) 03:04:30きちんと前にそのアプリで開いたファイルのフォルダを表示したから、OSが情報を保持してるはず
俺、開いた場所を保存して、次回起動時に読み込んでダイアログに設定するとか、どれ一つやってない
0033デフォルトの名無しさん
2010/05/21(金) 03:36:04C#だとファイルを開くダイアログの挙動が違うかも・・・
0034デフォルトの名無しさん
2010/05/21(金) 07:48:020035デフォルトの名無しさん
2010/05/21(金) 08:40:11XPは無視?
0036デフォルトの名無しさん
2010/05/21(金) 09:16:130037デフォルトの名無しさん
2010/05/21(金) 09:17:320038デフォルトの名無しさん
2010/05/21(金) 10:58:34Windows 95にもある。
0039デフォルトの名無しさん
2010/05/21(金) 10:59:18え?
0040デフォルトの名無しさん
2010/05/21(金) 11:02:51コモンファイルダイアログはシェルの管轄
最後に選択した場所の基本的に実行ファイル名で管理してるな
0041デフォルトの名無しさん
2010/05/21(金) 11:17:32え?
0042デフォルトの名無しさん
2010/05/21(金) 11:32:160043デフォルトの名無しさん
2010/05/21(金) 11:33:340044デフォルトの名無しさん
2010/05/21(金) 13:49:37○猿が居着いている
0045デフォルトの名無しさん
2010/05/21(金) 15:34:42つRestoreDirectory
0046デフォルトの名無しさん
2010/05/21(金) 15:46:27それ、ダイアログによって変更されるカレントディレクトリを元に戻すかどうかじゃね?
0047デフォルトの名無しさん
2010/05/21(金) 16:58:53o(´・ω・`)ぶつお
0048デフォルトの名無しさん
2010/05/21(金) 20:56:30一箇所C#での書き方があったので教えてください。
typedef struct _EWF_VOLUME_NAME_ENTRY
{
struct _EWF_VOLUME_NAME_ENTRY * Next;
WCHAR Name[1];
} EWF_VOLUME_NAME_ENTRY, *PEWF_VOLUME_NAME_ENTRY;
この構造体の定義をC#で書き直すとどのように書くのですか?
0049デフォルトの名無しさん
2010/05/21(金) 21:00:580051デフォルトの名無しさん
2010/05/22(土) 00:18:26大人ならやっぱり2次元配偶者だよな
0052デフォルトの名無しさん
2010/05/22(土) 10:29:05ListView + ListViewItemでは無理ですよね。
どこかにオープンソースなライブラリはないものでしょうか。
自前で作ると結構大変そうで・・・
0053デフォルトの名無しさん
2010/05/22(土) 13:40:28自分で描画部分を書くか
後はWPFへいくか・・・
0054デフォルトの名無しさん
2010/05/22(土) 14:25:03resultに結果を取得できる端末とは空文字列しか拾えない端末があります。
共にDOS窓でdirを実行したら、ディレクトリ情報は表示されます。
何か権限とかあるのでしょうか?
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
//ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
//出力を読み取れるようにする
psi.RedirectStandardInput = false;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
//ウィンドウを表示しないようにする
psi.CreateNoWindow = true;
//コマンドラインを指定("/c"は実行後閉じるために必要)
psi.Arguments = @"/c dir c:\ /w";
//起動
System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);
//出力を読み取る
string results = p.StandardOutput.ReadToEnd();
//WaitForExitはReadToEndの後である必要がある
//(親プロセス、子プロセスでブロック防止のため)
p.WaitForExit();
//出力された結果を表示
Console.WriteLine(results);
0055デフォルトの名無しさん
2010/05/22(土) 14:41:01とりあえず、名前付きパイプで同じ事しようと書き始めたけど、
起動中に、名前付きパイプを開っぱなしにしていいものかどうか
気になってきた。
具体的には、二重起動を禁止して、
後から起動されたプログラムのコマンドラインを取得したい。
0056デフォルトの名無しさん
2010/05/22(土) 14:45:35C#で同じことをやる方法がどこかに公開されてたはずだから、ググれば出てくるよきっと。
会社のブラウザにはブックマークしてあるんだが...
まあでも、スタートアッププロジェクトをVBにすれば妙な技巧を使う必要もないな。
0057デフォルトの名無しさん
2010/05/22(土) 15:00:030058デフォルトの名無しさん
2010/05/22(土) 15:00:22Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBaseの派生クラス作って
IsSingleInstanceとかコンストラクタで設定、
でApplication.Runの代わりにそいつのRunを使えばよい
005955
2010/05/22(土) 15:03:32ちょっと抵抗が・・・w
0060デフォルトの名無しさん
2010/05/22(土) 15:13:16問題:5個の値を入力してその中にひとつでも偶数があれば『偶』、奇数しかなければ『奇』と出力するプログラム
(※複数個の偶数があったとしても『偶』と表示するのは1回だけとする)
途中まではこんな風に書いてみたのですが
#include<stdio.h>
int main(void){
int x[5];
int i;
for(i=0;i<=4;i=i+1){
printf("x[%d]を入力してください。\n",i);
scanf("%d",&x[i]);
}
if (x[i] % 2 == 0){
printf("偶\n");
}
else{
printf("奇\n");
}
return 0;
}
0061デフォルトの名無しさん
2010/05/22(土) 15:16:02こちらへどうぞ
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
C言語なら俺に聞け(入門編)Part 64
http://pc12.2ch.net/test/read.cgi/tech/1273846013/
006255
2010/05/22(土) 15:16:26内部で名前付きパイプ使ってるとの情報がw
このまま、名前付きパイプでやってみます。
どうもでした。
0063デフォルトの名無しさん
2010/05/22(土) 16:22:23キモなんで、その必要がなければ名前付きパイプでも十分かもね。
0065デフォルトの名無しさん
2010/05/22(土) 18:04:11死亡フラグは立ってけど、スレはある
http://pc12.2ch.net/test/read.cgi/tech/1274423236/
006652
2010/05/22(土) 19:45:22なんかだめぽな感じですね・・・
こうまでマイクロソフトの凋落が激しいと逆に応援したくなります
Slievrlight3でデスクトップアプリもいける?ようなので、そっちを模索してみます。
結局、.net + C#のコントロールって従来のWindowsAPI準拠のものがほとんどですからね。
0067デフォルトの名無しさん
2010/05/22(土) 20:10:36デスクトップアプリはSilverlight4から
0068デフォルトの名無しさん
2010/05/22(土) 20:34:350069デフォルトの名無しさん
2010/05/22(土) 20:41:12JavaFXみたいにフェードアウトするよりはマシ
0070デフォルトの名無しさん
2010/05/22(土) 20:47:19#include <stdio.h>
int main(void){
int a,b=1,c;
for(c=0;c<5;c++)
{
printf("値を入力してください。\n");
scanf("%d",&a);
b*=(a%2);
}
printf((b==0)?"偶\n":"奇\n");
return(0);
}
0071デフォルトの名無しさん
2010/05/22(土) 21:08:255個全部andしてLSBが0なら偶数
0073デフォルトの名無しさん
2010/05/23(日) 11:50:390074デフォルトの名無しさん
2010/05/23(日) 11:52:192chだからって無理して面白くしようとか(いや全く面白くもなんともないが)
思わなくていいのに。
0075デフォルトの名無しさん
2010/05/23(日) 14:07:24それはない。
HTML5、標準ってのが強みでも弱みでもあって、
弱み的には、機能充実が遅すぎて Flash とか Silverlight の代替にはならない。
0076デフォルトの名無しさん
2010/05/23(日) 15:17:56・マルチプラットフォーム
・HTMLで画面デザインできる
ものとしてSilverlightに期待したい。
Adobeの開発環境は好きになれない。
特定のプラットフォーム依存のものは、もう未来がないと思う。
C# + .netはマルチプラットフォーム普及に失敗したので、
残念ながら、もう勉強する価値があると思えない。
培った技術は、Silverlightとかに受け継がれればよいけど。
0077デフォルトの名無しさん
2010/05/23(日) 15:29:22お前ん中ではな
0078デフォルトの名無しさん
2010/05/23(日) 15:33:230079デフォルトの名無しさん
2010/05/23(日) 15:41:28monoガン無視とは恐れ入る
・HTMLで画面デザインできる
ってのも意味不明だが。
0080デフォルトの名無しさん
2010/05/23(日) 15:42:45そんな遠い未来の話やら理想論を真面目に語られてもなあ
まあ学生さんはがんばってねとしか
0081デフォルトの名無しさん
2010/05/23(日) 15:49:090082デフォルトの名無しさん
2010/05/23(日) 15:56:39>まあ学生さんはがんばってねとしか
あるあるw
HTML界隈はそういうの本当に多かった。
0083デフォルトの名無しさん
2010/05/23(日) 16:12:58HTML5だってまたどーせブラウザ依存でgdgdだよ
船頭多くて上手く行った例なんか見たことないわ
0084デフォルトの名無しさん
2010/05/23(日) 16:47:43例えばFileIOPermissionが制限されたサンドボックスのTransparentコードから
SafeCritical/Criticalのアセンブリへの遷移してFileIOを行う場合に、
遷移したことで自動的に完全信頼になりファイル操作が出来るようになるのか、
Assertが必要なのかこの辺はどうなのでしょう。
0085デフォルトの名無しさん
2010/05/23(日) 17:10:57()笑
0086デフォルトの名無しさん
2010/05/23(日) 17:42:47キャプチャ時にウィンドウに画像を被せるとかのマスク処理をしたいです。
(Acrobatで同じようなことをやってると思います)
.NETで画面キャプチャイベント拾えないかなぁと探してるんですが、
それっぽい情報に見あたらないです。
何かやりようがありますでしょうか。
0087デフォルトの名無しさん
2010/05/23(日) 18:02:59それ抜け道たくさんあるからやるだけ無駄だよ
0088デフォルトの名無しさん
2010/05/23(日) 18:07:55例えばどんなのです?
0089デフォルトの名無しさん
2010/05/23(日) 18:17:530090デフォルトの名無しさん
2010/05/23(日) 18:22:58flashゲームなどのチートの際に使うツールは別プロセスのメモリ
覗き放題だしねえ
windowsで完璧なプロテクトは無理と思ったほうがいいよ
0091デフォルトの名無しさん
2010/05/23(日) 18:36:18OSが頑張って保護している地デジを表示しているWMCの画面も
キャプチャできるアプリがあるのにどうやってブロックできると思うんだ?
0092デフォルトの名無しさん
2010/05/23(日) 18:43:42うーん、じゃあ例えば、クローズドな社内システムか何かで、
ユーザが勝手にソフトやツールを追加できないって前提ならどうでしょう。
0093デフォルトの名無しさん
2010/05/23(日) 18:46:550094デフォルトの名無しさん
2010/05/23(日) 18:53:16それに最近のマシンはディスプレイアウトが高画質だし
それ経由で簡単にキャプチャできちゃうからフック系だけ気に
してればいいわけじゃないしね
あと>>89のようなのもあるしw
0095デフォルトの名無しさん
2010/05/23(日) 19:03:080096デフォルトの名無しさん
2010/05/23(日) 19:10:130097デフォルトの名無しさん
2010/05/23(日) 19:15:17カメラで撮ったらまともに見れないようにしてるというものがあったと思った。
0098デフォルトの名無しさん
2010/05/23(日) 19:36:02(>_<) …
0099デフォルトの名無しさん
2010/05/23(日) 20:14:37それは実験段階で、導入した劇場はまだなかったはず。
うちの会社はデジカメ持ち込み禁止。カメラ付き携帯も禁止で、入社すると強制的に機種変させられる。
0100デフォルトの名無しさん
2010/05/23(日) 20:20:47カメラなし携帯探すの大変じゃね?w
0101デフォルトの名無しさん
2010/05/23(日) 20:23:36プリンタ出力禁止とかUSB書き込み禁止するシステムは結構あるけど
デジカメ阻止するようなのはあんまりないね。
0102デフォルトの名無しさん
2010/05/23(日) 20:37:04切り替えるような仕組みを作ればいいんじゃね?
0103デフォルトの名無しさん
2010/05/23(日) 20:41:33僕もいつかは皆さんのような高度な話題を展開できるようになりたいと思います。
0104デフォルトの名無しさん
2010/05/23(日) 20:47:58OSやソフトじゃなくモニタにつけるスクリーンやシートの役割じゃね?
0105デフォルトの名無しさん
2010/05/23(日) 21:35:05手書きのメモとか脳内コピーはどうしようもないよな
0106デフォルトの名無しさん
2010/05/23(日) 21:35:58Web カムで顔認識して PC の前に人がくるとメール飛すアプリは公開されてたな。
0107デフォルトの名無しさん
2010/05/23(日) 21:49:37まあ、悪意あるヤツはどう防御線張っても乗り越えて盗むってことだな。
ソフトやハードでは、悪意無く漏洩してしまう場合の対策だろうな。
0108デフォルトの名無しさん
2010/05/23(日) 22:26:36ものすごく選択肢が狭くなるけど、あることはある。
だから同期はほとんどみんな同じ機種。区別するためにストラップ必須。
0109デフォルトの名無しさん
2010/05/23(日) 22:27:20まだ導入されてないのか。
映画を見るたびにミスターVTRが出てくるのが鬱陶しく思うんだよね。
0110デフォルトの名無しさん
2010/05/23(日) 22:39:14もしITの仕事についててスマホが使えないってのは勿体無いと思うんだが、
難しいところだよな。。。
0111デフォルトの名無しさん
2010/05/23(日) 23:00:11と言おうと思ったがAeroだとオーバーレイそのものがなかったでござるの巻
0112デフォルトの名無しさん
2010/05/23(日) 23:07:15トヨタ?
0113デフォルトの名無しさん
2010/05/23(日) 23:20:22urlを指定して取得することはできたのですが、ajaxによって送信されてくるデータを取得できなくて困っています。
post形式でデータを送信していることはfirebugを使ってわかっているのですが、
どうすればそのpostデータを使ってxmlを取得できるのかがわかりません。
WebClient wc = new WebClient();
byte[] res_data = wc.UploadValues(url, post);
こんな感じでやってみたところできませんでした。
たぶん使うメソッドが間違っていると思うのですが、何を使えばいいのかわかりません。
どなたかよろしくお願いします。
0114デフォルトの名無しさん
2010/05/23(日) 23:21:08ハメ技に陥るんじゃないか?
0115デフォルトの名無しさん
2010/05/23(日) 23:26:29http://www.atmarkit.co.jp/fdotnet/dotnettips/318webpost/webpost.html
0117デフォルトの名無しさん
2010/05/23(日) 23:27:460118デフォルトの名無しさん
2010/05/23(日) 23:31:13ajaxって言ってるから、多分JSONかSOAPでWSDLのどちらか。とか知ったかしてみよう。
0120デフォルトの名無しさん
2010/05/23(日) 23:39:36C#でpostして、そのレスポンスが欲しいってことかな?
Ajaxっても、普通のHTTPのpost通信だから、
HTTPリクエストとHTTPレスポンスを使ったらできないかな?
見当違いのこと言ってたらゴメン。
0121デフォルトの名無しさん
2010/05/23(日) 23:40:46ああ、逆にザルのパターンだなそれ
セキュリティについてまじめに取り組まないからそんな雑なことになってる
0122デフォルトの名無しさん
2010/05/23(日) 23:43:59POST すれば行けるはずなのに wc.UploadValues で行けない場合、
ひょっとしたら文字コードの問題かも。
WebClient の UploadValue は utf8 でしか URL エンコーディングしてくれない。
sjis とか euc の場合は ↓ とかを参照。
http://dobon.net/vb/dotnet/internet/webrequestpost.html
0123113
2010/05/24(月) 00:00:53皆様アドバイスありがとうございました。
無事取得することができました。
どうやら問題は122さんがおっしゃっていた通り文字コードでした。
本当にありがとうございました。
0124デフォルトの名無しさん
2010/05/24(月) 09:02:14悪意のある人間に対しては何をやっても無駄な気がする。
0125デフォルトの名無しさん
2010/05/24(月) 09:38:11そこから踏み込んでくるやつは仕方ない
0126デフォルトの名無しさん
2010/05/24(月) 22:16:14そこらへんに落ちてるツールで攻撃してくるようなのをはねるだけでも
充分な効果があると思うぜ
0127デフォルトの名無しさん
2010/05/24(月) 22:36:070128デフォルトの名無しさん
2010/05/24(月) 22:38:330129デフォルトの名無しさん
2010/05/24(月) 22:40:420130デフォルトの名無しさん
2010/05/24(月) 22:41:16さがしてきたぞー VB.netだけど
ttp://www.codeguru.com/vb/gen/vb_system/keyboard/article.php/c4831
0131デフォルトの名無しさん
2010/05/24(月) 22:44:250132デフォルトの名無しさん
2010/05/24(月) 22:47:230133デフォルトの名無しさん
2010/05/24(月) 23:10:090134デフォルトの名無しさん
2010/05/25(火) 00:10:12れべるのたかいぷろぐらむだんぎですね
0135デフォルトの名無しさん
2010/05/26(水) 00:02:51foreachじゃなくてforでCount分だけ回して削除した時だけi--するっていうのが一般的ですかね?
0136デフォルトの名無しさん
2010/05/26(水) 00:04:190137デフォルトの名無しさん
2010/05/26(水) 00:06:480138デフォルトの名無しさん
2010/05/26(水) 00:11:55どちらにせよforで泥臭くやるんですね。
もっとスマートなやり方が無いのか気になっただけでした。
0139デフォルトの名無しさん
2010/05/26(水) 00:13:25>>137
0140デフォルトの名無しさん
2010/05/26(水) 00:13:48としているが問題はない。(作りによるかもしれないが)
0141デフォルトの名無しさん
2010/05/26(水) 00:16:06もしくはdeleteifみたいなのとか。
0142141
2010/05/26(水) 00:17:180143デフォルトの名無しさん
2010/05/26(水) 00:18:42>>137さんありがとうございます。
0144デフォルトの名無しさん
2010/05/26(水) 00:21:43要素全部消すみたいに思えるじゃん
0145デフォルトの名無しさん
2010/05/26(水) 00:21:490146デフォルトの名無しさん
2010/05/26(水) 00:24:53まあClearがあるからなあ
0147デフォルトの名無しさん
2010/05/26(水) 00:29:00みたいな機能があるのかな?と思った
それにしてもなんで"All"なんだ
0148デフォルトの名無しさん
2010/05/26(水) 00:31:16Clearはリスト全部切り離すはずだよw
Removeは指定した物をRemoveAllは該当するもの全部ってことじゃないの?
0149デフォルトの名無しさん
2010/05/26(水) 00:32:440150デフォルトの名無しさん
2010/05/26(水) 00:38:290151デフォルトの名無しさん
2010/05/26(水) 00:47:30目から鱗です
0152デフォルトの名無しさん
2010/05/26(水) 01:13:50Clearの立場は・・・
0153デフォルトの名無しさん
2010/05/26(水) 01:41:370154デフォルトの名無しさん
2010/05/26(水) 02:02:530155デフォルトの名無しさん
2010/05/26(水) 02:05:38肝心の「該当するもの」って部分が欠けてるだろw
0156デフォルトの名無しさん
2010/05/26(水) 02:31:030157デフォルトの名無しさん
2010/05/26(水) 04:49:580158デフォルトの名無しさん
2010/05/26(水) 05:13:25ISet<T>(HashSet&SortedSet) … RemoveWhere
リストと辞書がRemoveAllなのは過去のバージョンとの整合性もあって仕方ないか。
0159デフォルトの名無しさん
2010/05/26(水) 07:01:460160デフォルトの名無しさん
2010/05/26(水) 12:26:420161デフォルトの名無しさん
2010/05/26(水) 12:37:48ほんとはList<T>のFind**/Exists/TrueForAllあたりも
LINQが無かったころの遺物なので(実際Silverlightでは削除)軒並みObsoleteにするべき
0162デフォルトの名無しさん
2010/05/26(水) 12:55:070163デフォルトの名無しさん
2010/05/26(水) 13:03:460164デフォルトの名無しさん
2010/05/26(水) 20:47:24抜けているようには思えないが....
0165デフォルトの名無しさん
2010/05/26(水) 20:48:460166デフォルトの名無しさん
2010/05/26(水) 20:58:42でもIndexOfと違ってRemoveAllだけでも意味が通っちゃうから
インテリセンスやMSDNで名前だけ並ぶとわかりづらいな
0167デフォルトの名無しさん
2010/05/27(木) 00:27:26やりたい事は、
複数のListViewがあり、それぞれで複数の項目(item)を選択した状態を作りたいです。
4つほどのListViewを作り、それぞれで1,2項目、合わせて6ー8項目を選択して、ボタンを押したら、それに見合うデータを取得するというイメージです。
先程、作ってみた所、ListViewのフォーカスを別のListviewに移すと、それまで選択した項目が ”非選択" になってしまいます。
こうならない方法はないでしょうか?
場違いな質問という事であれば、他のスレッドを紹介していただけると助かります。
microsoft visual c# 2008 expressを使い始めて3日目で、
今までは 簡単なscript(ruby, javascript)を書いた経験があるくらいです。
ピントがずれてるのかもしれませんが、よろしくお願いします。
0168デフォルトの名無しさん
2010/05/27(木) 00:33:43保持する設定
0170デフォルトの名無しさん
2010/05/27(木) 00:42:25HideSelectionをtrueにすると強調表示なし
falseにすると強調表示あり
0171167
2010/05/27(木) 00:48:04確かに HideSelection を falseにしたところ、選択した後が残ってました。
今から、listView2.SelectedItemsで選択したitemが取れるか確認します。
0172167
2010/05/27(木) 00:52:13おかげで一歩前進しました。
ありがとうございました。
0173デフォルトの名無しさん
2010/05/27(木) 06:09:08しかし、イベントハンドラの中で変更されたファイルを読み取ろうとすると、TargetInvocationExceptionが発生します。
new StreamReader(e.FullPath)の部分で例外が出てしまうのですが、どうすれば読み取れるでしょうか?
■ソース
private void watcher_Changed(System.Object source, System.IO.FileSystemEventArgs e){
using (StreamReader sr = new StreamReader(e.FullPath)){
}
}
0174デフォルトの名無しさん
2010/05/27(木) 07:47:04ファイルの監視とかなら、FileSystemWatcherじゃないの?
使ったことないけど
0175デフォルトの名無しさん
2010/05/27(木) 08:34:430176デフォルトの名無しさん
2010/05/27(木) 11:05:050177デフォルトの名無しさん
2010/05/27(木) 11:12:11TargetInvocationExceptionのInnerExceptionは?
ファイルを変更してるプログラムがまだロック中なんじゃない?
0178デフォルトの名無しさん
2010/05/27(木) 18:31:18できましたありがとう。
using(FileStream fs = new FileStream(e.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using(StreamReader sr = new StreamReader(fs)){
string strLine = sr.ReadLine();
以下省略・・・
0179デフォルトの名無しさん
2010/05/28(金) 18:54:050180デフォルトの名無しさん
2010/05/28(金) 20:47:53これをlistviewでやりたいんですが、どのように実装すれば良いでしょうか?
VisualStudio2008を使っています。
■イメージ
名前 詳細1 詳細2 詳細3
test1 あ い う
test2 か き く ←この行でマウスホバーされたら名前と詳細1の内容から、表示する内容を決める
test3 さ し す
0181デフォルトの名無しさん
2010/05/28(金) 20:50:39マウス関連のイベントでマウスが乗っかって停止したら〜とかあったはず
それで任意のコントロールで表示すればいいだけちゃうの?
0182デフォルトの名無しさん
2010/05/28(金) 21:08:22自分でマウスホバーと書いておいて申し訳ないんですが
MouseHoverのイベントを使用すると、かなり重いんです。
中で何も処理をしなくてもかなり重くなってしまいます。
0183デフォルトの名無しさん
2010/05/28(金) 21:49:35そんなに重かったっけ?
まあ何もしないってのよりはそりゃ処理するので負荷は増えるだろうけどさ
0184デフォルトの名無しさん
2010/05/28(金) 22:08:000185デフォルトの名無しさん
2010/05/28(金) 23:14:30ストレスを感じるくらいには重いです。
ボタン押下時に多少重くなるのはいいんですが、カーソルを移動させただけで重くなるのは避けたいです。
>>184
アドバイスありがとうございます。
わからない点があるので、わかるようでしたら教えてください。
■不明点
・マウスがListViewのどの行の上にあるのか取得できるか?(選択させるわけではないのでselectedではありません
・行ごとに説明文を変える事ができるのか?
0186デフォルトの名無しさん
2010/05/28(金) 23:33:11これではどう?
http://dobon.net/vb/dotnet/control/lvitemtooltip.html
0187デフォルトの名無しさん
2010/05/29(土) 00:05:14完璧です。
ありがとう。
0188デフォルトの名無しさん
2010/05/29(土) 01:10:17はやくリリースビルドで速度を確認する作業に入るんだ。
解決したらしいが。。。
0189デフォルトの名無しさん
2010/05/29(土) 02:44:47http://sourceforge.jp/projects/freetrain-exav/
(最新βが2.1.1.5で、ソースは直下trunk/以下が該当します)
パラメータをリアルタイム表示するウィンドウを追加して行ってたら、データセーブ時に特定の
ウィンドウをあけっぱなしているとエラーが起こるようになってしまいました。
>アセンブリ 'FreeTrain.Core, Version=2.1.1.5, Culture=neutral, PublicKeyToken=null' の型
> 'freetrain.world.rail.StationInformationWindow' はシリアル化可能として設定されていません。
データのセーブロードはBinaryFormatterを使ったシリアライズでしています。
ウィンドウのFormをシリアライズしようとしてるわけではなく、パラメータの変化をイベント起こして
もらって表示をリフレッシュするために使ってるイベントハンドラが参照を呼んでこのウィンドウ
のシリアライズをしたがっているみたいなのです。
core/world/rail/Station.csが駅本体部分で、ここでイベントの宣言を
public delegate void StationCounterListener();
public StationCounterListener onStationChange;
とやってて、駅に乗降があったときにonStationChange();してます。
パラメータを表示してるウィンドウはcore/controllers/rail/StationInformationWindow.csで
public StationInformationWindow( Station st ) {
this.station = st;
InitializeComponent();
onUpdate();
station.onStationChange += new StationCounterListener(onUpdate);
}
ここでstation.onStationChange += の行をコメントアウトするとエラーがなくなります。
しかし他にもイベントハンドラでリアルタイム書き換えしてるウィンドウ多数あるのにエラーに
なってなくて、なぜこのウィンドウだけなるのかが分からないのです。
0190デフォルトの名無しさん
2010/05/29(土) 03:32:300191デフォルトの名無しさん
2010/05/29(土) 03:34:38今まで使ってた自作Loggerクラスはstaticなメソッドを一発呼ぶだけ、みたいな感じにしてたんだけど
log4netだとGetLogger呼ぶ時の引数がやっかいで、簡単に自作クラスでラップできそうにないし・・・
全クラスの先頭に
private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
とかうめこんで
loger.Error("えらー");
とかめんどくさいなぁ。
この辺どうやって解決してます?
それともNLog使ってる人のが多い?
0192デフォルトの名無しさん
2010/05/29(土) 03:56:56TraceListenerで十分だから、そんなもん使わん
0193デフォルトの名無しさん
2010/05/29(土) 07:15:23checkedListboxではできないのでしょうか?
もしできるようならそっちもいろいろやってみたいのですが
MSDNを見てもそれらしいプロパティが存在しないみたいなんです。
0194デフォルトの名無しさん
2010/05/29(土) 08:36:30tooltip使ってみたけどcheckedListbox全体ででちゃうな
個別はできなかった
0195デフォルトの名無しさん
2010/05/29(土) 08:42:212chの通信をモニターするだけのソフトを作りたいんですが
参考になるような情報を扱ってるサイトをご存知ないでしょうか?
もしくはヒントでもかまいません
0196デフォルトの名無しさん
2010/05/29(土) 08:53:49>186の1.1以前と同じやり方でやればいいよ
GetItemAtの代わりにIndexFromPoint使って
0197デフォルトの名無しさん
2010/05/29(土) 08:58:15#include <shobjidl.h>
#include <shlguid.h>
はC#だと何になるのでしょうか?
0198デフォルトの名無しさん
2010/05/29(土) 09:04:20どのインターフェイスを使いたいのさ
0199197
2010/05/29(土) 09:06:29ショートカットのリンク先を取得するのにusingが分かりません
0200デフォルトの名無しさん
2010/05/29(土) 09:09:01usingを知りたいのはわかるw
ヘッダーよりどの関数の代わりかで聞いたほうがいいよ
0201189
2010/05/29(土) 09:29:35こんなかんじです
private void onUpdate(){
// initialize the dialog
nameBox.Text = station.name;
label_loaded.Text = string.Format("{0} / {1}",station.LoadedToday,station.LoadedYesterday);
label_unloaded.Text = string.Format("{0} / {1}", station.UnloadedToday, station.UnloadedYesterday);
label_trains.Text = string.Format("{0} / {1}", station.TrainsToday, station.TrainsYesterday);
label_waiting.Text = string.Format("{0} / {1}",station.WaitingPassengers, station.population);
label_entering.Text = string.Format("{0} / {1}",station.WantEntering, station.entering);
label_LastUnloded.Text = station.lastUnloaded.ToString();
}
0202デフォルトの名無しさん
2010/05/29(土) 10:04:45using Shell32;
で、Z:\Hoge.lnkのリンク先を得るコードはこんな感じ。
ShellFolderItemを直接得る方法があればいいんだけど、それは分からん。
Shell sh = new Shell();
Folder f = sh.NameSpace(@"Z:\");
foreach (ShellFolderItem i in f.Items())
{
if (i.IsLink && i.Path == @"Z:\Hoge.lnk")
{
Console.WriteLine(((ShellLinkObject)i.GetLink).Target.Path);
}
}
0204デフォルトの名無しさん
2010/05/29(土) 11:28:09それに使ってるプロパティのどれかが内部的にシリアライズ使ってるか、
どっかでシリアライズしてるのがたまたま其処で発狂するかのどっちかだな
てか何処でエラー起こってんのよ?
newしてるとこじゃないんだろ
0205197
2010/05/29(土) 12:12:10ありがとうございます
試してみたところ
エラー 1 型または名前空間名 'Shell32' が見つかりませんでした。
とエラーがでてしまいます。
0206デフォルトの名無しさん
2010/05/29(土) 13:07:35ちゃんと参照設定してないだろそれ
usingのことじゃないぞ>参照設定
0207デフォルトの名無しさん
2010/05/30(日) 00:51:070208デフォルトの名無しさん
2010/05/30(日) 18:21:20どのようにwaitをかければ良いでしょうか
ttp://ideone.com/NZMm7
0209デフォルトの名無しさん
2010/05/30(日) 18:42:43Dispatcher通せば別スレッドからアクセスできるよ。
0210デフォルトの名無しさん
2010/05/30(日) 19:08:07System.Windows.Timerを使えばいい。
0211デフォルトの名無しさん
2010/05/30(日) 19:54:560212デフォルトの名無しさん
2010/05/30(日) 19:56:20Invokeしろって意味じゃないのか?
0213デフォルトの名無しさん
2010/05/30(日) 19:59:38スレッドを止めたいときは別のスレッドを作る
0214デフォルトの名無しさん
2010/05/30(日) 21:09:56BackgroundWorkerを使って別スレッドにしてみましたが結局UIを触るなってことらしく
にっちもさっちも行きません
Thread.Sleepで止めて、その間UIを触れないようにしました
0215デフォルトの名無しさん
2010/05/30(日) 21:17:29ループはいらん
0216デフォルトの名無しさん
2010/05/30(日) 21:42:04どこを参照してそのような知識を得たのか晒してみるといいよ
0217デフォルトの名無しさん
2010/05/30(日) 21:51:58入力速度の揺らぎを再現しようとすると、綺麗に纏まらないな
勿論、それくらいやるよね>>208
0218デフォルトの名無しさん
2010/05/30(日) 21:55:56短い間隔で頻繁にコールバックかけて時間測るようにするだろ
ゲームみたいに自分でメッセージループ回してもいい
0219デフォルトの名無しさん
2010/05/30(日) 22:03:16だからDispatcher使えって。
別スレッドから、「UIスレッドでこの処理実行してくれ」ってお願いする機能。
0220デフォルトの名無しさん
2010/05/30(日) 22:07:380221デフォルトの名無しさん
2010/05/30(日) 22:08:55普通DispatcherというとSystem.Windows.Threading.Dispatcherだが、
WinFormの話でそんなんだされても困る
0222デフォルトの名無しさん
2010/05/30(日) 22:13:49さすがに素人でも214の処理はまずいと思いましたのでTimerを使ってみました
http://ideone.com/za8su
期待通りの動きといえば期待通りなのですがどうでしょうか
0223デフォルトの名無しさん
2010/05/30(日) 22:18:26あー、Control.Invoke (Delegate) のことね。
0224デフォルトの名無しさん
2010/05/30(日) 23:19:51なんかおかしくね?
0225デフォルトの名無しさん
2010/05/31(月) 00:17:46クリックするたびにTickのイベントハンドラが増えるとか、
TypeWriter()の引数を使っていないとか、
typewriterは1単語だからケースがおかしいとか?
0226デフォルトの名無しさん
2010/05/31(月) 00:20:47やさしいなw
0227デフォルトの名無しさん
2010/05/31(月) 00:29:160228デフォルトの名無しさん
2010/05/31(月) 00:35:42フォルダ名を文字列で直接指定する代わりに変数を与えればいいだけ
0229デフォルトの名無しさん
2010/05/31(月) 00:35:420230デフォルトの名無しさん
2010/05/31(月) 00:44:24すいません
それがうまくいかなくて…
>>229
例えば「5」と入力したらフォルダ1、フォルダ2、…、フォルダ5というようにフォルダを作りたいので
0231デフォルトの名無しさん
2010/05/31(月) 00:49:00for (int i = 1; i <= 5; i++) {
string folder = string.Format("フォルダ{0}", i);
}
0232デフォルトの名無しさん
2010/05/31(月) 00:50:03それは「変数をフォルダ名にする」じゃ言葉足らずもいいとこだろ。
var path = Path.Combine(basePath, string.Format("フォルダ{0}", i);
Dicretory.CreateDirectory(path);
とかでもダメ?
0233デフォルトの名無しさん
2010/05/31(月) 00:54:08>>232
ありがとうございます
試してみます
0234デフォルトの名無しさん
2010/05/31(月) 10:28:12ゲーム作るつもりなら最終的には自分でメッセージループ回すことになると思うぞ
0235デフォルトの名無しさん
2010/05/31(月) 15:06:34どのように取得するのでしょうか?
0236デフォルトの名無しさん
2010/05/31(月) 15:41:05どうしてもやりたかったらビルド前のコマンドでコード生成
0237デフォルトの名無しさん
2010/05/31(月) 17:43:21ありがとう
0238デフォルトの名無しさん
2010/05/31(月) 23:18:02internal static class VersionInfo { public const string Date = "2010/05/31"; }
こういうのを生成してcsファイルに保存する処理をスクリプトかなんかで書いてビルド前イベントで呼ぶだけ
0239デフォルトの名無しさん
2010/06/01(火) 00:56:560240デフォルトの名無しさん
2010/06/01(火) 04:51:570241デフォルトの名無しさん
2010/06/01(火) 15:22:12__DATE__みたいなオモチャ使わず各自で好きにやるのが普通だと思ってるんだろうな
0242デフォルトの名無しさん
2010/06/01(火) 16:22:490243デフォルトの名無しさん
2010/06/01(火) 16:50:03[assembly:CompileDate("2010/05/31")]みたいな
どっちみちコード生成が必要だから>>238の方が楽
0245デフォルトの名無しさん
2010/06/01(火) 19:50:35まじかよw
これまでの作業量について考えるのだけはやめておくんだ!これからが大事!な!
0246デフォルトの名無しさん
2010/06/02(水) 05:36:500247デフォルトの名無しさん
2010/06/02(水) 08:58:57あまりにも調べが足りなさすぎるがこれも勉強だw
0248デフォルトの名無しさん
2010/06/02(水) 10:55:140249デフォルトの名無しさん
2010/06/02(水) 13:09:26.NET3.5でWindowsフォームアプリケーションを作成しています。
Webカメラやリモートカメラなどの映像を取り込み、その映像をリアルタイムにフォーム内に表示したいのですが、
可能でしょうか?
「webカメラ キャプチャ」等のワードで検索しても良い資料が見つからなかったので、
どなたか良い方法をご教授ください…
0250デフォルトの名無しさん
2010/06/02(水) 13:34:04DirectShow辺りに答えがあるんじゃないかな?
あと、ヒントならGraphEditPlusというツールを使うのもありかも。
0251デフォルトの名無しさん
2010/06/02(水) 13:51:48普通に使える
0252251
2010/06/02(水) 14:00:170253デフォルトの名無しさん
2010/06/02(水) 14:38:34機器との通信により得られた16進数の浮動小数点データ形式文字列を、
10進数にしてを表示するプログラムを作成したいのですが、よい方法はないでしょうか?
<例>受信データ:42C80000 出力:100.0
といったものを作りたいのです。
なお、受信データを文字列に変換するところまでは、できています。
0254デフォルトの名無しさん
2010/06/02(水) 14:49:05int n = Convert.ToInt32("42C80000", 16);
intを浮動小数点に変換
float f = BitConverter.ToSingle(BitConverter.GetBytes(n), 0);
100.0のような書式で出力するのはわかるよね?
0255デフォルトの名無しさん
2010/06/02(水) 15:00:180256デフォルトの名無しさん
2010/06/02(水) 15:01:560257253
2010/06/02(水) 15:29:16できました。
ようやくConvert.ToInt32の意味がわかりました。
どうもありがとうございます。
0258デフォルトの名無しさん
2010/06/02(水) 20:34:47フォーム内のコントロールで TabIndex が一番若い番号のコントロールを
簡単に知る方法はないでしょうか?
現在複数のフォームを使うアプリを書いているのですが、
インスタンス化の処理が結構重い(DBから情報ひっぱってきてコントロールを沢山つくる)ので
フォームのインスタンスを使いまわすことにしました。
Close() のかわりに Hide() を使ったまではいいのですが、
再度表示したときに当然のごとくフォーカスの位置が前回と同じなままになってしまいます。
ロードイベントあたりで先頭のコントロールに対して Select() を使って対処していますが、
コントロール名をハードコーディングしているのでデザイナでの TabIndex 変更に追従出来ていません。
0259デフォルトの名無しさん
2010/06/02(水) 20:45:33意味がわかりません
0260デフォルトの名無しさん
2010/06/02(水) 20:56:45動的なフォーム構築で追加したコントロールのTabIndex再設定ができません、と聞こえる。
手を抜かないでFormのControlsを回して設定し直せばいいんじゃね?
0261258
2010/06/02(水) 21:04:19TabIndex が一番若いコントロールを決めうちして
Load イベントで直接 Select() しちゃっています。
デザイナで順番かえたりした場合は一々 Select() を呼び出すコントローラーを変更しています。
>>260
全部を動的に追加しているわけじゃなく、いくつか固定で置いてあるものもあるんですが、
動的フォーム構築をする場合って全部の TabIndex をコードビハインド側でふりなおすのが普通なんでしょうか?
その場合ってデザイナ側での並び順がかわったら一々コードも修正しないといけないですよね?
0262デフォルトの名無しさん
2010/06/02(水) 21:08:09ありがとうございます
0263デフォルトの名無しさん
2010/06/02(水) 21:08:450264デフォルトの名無しさん
2010/06/02(水) 21:13:57AVIファイル形式での作成の仕方はサンプルみつけたんだけど、
WMVもしくはMP4で作成できる人いる?
AVI形式はサイズが大きすぎて、、、小さくしたいんだよね。
0265デフォルトの名無しさん
2010/06/02(水) 21:20:46そういうのはC#にこだわらずにC++のコードとか漁らないと
0266258
2010/06/02(水) 21:22:48フォームの VisibleChanged イベントハンドラで自分自身に対して SelectNextControl() を使うことで
希望の動作となりました。
0267デフォルトの名無しさん
2010/06/02(水) 21:33:450268デフォルトの名無しさん
2010/06/02(水) 21:36:45子のコードは信じられない。
0269デフォルトの名無しさん
2010/06/02(水) 21:50:28タブ順はデザイナーで管理したい、って話じゃないの?
俺はそういうのはデザイナ側で完結してないと気持ちわるいけどな。
WPF万歳だよほんと。
0270デフォルトの名無しさん
2010/06/02(水) 21:53:20まータブ順変更しただけでコード書き換えなきゃいけないような実装はタコだと思うけど。
0271デフォルトの名無しさん
2010/06/02(水) 22:00:380272デフォルトの名無しさん
2010/06/02(水) 22:13:29C#ユーザーってもっとミーハーが多いのかと思ってた
0273デフォルトの名無しさん
2010/06/02(水) 22:16:09SilverLightがなければやろうと思わなかった
0274デフォルトの名無しさん
2010/06/02(水) 22:19:16ほんとにやってんの?
0275デフォルトの名無しさん
2010/06/02(水) 22:21:09実装差違とかあるのもわかってるよ
どっちかといえばsilverlightのついでにWPFやる感じ
0276デフォルトの名無しさん
2010/06/02(水) 22:21:360277デフォルトの名無しさん
2010/06/02(水) 22:24:340278デフォルトの名無しさん
2010/06/02(水) 22:26:380279デフォルトの名無しさん
2010/06/02(水) 22:31:28XAMLなんかDesigner.csをXMLにしただけのもの
触りたくなけりゃ触らなくてもデザイナ任せでWinForms程度のUIは作れる
0280デフォルトの名無しさん
2010/06/02(水) 22:32:19動かすと「URLが正しくないため、読み込めませんでした」。
エクスプローラからダブルクリックしても全く動かない。
0281デフォルトの名無しさん
2010/06/02(水) 22:34:02winformでも同じような仕組み作れるよ
Formにwebbrowser貼り付けてそこへ起動時にhtmlコード入れて
webbrowserのどれがクリックされたとかイベント処理すればOK
0282デフォルトの名無しさん
2010/06/02(水) 22:34:120283280
2010/06/02(水) 22:42:260284デフォルトの名無しさん
2010/06/03(木) 01:14:15タブによって英数字と平仮名のキー分けてをそれぞれ実装しています
ある文字ボタン(ここでは「か」と書かれたボタン)を押すとイベントが発生し、以下のような処理を行います。
private void buttonH_SA_Click(object sender, EventArgs e) {
SendKeys.SendWait("ka"); //"平仮名の「か」を送りたい
}
このようにして、ソフト上でキーボードを実現したいのですが、
例えばメモ帳アプリケーションに対してこのような処理を実行すると、"か"ではなく"ka"としか表示されません。
なんとかして、メモ帳に"ka"ではなく"か"と表示させることはできないのでしょうか?
対象テキストボックスのImeModeプロパティが弄れたらいいのだけれどもそれは無理ですし…
何か良い方法があればご教授下さい。
よろしくお願いします。
0285デフォルトの名無しさん
2010/06/03(木) 07:01:55でいかんのか?
0286デフォルトの名無しさん
2010/06/03(木) 10:42:43それは試しましたが、確かに「か」と出力されます。
しかし未変換の状態で出力されてほしいのです。(文字に下線がついて出力されるように)
その方法では既に確定した状態で出力されてしまいます。
0287デフォルトの名無しさん
2010/06/03(木) 11:06:270288デフォルトの名無しさん
2010/06/03(木) 11:55:11大丈夫です
0289デフォルトの名無しさん
2010/06/03(木) 14:22:47ならWin32 APIのSendInputを呼び出すんだな。
IMEがMS IMEなら下線付きで送信される。でも残念ながらATOKは確定済みで送信される
0290デフォルトの名無しさん
2010/06/03(木) 14:27:220291デフォルトの名無しさん
2010/06/03(木) 15:43:17これにIMEの制御つけるだけじゃないの?
0292デフォルトの名無しさん
2010/06/03(木) 16:14:03Imm系がそれだったような気もするが詳しくは知らん
てか情報なさ過ぎ
0293デフォルトの名無しさん
2010/06/03(木) 16:17:15それより問題なのがOSがvista以降くらいになると
IME関連の制御が違うとかどうのって記述を見かけたたんだよな・・・
0294デフォルトの名無しさん
2010/06/03(木) 17:53:48これだな ttp://social.technet.microsoft.com/forums/ja-JP/windowsvistasoftwareja/thread/973a7407-5ddb-4b34-9aea-0fb36f762cf4/
VistaからTextServicesFramework、略してTSFなるものに変わったらしい
まったく毎度毎度要らんことしてくれるわM$さんはよう
0295デフォルトの名無しさん
2010/06/03(木) 18:06:11それそれ
MS関連でタッチパネル系デバイスが普及しないのは
そういうところなんだよね〜
0296デフォルトの名無しさん
2010/06/03(木) 18:39:37かんけーねーし、
そもそも携帯電話以外で巷にあふれているタッチパネルのデバイスの大半はMSのOS使っているだろ。
0297デフォルトの名無しさん
2010/06/03(木) 18:42:340298デフォルトの名無しさん
2010/06/03(木) 18:49:58ニートは言うことが面白い。
0299デフォルトの名無しさん
2010/06/03(木) 19:07:43WindowsMobileを無視するとは。
0300デフォルトの名無しさん
2010/06/03(木) 19:16:50自分の家が世界の全てだからな。
0301デフォルトの名無しさん
2010/06/03(木) 19:18:380302デフォルトの名無しさん
2010/06/03(木) 19:47:370303デフォルトの名無しさん
2010/06/03(木) 19:51:54>>294も>>295もどっちもどっちではある。
Windowsでサポートされてたタッチパネルってほとんどマウスエミュレーション系じゃない?
ああいうのを今日的な感覚でタッチパネルって言っていいのかどうか。
0304デフォルトの名無しさん
2010/06/03(木) 21:56:450305280
2010/06/03(木) 22:06:50でもないのか、iPhoneとかでも使われてるし。
0307デフォルトの名無しさん
2010/06/04(金) 01:11:120308デフォルトの名無しさん
2010/06/04(金) 01:12:45一つの要素に配列の様に複数の値が入ってる場合にちょっと困ってます。
↓こんな要素があって、colorをRGBAで読み込みたいんです。
<ambient>
<color>0.50000 0.50000 0.50000 1</color>
</ambient>
とりあえず文字列としてはcolorがデシリアライズできましたが、
public class ambient
{
public string color;
}
使い勝手が悪いのでfloat4つのR,G,B,Aを持ったcolorクラスとして、
もしくはfloat[4]として読み込みたいです。
public class color
{
public float r, g, b, a;
// public float[] rgba;
}
何かいい方法ないでしょうか?
0309デフォルトの名無しさん
2010/06/04(金) 01:17:48<color a="0" r="0" g="0" b="0"/>
</ambient>
とか
<ambient>
<color>
<a>0</a>
<r>0</r>
<g>0</g>
<b>0</b>
</color>
</ambient>
とか
0310デフォルトの名無しさん
2010/06/04(金) 01:19:190311デフォルトの名無しさん
2010/06/04(金) 01:35:51文字列で読み込んでから分割するしかないですかね。
0312デフォルトの名無しさん
2010/06/04(金) 01:38:150313デフォルトの名無しさん
2010/06/04(金) 01:40:04というか何でできないの?
最悪の場合は変換前のxmlに正規表現の置換でもかけて
XmlSerializer向けに直してやるとかは?
0314デフォルトの名無しさん
2010/06/04(金) 02:04:400315デフォルトの名無しさん
2010/06/04(金) 02:08:250316デフォルトの名無しさん
2010/06/04(金) 10:44:26他社との連携とかほんと無視。
0317デフォルトの名無しさん
2010/06/04(金) 10:56:28フィルタ書けてそう言うのも簡単に読み書きできるし
0318デフォルトの名無しさん
2010/06/04(金) 12:17:33最も完全なのはecmaのCLI
オペコードのリファレンスとしてわかりやすいのはMSDNのSystem.Reflection.Emit.OpCodes
0319デフォルトの名無しさん
2010/06/04(金) 14:51:38それを悪とするあつかましさが醜い
0320デフォルトの名無しさん
2010/06/04(金) 20:48:130321デフォルトの名無しさん
2010/06/04(金) 21:58:470322デフォルトの名無しさん
2010/06/04(金) 22:38:210323デフォルトの名無しさん
2010/06/04(金) 22:41:160324デフォルトの名無しさん
2010/06/04(金) 23:13:470325デフォルトの名無しさん
2010/06/04(金) 23:26:360326デフォルトの名無しさん
2010/06/04(金) 23:49:38VC2008 C#の、イミディエイトウィンドウ内で
IEnumerable実装クラスなどを列挙させるのに
いい方法はないでしょうか。
0327デフォルトの名無しさん
2010/06/05(土) 00:02:080328デフォルトの名無しさん
2010/06/05(土) 00:19:070329デフォルトの名無しさん
2010/06/05(土) 00:29:27全部ウォッチウィンドウで済ませちゃってるんだけど。
0330デフォルトの名無しさん
2010/06/05(土) 00:33:08副作用のあるメソッド呼び出しとか。
0331デフォルトの名無しさん
2010/06/05(土) 00:35:07試せよ
配列なら自動的に中身が表示される
0332デフォルトの名無しさん
2010/06/05(土) 03:09:170333デフォルトの名無しさん
2010/06/05(土) 07:37:53ブレイクさせて関数への引数変えて返り血みてみたいとか
変数の値直で変えたり、デバッグ用のテストコードにすりゃいいんだろうけど、その場限りの時はつかうかなぁ
0334デフォルトの名無しさん
2010/06/05(土) 07:40:060335デフォルトの名無しさん
2010/06/05(土) 07:59:58結構こまってた。
インテリセンスするためだけのウィンドウだと思ってたよ・・・
0336デフォルトの名無しさん
2010/06/05(土) 10:12:47あそこでバグ修正用コードとか
半分コーディングしにかかるレベル
0337デフォルトの名無しさん
2010/06/05(土) 10:51:59そのあたりはクイックウォッチからもできるから。
イミディエイトウィンドウじゃないとできないことって何だろう?
0338デフォルトの名無しさん
2010/06/05(土) 12:23:40(クイック)ウォッチでやるとこんなメッセージがでる
> 宣言ステートメントは、イミディエイト ウィンドウでのみ許可されています
0339デフォルトの名無しさん
2010/06/05(土) 14:13:040340デフォルトの名無しさん
2010/06/05(土) 14:42:480341デフォルトの名無しさん
2010/06/05(土) 15:56:08する方法はありますか?
class a : ICloneable {
int value = 0;
//以下略
}
class b {
private a = new _a();
public a REF {
get{ return _a; }
set{ _a = value; }
}
public a CLONE {
get{ return _a.Clone(); }
set{ _a = value; }
}
}
b = new obj();
b.REF = new a(); //更新をこれだけにしたい(CLONEも)
b.REF.value = 5 //禁止したい
b.CLONE.value = 5 //意図しない動作なので禁止したい
0342デフォルトの名無しさん
2010/06/05(土) 16:05:00中身を変更できないようにクラスを作る
あとICloneableを重視してらっしゃるようだけど今は非推奨になってるから実装しなくていいよ
0343デフォルトの名無しさん
2010/06/05(土) 16:06:440344デフォルトの名無しさん
2010/06/05(土) 16:18:37bにpublic int AValue { get { return a.value; } }を付けた方がいい
もちろん場合によるけどbを利用する側がaを知らなくて済む
0345デフォルトの名無しさん
2010/06/05(土) 16:21:36ありがとう
簡単にはいかなそうですね・・。
場所によっては変更が必要なのでprivate protectedを
駆使して試して見ます
てか、ICloneableが非推奨というのは驚きました。
0346デフォルトの名無しさん
2010/06/05(土) 16:24:41これだな
Cloneとだけ書かれてもどんなコピーが返ってくるのか全くわからん。
むしろわけのわからないネーミングを助長するだけ。DeepCopyとか自分で実装してくれ。ということらしい。
0347デフォルトの名無しさん
2010/06/05(土) 20:03:23labelを密に横並びに配置しているのだけれど、どうも隣と被さって文字が見えなくなってしまう。
Autosizeをfalseにして文字を限界まで詰めると隣のラベルとかぶることはなくなるけどなぜか文字が途中までしか表示されなくなるし。
0348デフォルトの名無しさん
2010/06/05(土) 20:14:31悪いけど全体的に何をいいたいのかよくわからん。
てか「なぜか」ってそれのどこが疑問なのか意味わからんし。
0349デフォルトの名無しさん
2010/06/05(土) 20:46:00回答してみるとだな・・・
>>347
適当なコンテナで制御するのが一番かもね
0350デフォルトの名無しさん
2010/06/05(土) 23:12:580351デフォルトの名無しさん
2010/06/05(土) 23:17:380352デフォルトの名無しさん
2010/06/05(土) 23:21:37死んだとされてるけどMSが弾き飛ばされてる
はずなのに軌道がそれるのが確定したときに
二つ何かが飛び去るシーンがあるんだよね・・・
スレチ
0353デフォルトの名無しさん
2010/06/05(土) 23:42:28死んだ事にして別人を名乗って気楽に生きていくために
0354デフォルトの名無しさん
2010/06/06(日) 00:28:160355デフォルトの名無しさん
2010/06/06(日) 02:23:22たぶんそこら辺面倒なくしたければテーブルを使うのが気楽でよいよ
0356デフォルトの名無しさん
2010/06/06(日) 04:01:34マウスで綺麗に配置した積りだけど、どうも隣と被さってる気がします。
とエスパーしてみる。
0357デフォルトの名無しさん
2010/06/06(日) 07:02:300358デフォルトの名無しさん
2010/06/06(日) 09:15:18TableLayoutPanelコントロールを使えばOK
0359デフォルトの名無しさん
2010/06/06(日) 12:33:22フォーム内に登録されているコントール全ての Validating イベントを発生させるには
どうしたらよいのでしょうか?
現在、それぞれの項目の入力チェックは Validating イベントの中で処理し、
内容が正しくない場合は ErrorProvider を使用してアイコンを表示するようにしています。
このままですと一度もフォーカスを得ないままのコントロールは入力チェックがなされないままになってしまいます。
なので、登録ボタンを押下したタイミングでも全ての項目の入力チェックを行なおうと考えたのですが
うまい方法が思いつきませんでした。
ContainerControl の Validate メソッドで子コントロール全てを Validate できるのかと思ってためしたのですが
だめでした・・・
0360デフォルトの名無しさん
2010/06/06(日) 14:06:010361デフォルトの名無しさん
2010/06/06(日) 14:37:35ValidatingGroup ですね。
ASP.NET 用ですか・・・ Windows Form では使えなさそうですね。
0362デフォルトの名無しさん
2010/06/06(日) 14:46:570363デフォルトの名無しさん
2010/06/06(日) 15:20:58おおお! まさしくそれです
ありがとうございます
実装してみたところ期待通りの動作となりました
しかし・・・
なぜか自分ところの環境(VSEE2008)だと
ValidateChildren がインテリセンスにもオブジェクトブラウザにも出てこない・・・
ターゲットは .NET 2.0 にしてるしビルド自体は通るから問題なさそうなんだけどなんでなんだろう
0364デフォルトの名無しさん
2010/06/06(日) 15:24:10なんでそうしてるかは.NETの中の人に聞かないといけないが
0365デフォルトの名無しさん
2010/06/06(日) 15:34:56Form の方では Browsable(true) になっていました。
メソッドの性質を考えるとなるべく上位で使って欲しいからとかそんなとこなんでしょうかね。
重ね重ねありがとうございます。
0366デフォルトの名無しさん
2010/06/06(日) 16:38:400367デフォルトの名無しさん
2010/06/06(日) 17:01:44DataRow一行だけを編集するような画面を作る場合でも
TextBoxとかComboBoxにバインドするのが一般的な作り方なんでしょうか?
それとも一々内容を移しかえるやり方が一般的なんでしょうか?
0368デフォルトの名無しさん
2010/06/06(日) 17:15:300369デフォルトの名無しさん
2010/06/06(日) 19:02:490370デフォルトの名無しさん
2010/06/06(日) 19:07:50ウィザード生成の型付きデータセットが意外と解り辛くて不評。
0371デフォルトの名無しさん
2010/06/06(日) 22:06:03やはり、ソケットで作らないとだめなのかしら?
0372デフォルトの名無しさん
2010/06/06(日) 22:11:050373デフォルトの名無しさん
2010/06/06(日) 22:18:060374デフォルトの名無しさん
2010/06/07(月) 04:51:020375デフォルトの名無しさん
2010/06/07(月) 09:11:05いろんな環境原因も含めてHTTPやFTP、その他の通信でも失敗することはある。
0376デフォルトの名無しさん
2010/06/07(月) 12:12:39そう言うモンだと思って回復手段作り込むしかあんめ
0377デフォルトの名無しさん
2010/06/07(月) 12:21:13FTPはまともな動きになるだろう。
0378デフォルトの名無しさん
2010/06/07(月) 20:51:14FTPなんてチョー簡単だし。(PASV実装とかチョイ面倒くさい程度)
0379デフォルトの名無しさん
2010/06/07(月) 21:33:36.net frameworkだけで手軽に実装できるだろ。
0380デフォルトの名無しさん
2010/06/07(月) 23:19:51どのように実装したらよいでしょうか?
宜しくお願いします。
0381デフォルトの名無しさん
2010/06/07(月) 23:50:40Panelでできないっけ。
今もPanelあるんだっけ。
0382デフォルトの名無しさん
2010/06/08(火) 00:02:47現状ではコントロールは親コントロールに対してしか透過してくれないんだよね。
まぁ動かしたりするんなら糞重たくなるけど、その枠が乗る範囲が対象の画像のどこにあたるかを計算してその部分の画像データを枠を描画するコントロールの背景に描画とか。
まぁサクサク動いて透過もできてってなるといっそのことDirectXやOpenGLに2次元的な描画をするしかない。
0383デフォルトの名無しさん
2010/06/08(火) 00:58:160384デフォルトの名無しさん
2010/06/08(火) 08:05:10WinFormだと透過を扱うのは面倒だよ
0385デフォルトの名無しさん
2010/06/08(火) 08:31:380386デフォルトの名無しさん
2010/06/08(火) 10:13:32OnPaintだったら一切コントロール使わずに重なる可能性のあるもの全部
自分で描かないといけない
0387デフォルトの名無しさん
2010/06/08(火) 10:32:26例えばユーザーがドラッグドロップした部分に枠を描画してそれを消したりすることが出来なければいけないなら
自分でレイヤーみたいなデータを順番に記憶してクリックされたら枠線描画して移動できるようにする
とかいろいろ考えられるけど
0388デフォルトの名無しさん
2010/06/08(火) 11:33:45そういうの多用するんだったら努力するだけ時間の無駄だからさっさとWPFへ
0389デフォルトの名無しさん
2010/06/08(火) 23:31:040390デフォルトの名無しさん
2010/06/09(水) 02:02:52Regionで内側を切り出すのがほどほど楽だと思うよ。
0391デフォルトの名無しさん
2010/06/09(水) 05:21:480392デフォルトの名無しさん
2010/06/09(水) 09:55:17short型の変数Aがあるとします。
メインスレッドはある変数Aを読み込むだけ
サブスレッドはある変数Aを書き換えるだけ
上記のような状態で通常
書き込み時に適当なオブジェクト等を使用してロック・読み込み時もロック
するような気はするんですが
仮に
両方ロックしない場合で
サブスレッドで
変数Aが 0(16bit全てOFF)の値になっている時に
変数Aを65535(16bit全てON)に変更したとします。
この場合変数Aは限りなく瞬間的に全てのビットを順番にONしていくと思うのですが、
その途中にメインスレッドが読み取りを行った場合に例えば8bitだけONになったりしている状態を読み取る場合ってあるのでしょうか?
ちょっと質問の仕方が微妙かもしれませんがお願いいたします。
0393デフォルトの名無しさん
2010/06/09(水) 10:18:110394デフォルトの名無しさん
2010/06/09(水) 10:21:15> この場合変数Aは限りなく瞬間的に全てのビットを順番にONしていくと思うのですが、
> その途中にメインスレッドが読み取りを行った場合に例えば8bitだけONになったりしている状態を読み取る場合ってあるのでしょうか?
32bitプロセスでは32bitまでならアトミック
そんなの気にするよりvolatile
0395デフォルトの名無しさん
2010/06/09(水) 22:28:13http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol3_i.pdf
この資料のp.258に
> インテルPentium 4 プロセッサ、インテルXeon プロセッサ、P6 ファミリ・プロセッサ、
> インテルPentium プロセッサ、Intel486 プロセッサでは、キャッシュ可能メモリへのア
> クセスで、バス幅、キャッシュ・ライン、ページ境界をまたがっているものは、アト
> ミック操作が保証されない。
とあるので、そういう状況が起こる可能性はゼロじゃない。
本当にアトミック操作が必要な場合は、あなたの言うとおり、ロックするなりアトミック操作
命令をつかうなりする。
0396デフォルトの名無しさん
2010/06/09(水) 23:29:370397デフォルトの名無しさん
2010/06/09(水) 23:46:29まあ将来に渡って保証されてる訳でもないだろうけどな
0398デフォルトの名無しさん
2010/06/10(木) 00:46:260399デフォルトの名無しさん
2010/06/10(木) 01:13:01マーシャリング機構が魔法を使ってくれてるかもしれないから否定しているわけじゃない。
0400デフォルトの名無しさん
2010/06/10(木) 02:10:54それやると大抵は読み込むだけのスレッド側の処理は最適化で消えて読み込まなくなるから
中途半端に読み込む状態を仮定する以前の動作になるよ。
0401デフォルトの名無しさん
2010/06/10(木) 02:52:110402デフォルトの名無しさん
2010/06/10(木) 03:34:05なんでそういう事をわざわざ考えるのかよくわからないけど
ReaderWriterLockつかえば解決とか言う話でもないの?
0403デフォルトの名無しさん
2010/06/10(木) 03:38:57いいことだと思うよ。
0404デフォルトの名無しさん
2010/06/10(木) 06:40:130405デフォルトの名無しさん
2010/06/10(木) 12:34:400406デフォルトの名無しさん
2010/06/10(木) 12:42:42そういうすごいCPUの話じゃないの?
0407デフォルトの名無しさん
2010/06/10(木) 13:36:17short型ならすべてのビットが同時に書き換えられる。1ビットずつ順番ではない。
もちろんプログラムが1ビットずつ書き換えるように作ってあれば話は別だけど、単純に
A = 0;
A = 65535;
のように代入するだけならすべてのビットが同時に変更される。
もし中途半端な状態が発生したら、それはメモリの故障。
0408デフォルトの名無しさん
2010/06/10(木) 13:51:19物理コアが複数だと、そう言い切れなかったりする
上でも何回か出ているアライメント境界の問題で、
複数回フェッチが起こる可能性があるからだ
ここらはキャッシュコヒーレンシとか色々関係しててややこしい
0409デフォルトの名無しさん
2010/06/10(木) 15:08:02>>407
いろいろ読む限り仮にこれが32bitOSでLongだったら書き換えは複数回に分割されてしまうということなんだろうか?
0410デフォルトの名無しさん
2010/06/10(木) 15:28:170411デフォルトの名無しさん
2010/06/10(木) 15:50:08bool、char、byte、sbyte、short、ushort、uint、int、float の
各データ型および参照型の読み取りと書き込みは分割不可能です。
また、上記の型を基になる型に持つ列挙型の読み取りと書き込みも
分割不可能です。long、ulong、double、decimal などのその他の
データ型、およびユーザー定義型の読み取りと書き込みは、分割不可能
であることが保証されていません。この目的で設計されたライブラリ関数を
除いて、インクリメントやデクリメントの場合などでの分割不可能な
読み取り/変更/書き込みは保証されていません。
0412デフォルトの名無しさん
2010/06/10(木) 19:34:34CPUレベルではともかく、CLRレベルでは保証されてるってことか。
0413デフォルトの名無しさん
2010/06/10(木) 20:38:480414デフォルトの名無しさん
2010/06/10(木) 21:36:58.netが16ビットでも動くかは知らんけど
0415デフォルトの名無しさん
2010/06/10(木) 21:41:290416デフォルトの名無しさん
2010/06/10(木) 21:50:440417デフォルトの名無しさん
2010/06/10(木) 21:52:51もちろんライアウトを変えた場合は別。
だから、少なくとも32ビット以下のプリミティブ型の読み書きはアトミック保障。
0418デフォルトの名無しさん
2010/06/10(木) 21:53:06アホらしいノウハウが定着してる事実
0419デフォルトの名無しさん
2010/06/10(木) 21:53:57ライアウト→レイアウト。
で、そういうことやってない限りは保障されてる。
0420デフォルトの名無しさん
2010/06/10(木) 21:56:44何のためだよw
0421デフォルトの名無しさん
2010/06/10(木) 21:58:1632ビットを超えるものはlockするのが簡単。
0422デフォルトの名無しさん
2010/06/10(木) 22:09:14IntPtrや参照型のvolatileは64bitプロセスでどうなってるんだろう?
0423デフォルトの名無しさん
2010/06/10(木) 23:33:390424デフォルトの名無しさん
2010/06/10(木) 23:38:280425デフォルトの名無しさん
2010/06/10(木) 23:47:070426デフォルトの名無しさん
2010/06/11(金) 01:13:500427デフォルトの名無しさん
2010/06/11(金) 01:19:470428デフォルトの名無しさん
2010/06/11(金) 01:40:340429デフォルトの名無しさん
2010/06/11(金) 02:33:51まぁMSDNにもそう書いてあるんだし、そのままでいいんじゃないか?
というか、やっぱPGて細かく突き詰めると深いよなぁ と改めて思う
0430デフォルトの名無しさん
2010/06/11(金) 11:50:42てか、紐づくの語源はどっから?
0431デフォルトの名無しさん
2010/06/11(金) 12:00:03関係する
とかに置き換えたらいかんの?
語源はググってくれ
0432デフォルトの名無しさん
2010/06/11(金) 12:34:12link,bind,relationshipのいずれかを局面に応じて使うんじゃないかな。
0433デフォルトの名無しさん
2010/06/11(金) 12:47:270434デフォルトの名無しさん
2010/06/11(金) 18:55:470435デフォルトの名無しさん
2010/06/11(金) 22:53:09命名スレ行きかな
0436デフォルトの名無しさん
2010/06/12(土) 18:00:580437デフォルトの名無しさん
2010/06/13(日) 01:55:450438デフォルトの名無しさん
2010/06/13(日) 13:04:54この記事の意味わかる人いる?
0439デフォルトの名無しさん
2010/06/13(日) 13:11:10new { trueValue = new BitVector32(-1), falseValue = new BitVector32(0) }と
new { trueValue = new BitArray(1)[0] = true, falseValue = new BitArray(1)[0] = false }
を比較したら処理速度以前に値型と参照型の違いで前者が速いに決まってる
何がしたいのかも意味不明
0440デフォルトの名無しさん
2010/06/13(日) 13:24:00BitFlag.TrueIndexは0のことだから、
>new BitVector32(-1)
-1じゃなくても何を渡してもたとえ0でもTrueになるしな。
0441デフォルトの名無しさん
2010/06/13(日) 13:26:43これに至ってはビットセットしてるつもりで実は取得しかしてない気がする。
0442デフォルトの名無しさん
2010/06/13(日) 13:27:440443デフォルトの名無しさん
2010/06/13(日) 13:41:36逆
設定はしてるけど取得はしてない
trueValueに代入されるのはリテラルのtrue
0444デフォルトの名無しさん
2010/06/13(日) 14:10:33ってことか?
0445デフォルトの名無しさん
2010/06/13(日) 14:16:21なんにせよそんなBitArrayの使い方ありえない
0446デフォルトの名無しさん
2010/06/13(日) 14:30:00> プログラミング言語論やアルゴリズムに元々興味がなかった
んだろうな。
0447デフォルトの名無しさん
2010/06/13(日) 14:42:150448デフォルトの名無しさん
2010/06/13(日) 14:44:24そりゃ何やったって-1が出るよな。
0449デフォルトの名無しさん
2010/06/13(日) 14:53:20BitVector32の仕様を理解してない? インデクサの引数をマスクじゃなく
インデックスだと思っているとか。
0450デフォルトの名無しさん
2010/06/13(日) 14:54:15あれ? コメント消えた?
0451デフォルトの名無しさん
2010/06/13(日) 15:07:190452デフォルトの名無しさん
2010/06/13(日) 15:08:410453デフォルトの名無しさん
2010/06/13(日) 15:13:540454デフォルトの名無しさん
2010/06/13(日) 15:26:450455デフォルトの名無しさん
2010/06/13(日) 19:55:01別に誰だって間違いはあるんだから、素直に分かってませんでした、でいいのに。
0456デフォルトの名無しさん
2010/06/13(日) 20:05:52どうなってんだ…真面目に聞いてたのに…
あーあ、どうせ荒らされたからコメント停止したとか、そういうことにされてんだろうな
0457デフォルトの名無しさん
2010/06/13(日) 20:12:09打たれ強い人ばかりじゃないんだ
0458デフォルトの名無しさん
2010/06/13(日) 20:28:22気づいたらもう消えてたから経過が分からん、まあおそらくはそうなんだろうけど。
しかしこれじゃ記事で気になることがあってもどうしようもないな。
techbank.jp って書籍とかも出してるからそれなりに影響力ありそうなんだが…
ユーザ登録して掲示板に書けってことか…面倒な…
0459デフォルトの名無しさん
2010/06/13(日) 20:59:290460デフォルトの名無しさん
2010/06/13(日) 21:38:47キツいことは書かれてたね。
言葉はキツかったけど正しい指摘ではあった。
確かに誰もが打たれ強いわけじゃないってのは分かるけど
書籍出したり、MVPだったりする人間が技術的な指摘に逃げ腰ってのはダメだよ。
0461デフォルトの名無しさん
2010/06/13(日) 21:49:300462デフォルトの名無しさん
2010/06/13(日) 22:39:03あれ書いたの俺なんだけど、まさか丸ごと消されるとは思わなかった。
MVPだし、本出してるし、コミュニティの運営にも積極的な人みたいだから、
反論するにせよ訂正するにせよ、少なくとも真摯な態度で答えてもらえるもんだと
思っていたんだよね。
まあ、確かに言葉はきつかったけど、まともな質問に上から目線で適当な回答をしてるのが
腹立たしかったもんでね。
残念だね。
0463デフォルトの名無しさん
2010/06/13(日) 22:46:10BitVector32 vs BitArray を掲載しました
ってのが残ってるけど、どんな中身だったのか分からない
どっかに中身のっけてくれ
0464デフォルトの名無しさん
2010/06/13(日) 22:47:340465デフォルトの名無しさん
2010/06/13(日) 22:49:570466デフォルトの名無しさん
2010/06/13(日) 22:50:22Googleのキャッシュで記事はまだ見れるね。
0467デフォルトの名無しさん
2010/06/13(日) 22:52:50これか。何が間違ってるのかわからんw
0468デフォルトの名無しさん
2010/06/13(日) 22:55:24書いてる本人が自分で何やってるのかわかってないからわざと曖昧に書いてるのが伝わってくる
0469462
2010/06/13(日) 23:02:40変な人だと思われそうだから、1点に絞って突っ込んだんだけどね。
いっそ高木浩光ばりに突っ込みまくった方が良かったのだろうか?
0470デフォルトの名無しさん
2010/06/13(日) 23:07:48あー、私知らなかったわー。って感じの文章なんだから、もっとソフトにやってあげてもいいんじゃない。
0471デフォルトの名無しさん
2010/06/13(日) 23:08:300472デフォルトの名無しさん
2010/06/13(日) 23:10:28Bingはキャッシュすらないし
0473462
2010/06/13(日) 23:17:13BitVector32::ItemsとBitArray::Itemsの戻り値を整数として評価すると異なる値になると
あなたは言っていますが、.NetのBoolean型は整数と可換なものではないので、整数として
評価することに意味はありません。また、内部的にも1ビットの整数として実装されていますので、
整数に変換した結果は毎回同じです。-1が出力されているのは、あなたがConsole.WriteLineの
フォーマット文字列に“-1”と書いたからです。
基本的なデータ型について理解していないのはあなたの方です。正当な疑問に木で鼻をくくったような
返答をする態度は非常に不愉快です。
といったところ。最後に余計なことを言っているけど、これは以前にコメントをしていた人に、
ビット操作の概念を勉強しないとこの記事は理解できないよ、というような返答をしていたので、
それに対するもの。
0474デフォルトの名無しさん
2010/06/13(日) 23:21:55記事の間違いは別問題だが
0475デフォルトの名無しさん
2010/06/13(日) 23:22:230476デフォルトの名無しさん
2010/06/13(日) 23:31:53最初のコメント
----
> まとめると、
> BitVector32 BitArray
> true -1 を表す 1 を表す
> false 0 を表す 0 を表す
> となります。
これはいったいどういう意味でしょうか?
----
その返答
----
ビットフラグがONの場合がTrue、ビットフラグがOFFの場合はFalseです。
このON/OFFを数値で表した場合、BitArrayとBitVector32とではON/OFFの数値の意味が異なるという対比表になります。
そもそもビットの概念がわかっていないと、このBlogの説明に書いてある説明を理解しようとしても無理ですので、もし貴方がビットの考え方が良くわからないという場合は、
入門書籍やほかのWebサイトでその辺りを勉強してから、このBlogに書いてある意味を汲み取ってください。
----
0477デフォルトの名無しさん
2010/06/13(日) 23:36:230478デフォルトの名無しさん
2010/06/13(日) 23:37:23ttp://techbank.jp/Community/blogs/mymio/image_5233298A.png
0479デフォルトの名無しさん
2010/06/14(月) 01:01:27ソケットプログラミングで、受信スレッドがキューにデータを溜めて、
メインスレッドは順次データを読み出して処理するというプログラムを書いています。
メインスレッドはキューにデータが無ければ受信するまで待機したいのですが、
一般的にどう実装するものでしょうか?
とりあえず作った受信スレッドは、
Monitor.Enter(obj);
受信ループ
キューに格納
Monitor.Exit(obj);
Monitor.Enter(obj);
ループEnd
Monitor.Exit(obj);
受信の都度Exitしてメインスレッドに所有権を明け渡しています。
動作には問題なさそう?なんですけど、なんかスマートじゃないというか。。。
0480デフォルトの名無しさん
2010/06/14(月) 01:05:170481デフォルトの名無しさん
2010/06/14(月) 01:12:17ループ開始
}
0482デフォルトの名無しさん
2010/06/14(月) 01:13:280483デフォルトの名無しさん
2010/06/14(月) 01:16:31.NET 4より前にはなかったな確か。
BlockingQueueとか実装はそこらに転がってそうだが。
0484デフォルトの名無しさん
2010/06/14(月) 01:19:51.Net4が使えるなら BlockingCollection<T> 一択。
つかえないなら、↓こういう同期機能付きコレクションを使う。
http://www.codeproject.com/KB/recipes/boundedblockingqueue.aspx
いずれにしても、そういうパターン(いわゆるProducer-Consumerパターン)では
同期機能はキューに持たせるのが一般的。で、Producer(この場合は受信スレッド)は
データをキューに入れるだけ、Consumer(この場合はメインスレッド)はキューから
取得するだけにする。
0485デフォルトの名無しさん
2010/06/14(月) 07:08:32馴れ合い色が強くなってきて、なんていうか、このブログの主はMVPになる条件を満たしていないにも
かかわらず、推薦制度を悪用してMVPになった感があるな。
こんなんがアドバイザとして高い金を取ってるかと思うとなんともいえない気持ちになる。
MVPを専属で引っ張ると100万/週ぐらい取らなかったか?
次回剥奪されると良いが。
0486デフォルトの名無しさん
2010/06/14(月) 07:29:51> MVPを専属で引っ張ると100万/週ぐらい取らなかったか?
そんなに価値あるのか?
まあ、すごいのはいる。
0487デフォルトの名無しさん
2010/06/14(月) 07:47:510488デフォルトの名無しさん
2010/06/14(月) 07:52:150489デフォルトの名無しさん
2010/06/14(月) 08:00:19大丈夫かな
0490デフォルトの名無しさん
2010/06/14(月) 08:30:10日本語サイトでMVPを名乗ってる奴の中には、こういうしょうもないのが時々いるから
あんまり信用はしてないけど。
この人も結構メディアに露出しているけど、信用をなくすような行動取って大丈夫なのか?
「わかってませんでした。精進します」って言えば済んだことなのに。
0491デフォルトの名無しさん
2010/06/14(月) 09:32:56MVPは別に実力に関係ないしな
まぁ色々特典もらえるのは正直うらやましい
0492デフォルトの名無しさん
2010/06/14(月) 13:33:260493デフォルトの名無しさん
2010/06/14(月) 13:49:43MVP乙
0494デフォルトの名無しさん
2010/06/14(月) 20:33:37でも、一つのテーマでコミュニティ築く力は凄いと思わない。
0495デフォルトの名無しさん
2010/06/14(月) 21:05:260496デフォルトの名無しさん
2010/06/14(月) 21:47:57MVPって数結構多いよね。
0497デフォルトの名無しさん
2010/06/14(月) 21:50:590498デフォルトの名無しさん
2010/06/14(月) 22:26:37コンサル
0499デフォルトの名無しさん
2010/06/14(月) 22:36:01レスサンクスです。
Producer-Consumerパターンでぐぐったらズバリ出てきました。
こんな一般的な話だったなんて・・・orz
0500デフォルトの名無しさん
2010/06/14(月) 22:43:43プログラムをマルチスレッド化する大きな動機の一つだもんな。
0501デフォルトの名無しさん
2010/06/14(月) 23:32:240502デフォルトの名無しさん
2010/06/15(火) 06:54:05どれだけ俺様ライブラリを量産したいのかと小一時間(ry
0503デフォルトの名無しさん
2010/06/15(火) 12:20:190504デフォルトの名無しさん
2010/06/15(火) 21:08:210505デフォルトの名無しさん
2010/06/15(火) 21:18:560506デフォルトの名無しさん
2010/06/15(火) 21:49:260507デフォルトの名無しさん
2010/06/15(火) 22:04:200508デフォルトの名無しさん
2010/06/15(火) 22:36:19忙しくなけりゃ俺が寄稿してあげたいぐらいだわ
0509デフォルトの名無しさん
2010/06/15(火) 22:37:49ブログにでも書け
キーワードさえうまく配置してればそのうち広まるよ
0510デフォルトの名無しさん
2010/06/15(火) 22:38:57それがどうして「生のthreadやらthreadpoolやらを使」うことがそれだって言うの?
そっちの方が意味がわからんよ。
0511デフォルトの名無しさん
2010/06/15(火) 22:46:06んーこのblogなんとなく見てたら気になるとこいっぱいあるな…
でももうコメントもできんし。
っていうかだれかすでにコメントしてて消えちまったのかもしれんが。
0512デフォルトの名無しさん
2010/06/15(火) 23:52:40.NET4触ってないからよくわからないんだが、Threading.threadは使わずにBackgroundWorker使えって事?
それとも.NET4はもっと便利なのがあるってこと?
0513デフォルトの名無しさん
2010/06/16(水) 00:06:430514デフォルトの名無しさん
2010/06/16(水) 00:34:11Task クラスとか、Parallel クラスとかが増えた。
0515デフォルトの名無しさん
2010/06/16(水) 06:25:100516デフォルトの名無しさん
2010/06/16(水) 06:41:520517デフォルトの名無しさん
2010/06/16(水) 09:26:180518デフォルトの名無しさん
2010/06/16(水) 10:08:530519デフォルトの名無しさん
2010/06/16(水) 10:10:590520デフォルトの名無しさん
2010/06/16(水) 11:26:09それはそれでやばげだな。
0521デフォルトの名無しさん
2010/06/16(水) 12:30:20それはそれでやばげだなって言ってんだろ!
0522デフォルトの名無しさん
2010/06/16(水) 14:07:14俺がやばげだなつってるんだから反応しやがれ!
0523デフォルトの名無しさん
2010/06/16(水) 16:01:520524デフォルトの名無しさん
2010/06/16(水) 17:36:480525デフォルトの名無しさん
2010/06/16(水) 20:29:38これでマルチスレッドを使う人がちゃんとキャンセル実装をするようになればいいが…
0526デフォルトの名無しさん
2010/06/16(水) 20:34:270527デフォルトの名無しさん
2010/06/16(水) 21:27:25あると欣喜雀躍する人がいるのは分かるがパンピーなプログラマでそんなもの要るの?
ちゃんとプロファイリングしてれば、キャンセルなんて考える必要なんて無いのが経験則。
それとも皆、もしかして物理シミュレーションとか暗号鍵解読とかでもやってるのか?
0528デフォルトの名無しさん
2010/06/16(水) 21:32:56俺の経験からいけばそれらは関係がないんだけど。
0529デフォルトの名無しさん
2010/06/16(水) 21:37:11しない?なら言う事は何も無いな。
0530デフォルトの名無しさん
2010/06/16(水) 21:38:450531デフォルトの名無しさん
2010/06/16(水) 21:40:50タスク系統は普通に使うでしょ。
0532デフォルトの名無しさん
2010/06/16(水) 21:45:24スレッドのキャンセル書けないバカは一生マルチスレッドするな。
0533デフォルトの名無しさん
2010/06/16(水) 22:25:39まぁちゃんとわかって仕事で使ってる人間なんてほんの一握りなわけだが
0534デフォルトの名無しさん
2010/06/16(水) 22:32:55大抵のビジネスアプリは使わんでも何の問題もない。
0535デフォルトの名無しさん
2010/06/16(水) 22:44:38とはいえあまり見ないのもたしか
UIがフリーズしたり複数のタスクが同時に出来ないアプリが多い事多い事…
0536デフォルトの名無しさん
2010/06/16(水) 22:51:31自分だけで作る部分ならいいんだが。
0537デフォルトの名無しさん
2010/06/16(水) 22:51:45サンプル程度のものなら簡単に理解できるし実装も簡単だけど
いざちゃんとやろうと思ったら同期、同調、排他、例外処理、キャンセル、etc...と糞難しい
設計力も数段上の力が求められるしさー
業務系とかそれが出来ないからモーダルウィンドウに逃げてる人多いじゃんよ
0538デフォルトの名無しさん
2010/06/16(水) 23:00:14その中でも最も難易度の高い非同期項目みて”超初心者向けだな”とか思える人が集まらないと実務じゃ無理。
0539デフォルトの名無しさん
2010/06/16(水) 23:03:480540デフォルトの名無しさん
2010/06/16(水) 23:04:360541デフォルトの名無しさん
2010/06/16(水) 23:06:390542デフォルトの名無しさん
2010/06/16(水) 23:11:53MSもこういう用途のために作ったんじゃないのかね
普通の受託開発屋なら通信部分って自前で書かない場合多いし
0543デフォルトの名無しさん
2010/06/16(水) 23:12:200544デフォルトの名無しさん
2010/06/16(水) 23:30:05だってそれ使うと同調しにくいじゃん…
スレッドも一本しか使わないし…
それ以上にUIにベッタリな仕様だからビジネスロジック部分には不向き
複数のスレッドで別々の処理をやってある時点で非同期に集計してその後にまた別の処理を…
なーんてことやると一気に難易度がググーーーンと上がっちゃいます!><
0545デフォルトの名無しさん
2010/06/17(木) 00:05:35適当に人あつめると出来ない人の方が多いからなあ。
低い方に合わせて作らんと死ぬよね
0546デフォルトの名無しさん
2010/06/17(木) 00:17:18特に客から文句言われた事ないな。
計算が遅けりゃ十中八九はデータの持ち方とかに問題があって遅いから、遅いと
文句言われたら改良する。
文句言われなけい限り、保守とかが楽な方に意図的に流してる。
でもスレッドとか(あと信じられないことにコレクション)をヘルプのサンプル引き写し
レベルで使ってるだけで、マニアックだとか難しくて他の人が保守出来ないから
チーム作業ではやめてくれないかとか罵倒されて
(´・ω・`)。。。(いくらなんでもあんたらが時代遅れだろ)
とか思うが相手が大多数なので言えない。
これは俺の勤め先がブラックなんだよな、な?一般的じゃないよな?(マ板行け自分)
0547デフォルトの名無しさん
2010/06/17(木) 00:19:42勝手に上がればーーーーか(´・ω・`)
0548デフォルトの名無しさん
2010/06/17(木) 00:23:53そういう時はほかの方法でやるだろうよ。
0549デフォルトの名無しさん
2010/06/17(木) 00:40:39スレッドぐらい使いこなせよ…
0550デフォルトの名無しさん
2010/06/17(木) 00:43:35>スレッドぐらい使いこなせよ
レベルの低い会社に勤めてるのですねw
0551デフォルトの名無しさん
2010/06/17(木) 01:00:290552デフォルトの名無しさん
2010/06/17(木) 01:08:08おまえ等、俺に挨拶は?
0553デフォルトの名無しさん
2010/06/17(木) 01:08:35なんでvolatileなのに問題が発生するのか説明してみて。
0554デフォルトの名無しさん
2010/06/17(木) 01:15:18説明もなにも二つのスレッドが協調すべきなのにその操作をいれてないからだろ
そのブログじゃ同時に実行される云々いってるがスケジューラの指定が無い以上どっちが優先されるのかはプロセッサ任せ
つーかロックすらかけてない互いの状態弄って何がしたいのかわけわからん
volatileは全く関係ねぇよ
ふー、やっぱ俺って天才だわ
上級PGなめんなよ!
0555デフォルトの名無しさん
2010/06/17(木) 01:29:58何を言ってるんだお前は…
0556デフォルトの名無しさん
2010/06/17(木) 01:35:27・volatile読み込みより前の書き込みは必ず先に実行される
・volatile書き込みより後の読み込みは必ず後に実行される
にも関わらず>>553ではすべての読み書きがvolatileなのに順序問題が起こる。
これはなぜか説明してみろという話。
0557デフォルトの名無しさん
2010/06/17(木) 01:42:14・volatile書き込みより前の書き込みは必ず先に実行される
・volatile読み込みより後の読み込みは必ず後に実行される
かな
0558デフォルトの名無しさん
2010/06/17(木) 01:58:43それを阻止する為に〜やりましょうとかずれてるわけで
ちゃんとやるならロックや適切なスケジューラを指定するのが常なんだよ!
上級PGなめんなよ!
0559デフォルトの名無しさん
2010/06/17(木) 02:06:040560デフォルトの名無しさん
2010/06/17(木) 02:09:16上級PGなめんな!
0561デフォルトの名無しさん
2010/06/17(木) 02:16:050562デフォルトの名無しさん
2010/06/17(木) 02:22:54ただのコンパイラ最適化防止の為じゃ
そして>>553の記事は最適化は防げてもプロセッサの最適化(OoOのね)は防げないから任意でThread.MemoryBarrier()挟んでメモリバリアしろよタコ助共つーこと
上級PGなめんなよ!
つーかスレッド使う予備知識の基礎中の基礎だろ!
0563デフォルトの名無しさん
2010/06/17(木) 03:30:13俺もいい言葉を言われたことがあるので伝えておくよ。
「ジェネリクスは信用してないから禁止」
0564デフォルトの名無しさん
2010/06/17(木) 03:57:44C++のvolatileと混同してない?C#のにはあるよ。
ただOoOに対しては有効じゃないのかなぁ。
0565デフォルトの名無しさん
2010/06/17(木) 04:49:420566デフォルトの名無しさん
2010/06/17(木) 05:59:33当然、C#のvolatileは順序を保証するために使える。
ではなんで>>553では全部volatileなのに順序問題が発生するのか。
0567デフォルトの名無しさん
2010/06/17(木) 06:14:20ttp://msdn.microsoft.com/ja-jp/magazine/cc546569.aspx#id0030022
0568デフォルトの名無しさん
2010/06/17(木) 06:32:280569デフォルトの名無しさん
2010/06/17(木) 06:42:49ttps://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S3
この辺が詳しいな。
0570デフォルトの名無しさん
2010/06/17(木) 06:56:55デリゲート禁止ってのもあった・・・
0571デフォルトの名無しさん
2010/06/17(木) 08:55:56ほんとレベル低いな
0572デフォルトの名無しさん
2010/06/17(木) 10:30:22医者が扱う薬の話かよ
0573デフォルトの名無しさん
2010/06/17(木) 10:51:05volatileって何だろうと思って凄腕の人の解釈見たらコンパイラの最適化防止ってかいてあるお
ゆとりPGをなめんなおっおっ( ^ω^)
0574デフォルトの名無しさん
2010/06/17(木) 13:38:23最適化でその変数がなかったことにされるのを防ぐだけ
0575デフォルトの名無しさん
2010/06/17(木) 13:41:280576デフォルトの名無しさん
2010/06/17(木) 13:43:09とかを防ぐためじゃなかったっけ。
0577デフォルトの名無しさん
2010/06/17(木) 13:43:56必要としているかもしれないから。
0578デフォルトの名無しさん
2010/06/17(木) 13:44:310579デフォルトの名無しさん
2010/06/17(木) 13:46:14それいらねえだろってコンパイラが言ったら、それは別のスレッドが書き変えてるかもしれないの!って注意してやるんだったか
0580デフォルトの名無しさん
2010/06/17(木) 13:52:45スレッドのことは考えてなかった。
よくvolatileをスレッドで使うなというのはこのため。
C#やJavaのようなはじめからスレッドを想定してる言語では意味を拡張していて、
スレッドに対して使えるようになっている。
>>553の他の記事を見たが他のはエラーが起きたときのダイアログやメッセージを
イメージでアップしているが、この記事にはない。
おそらく手元の環境でエラーが起きなくて脳内で書いてるんじゃないのかな。
誰かこのプログラムでAssertが起きた人いる?
0581デフォルトの名無しさん
2010/06/17(木) 15:29:45昔はJITの利点の一つとして喧伝してたもんだったが
0582デフォルトの名無しさん
2010/06/17(木) 16:05:48ベクトル化はMono.Simdのようなやり方しかないのだろうか。
0583デフォルトの名無しさん
2010/06/17(木) 17:01:13つーかアレDirectX由来だっけ?
0584デフォルトの名無しさん
2010/06/17(木) 17:06:53これからはマルチメディアの時代だとか言って。
今はビデオの展開はGPUの仕事になっちゃってるからCPUのMatrixはあんまり使ってないような。
0585デフォルトの名無しさん
2010/06/17(木) 17:27:280586デフォルトの名無しさん
2010/06/17(木) 17:53:49君が正しい
0587デフォルトの名無しさん
2010/06/17(木) 19:44:11「新人がわかんないだろ、意地悪すんなよ」って言われた
0588デフォルトの名無しさん
2010/06/17(木) 19:56:13最低だな
0589デフォルトの名無しさん
2010/06/17(木) 20:02:15それ以外は特に何も保証しない
0590デフォルトの名無しさん
2010/06/17(木) 20:07:59ここはでたらめ言うだらけだな。
ttp://msdn.microsoft.com/ja-jp/library/aa645755.aspx
ttp://msdn.microsoft.com/ja-jp/library/aa691105.aspx
ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S3
>>574
ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S5
この辺読みゃ分かるが、よく誤解されてるように読み込みそのものが削除されるようなことは普通はない。
0591デフォルトの名無しさん
2010/06/17(木) 20:08:570592デフォルトの名無しさん
2010/06/17(木) 20:11:32そろそろ痛いから言語仕様でも読んでみな。
>>590の最初のリンクだけでも十分だ。
>>580
>>553のソースでしっかりAsser起こる。
一瞬なんで?って思ったが、まあよく考えてみれば確かに起こってもおかしくはないのかな…って感じ。
0593デフォルトの名無しさん
2010/06/17(木) 20:16:33複数のスレッドが変数にアクセスする順序は別の問題だから。
0594デフォルトの名無しさん
2010/06/17(木) 20:19:05未だに>>553の意味わかってないだろ。
0595デフォルトの名無しさん
2010/06/17(木) 20:20:350596デフォルトの名無しさん
2010/06/17(木) 20:22:200597デフォルトの名無しさん
2010/06/17(木) 20:23:490598デフォルトの名無しさん
2010/06/17(木) 20:24:10遠まわしな説明でよく解らんな。
メモリバリアの機能を含んでいるどうかだけ書けば1行ですむのに。
0599デフォルトの名無しさん
2010/06/17(木) 20:28:070600デフォルトの名無しさん
2010/06/17(木) 20:28:590601デフォルトの名無しさん
2010/06/17(木) 20:30:500602デフォルトの名無しさん
2010/06/17(木) 20:32:08危なくて使えないんだよ。
0603デフォルトの名無しさん
2010/06/17(木) 20:36:47>メモリバリアの機能を含んでいるどうかだけ書けば1行ですむのに。
メモリバリアの機能を含んでるならなんで>>553はAssert起こって、
明示的にメモリバリア命令入れたら起こらなくなるの?
って思うわな普通。
メモリバリアって言っても一言で言えるほど単純な話じゃない。
0604デフォルトの名無しさん
2010/06/17(木) 20:42:36変更するようなものに限られるんだよ。
0605デフォルトの名無しさん
2010/06/17(木) 20:58:58他のスレッドによる volatile 書き込みは、それらが実行された順にすべてのスレッドで行われます。
0606デフォルトの名無しさん
2010/06/17(木) 21:38:570607デフォルトの名無しさん
2010/06/17(木) 21:54:02These restrictions ensure that all threads will observe volatile writes performed by any other thread in the order in which they were performed.
A conforming implementation is not required to provide a single total ordering of volatile writes as seen from all threads of execution.
2行目の全順序は要求されないってのが結局>>533の理由なのかな。
0608デフォルトの名無しさん
2010/06/17(木) 21:55:080609デフォルトの名無しさん
2010/06/17(木) 21:58:07「単一」の全順序は要求されない
が重要か。
0610デフォルトの名無しさん
2010/06/17(木) 22:00:410611デフォルトの名無しさん
2010/06/17(木) 22:07:31var obj = new Object();
としといて
lock (obj) { s_x = 1; s_ya = s_y; }
と
lock (obj) { s_y = 1; s_xa = s_x; }
で、俺的には万事解決。
色々深遠な問題もあるだろうけど、そんなこと知ったこっちゃねー♪
0612デフォルトの名無しさん
2010/06/17(木) 22:18:21これはあくまで予想と異なる結果になることがあるのを示しているだけで。
ただ、こういうコードを、無意識のうちに、動作を無意識に期待して書いてしまう可能性はあるかもしれない。
まあ普通はマルチスレッドで何かを書く場合は常に同期のタイミングは考慮しながら書くから、
多分めったなことはないとは思うけどね。
0613デフォルトの名無しさん
2010/06/17(木) 22:24:25既存の処理をなんにも考えずにマルチスレッドにしちゃうのが・・・
0614デフォルトの名無しさん
2010/06/17(木) 22:52:56参照順は変更されるんじゃないの?
volatile読み込みは他の読み込みよりも早く行われるんでしょ?
0615デフォルトの名無しさん
2010/06/17(木) 22:56:00まあね。orz
0616デフォルトの名無しさん
2010/06/17(木) 23:00:46変更されないよ。
>volatile読み込みは他の読み込みよりも早く行われるんでしょ?
そうじゃない。
volatile読み取りよりも後ろにある読み取りが、
volatile読み取りよりも前に移動されるような最適化は行われない
ってこと。
0617デフォルトの名無しさん
2010/06/17(木) 23:07:25あぁー、そう読むのかぁ。
もっと精進します。
0618デフォルトの名無しさん
2010/06/17(木) 23:10:04例えば
int data1;
int data2;
volatile bool completed;
みたいな変数定義を行って、
スレッドAで、
data1 = 1
data2 = 2
completed = true;
みたいなことをして、
スレッドBで、
if (completed)
{
//data1とdata2を読み取り
}
みたいにしたとき、data1とdata2の読み取りで、
確実にスレッドAで更新された結果にアクセスできる。
これは、
volatile書き込みより前の書き込みは必ずvolatile書き込みより前に行われ、
volatile読み取りより後の読み取りは、必ずvolatile読み取りより後に行われることが保証されてるから。
0619デフォルトの名無しさん
2010/06/17(木) 23:12:58data1とdata2が、スレッドAが書き込んだ結果であることを保証できない。
0620デフォルトの名無しさん
2010/06/17(木) 23:14:24> volatile書き込みより前の書き込みは必ずvolatile書き込みより前に行われ、
> volatile読み取りより後の読み取りは、必ずvolatile読み取りより後に行われる
リンク先にも確かにかいてあるけれど、これに当てはまらないものはすべて保障されていないと考えるべきなのかな。
volatile書き込みより後ろの書き込みが、volatile書き込みより前に行われる可能性とかそういうの。
0621デフォルトの名無しさん
2010/06/17(木) 23:24:01ECMAのCLIのメモリモデルでも、
・読み取りと書き込みは、volatile の読み取り前に移動することができない。
・読み取りと書き込みは、volatile の書き込み後に移動することができない。
というルールしかないので保証されない。
ただし、CLR2.0のメモリモデルではもう少し保証が強い。
詳しくは
ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S3
なんだけど、分かりにくいなw
少なくとも書き込み順序は変更されないはず。
なぜなら、CLR2.0では実質書き込みは全て「解放形式」になっているらしいので。
0622デフォルトの名無しさん
2010/06/17(木) 23:26:364.書き込みは、同一スレッドからの別の書き込みを超えて移動することができない。
があるので、書き込み順序はたとえvolatileでなくとも、変更されることはないな。
0623デフォルトの名無しさん
2010/06/17(木) 23:42:25volatileの意味は文字通りその変数を非同期的に変更されうるものとして
扱うという意味以上でも以下でもないはずだと思うんだけど....
0624デフォルトの名無しさん
2010/06/17(木) 23:48:23俺もそれだけの意味だと思っていたんだけど、C#では違うということを恥ずかしながら今日知りました。
0625デフォルトの名無しさん
2010/06/17(木) 23:52:240626デフォルトの名無しさん
2010/06/18(金) 00:02:390627デフォルトの名無しさん
2010/06/18(金) 00:04:30お前だろ
0628デフォルトの名無しさん
2010/06/18(金) 00:08:54マルチスレッドではvolatileに頼るなということだな。
0629デフォルトの名無しさん
2010/06/18(金) 00:08:57遅くても排他処理でガチガチ泥臭く書いたほうがメンテナンスとか考えると現実的じゃね?
忘れた頃に見直す度に一々頭の中で再検証すんのかよ、って話。
0630デフォルトの名無しさん
2010/06/18(金) 00:10:43ちゃんと理解できたら正しく速く動作するライブラリを書きたいものです。
0631デフォルトの名無しさん
2010/06/18(金) 00:13:12なんだ、暴れたのがいまさら恥ずかしくなったか?
0632デフォルトの名無しさん
2010/06/18(金) 01:05:25こいつがどこまでもバカなだけ。
0633デフォルトの名無しさん
2010/06/18(金) 01:07:47基本的には正しい判断だと思うよ。
lockだって別にそんなに重いわけじゃない(状況によるが)。
0634デフォルトの名無しさん
2010/06/18(金) 01:09:53言語仕様からMSDNマガジンの詳細な記事から
何から何まで何度も示されてるのに意味が分からないなら
お前は本当に頭が悪いんだろう。
0635デフォルトの名無しさん
2010/06/18(金) 01:57:39s_x = 1;
s_ya = s_y;
の部分について、s_yの読み取りが先に行われて、
s_xの書き込み、s_yaの書き込みが行われたってことになるの?
0636デフォルトの名無しさん
2010/06/18(金) 05:13:580637デフォルトの名無しさん
2010/06/18(金) 06:28:32鉄板でしょう。
0638デフォルトの名無しさん
2010/06/18(金) 08:58:250639デフォルトの名無しさん
2010/06/18(金) 09:10:490640デフォルトの名無しさん
2010/06/18(金) 09:58:10string[] b = a as string[];
この処理は純粋にaへの代入とbへのキャストが行われているだけで、
List<object>とList<string>を型変換するときのようなインスタンス
の新規作成はされないと考えてよいのでしょうか?
0641デフォルトの名無しさん
2010/06/18(金) 13:53:30class A {
object lockobj = new object;
string _a;
public a {
get {
lock(lockobj){
return _a;
}
}
set {
lock(lockobj){
_a = value;
}
}
}
これって、ちゃんとロック掛かるんだろうか?
0642デフォルトの名無しさん
2010/06/18(金) 13:54:340643デフォルトの名無しさん
2010/06/18(金) 13:56:56はい
0644デフォルトの名無しさん
2010/06/18(金) 15:16:12いいえ、コンパイルすらできません
0645デフォルトの名無しさん
2010/06/18(金) 15:25:20なんで頭いい人たちみんなスルーなの
0646デフォルトの名無しさん
2010/06/18(金) 15:31:280647デフォルトの名無しさん
2010/06/18(金) 16:28:23型がないからってか?
質問の意図はそうじゃないだろ・・・
0648デフォルトの名無しさん
2010/06/18(金) 17:16:46質問のポイントはLockのスコープからのreturnだろ?
ロックはreturnステートメントの実行直後にはずれるから普通に使える。
0649デフォルトの名無しさん
2010/06/18(金) 18:46:23>>553の件少し判った気がする。
環境依存があるようだからここにいる人たちも確認してもらえると助かる。
Releaseモードでも確認できるように修正。コンソールに出力させるようにする。
>Debug.Assert(s_xa == 1 || s_ya == 1);
if (!(s_xa == 1 || s_ya == 1)) Console.WriteLine("* {0}, {1}", s_xa, s_ya);
こちらの環境で確認できたこと。
マルチCPU、マルチコア、ハイパースレッディングでも起きる。
シングルCPU環境では起きない。
Relaseビルド、Debugビルドはどちらでも良い。
Debug実行時に起きる。Debugなしで実行では起きない。
結論
予想が当たってればOoOとか高尚な問題でなく、IDEのデバッガのバグの可能性がある。
0650デフォルトの名無しさん
2010/06/18(金) 19:06:46すっこんでろ
0651デフォルトの名無しさん
2010/06/18(金) 20:41:20俺の環境では、デバッグなし実行でも起こってる。
0652デフォルトの名無しさん
2010/06/18(金) 20:43:41ちゃんとロックかかるってのはどういう意味で言ってる?
ロック自体はもちろん期待通り普通にかかるが、
objA.A =
objA.A + "hoge";
なんてのをアトミックに実行することは当然ながらできない。
0653デフォルトの名無しさん
2010/06/18(金) 20:44:30objA.A = objA.A + "hoge";
な。
0654デフォルトの名無しさん
2010/06/18(金) 21:15:29なんか違わないか?
その例だと、スレッドBでdata1,data2が「正しく」読める保証は何もないのでは?
でなきゃ、そもそもvolatileって何だって話になる。
0655デフォルトの名無しさん
2010/06/18(金) 21:26:12>でなきゃ、そもそもvolatileって何だって話になる。
どういう意味??
何言ってるのかわからない。
そりゃまあ>>618には実際にはいろいろ前提があるのは確かだが、
文脈で言いたい事柄の意図は通じると思うが。
0656デフォルトの名無しさん
2010/06/18(金) 21:29:24>その例だと、スレッドBでdata1,data2が「正しく」読める保証は何もないのでは?
なぜ保証がないのかを具体的に書けばそちらの意図はわかるかもしれん。
0657デフォルトの名無しさん
2010/06/18(金) 21:33:090658デフォルトの名無しさん
2010/06/18(金) 21:35:39そもそもその保証がない(コンパイラの最適化によって変数そのものには
アクセスしない可能性がある)から、そういう可能性を排除するためのvolatileの
はずなんだけど....
どうもこのスレ、分かってるのか分かってないのかよく分からん人が多いよな
0659デフォルトの名無しさん
2010/06/18(金) 21:38:320660デフォルトの名無しさん
2010/06/18(金) 21:42:040661デフォルトの名無しさん
2010/06/18(金) 21:43:490662デフォルトの名無しさん
2010/06/18(金) 21:44:48それがよくある誤解。そんなことは起こらない。
何度も何度も何度も出してるけど
ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx
でも読んでみ。
※今はC#のvolatileの話だぜ
0663デフォルトの名無しさん
2010/06/18(金) 21:49:590664デフォルトの名無しさん
2010/06/18(金) 21:51:18メモリモデルの意味を全く理解してないな。
だったら、例えばもしlockで排他制御してた場合に、
他スレッドで更新した変数をlock内できちんと読めるのはなぜか考えてみな。
最適化で削除されるならそれすら保証されなくなる。
lock内では削除したらダメってコンパイラにはわかってるだろとか考えなしなこと言うなよ。
lock内から呼び出される普通のメソッドだってあるんだからな。
コンパイル時にそこがlock内かどうかなんて判断は無意味なこと。
0665デフォルトの名無しさん
2010/06/18(金) 21:53:01だからvolatileの話じゃないし。
その参照先のどこにも「C#ではキャッシュを読む最適化は行われない」
とは書いてないように思うが。
0666デフォルトの名無しさん
2010/06/18(金) 21:58:40------
読み取りが、同一スレッドから同一ロケーションに対する別の読み取りに隣接している場合、その読み取りは削除のみ可能。
書き込みが、同一スレッドから同一ロケーションに対する別の書き込みに隣接している場合、その書き込みは削除のみ可能。
規則 5 により、複数の読み取りまたは書き込みを隣接させてから、本規則を適用することが可能です。
------
0667デフォルトの名無しさん
2010/06/18(金) 22:01:01>とは書いてないように思うが。
あのな、volatile読み取りより後の読み取りは必ずvolatile読み取りより後で実行されるってのは、
CPUのキャッシュ制御を含んだ話だよ。
>>618
ではvolatile読み取りの後に変数にアクセスしてるだろうが。
だから必ずキャッシュではなく(別スレッドで更新された)最新の値が読み取られる。
っていうかそのためのvolatileだって話。
0668デフォルトの名無しさん
2010/06/18(金) 22:02:41>その参照先のどこにも「C#ではキャッシュを読む最適化は行われない」
>とは書いてないように思うが。
これはCPUキャッシュじゃなくて、レジスタにキャッシュするとか、そういう意味で書いてるのか?
それなら、それこそ>>666の話だ。
隣接する同一ロケーションからの読み取り以外で、読み取りが最適化によって削除されることはない。
0669デフォルトの名無しさん
2010/06/18(金) 22:10:40「ケースAの場合、readのみが削除可能」という文章は、
「readが削除されるのはケースAの場合のみである」という意味ではない。
大丈夫?
>>667
どう読んでも君が思ってるような意味には解釈できないと思うが...
「処理Aと処理Bはシーケンシャルに実行されます」の意味は、
処理Aに続いて行われる処理Bに対して最適化が行われない、などということを意味しない。
0670デフォルトの名無しさん
2010/06/18(金) 23:40:030671デフォルトの名無しさん
2010/06/19(土) 00:00:00>「readが削除されるのはケースAの場合のみである」という意味ではない。
>大丈夫?
あほくさいこと言う前にそのページ全体をよく読んでみろよ。
メモリモデルをどのように定義してるか書いてあるから。
「メモリ モデルは、順次一貫性モデル (最も制限的かつ厳密なモデル) をベースとし、」ってとこらへんな。
だいたいそんなこと言ったら書いてないことだらけなんだから、そういう読み方じゃおかしいことくらいわかろうに。
>「処理Aと処理Bはシーケンシャルに実行されます」の意味は、
>処理Aに続いて行われる処理Bに対して最適化が行われない、などということを意味しない。
どこの記述のことを言ってるのかわからんがな、処理Bの最適かって具体的に何のことを言ってる?
読み取りの最適化なら、前に読んだ値をキャッシュしておくくらいしかないだろ。
メモリモデルでは、そういうのを読み取りを前に移動するという風に定義してるんだよ、上のページにちゃんと書いてある。
そして読み取りはvolatile読み取りより前に移動できない、
つまり、volatile読み取りより前に読み取りをキャッシュしておくという最適化は許されない。
全部書いてある。
0672デフォルトの名無しさん
2010/06/19(土) 00:04:49メモリモデルのこととかある程度わかってる人間ならすぐに理解できる話だ。
volatile絡みのルールの話も、マルチスレッドでのメモリモデルの一般的な話を理解してるなら
はっきり言って常識レベルの話(ごくごく一般的なルール、javaのメモリモデルも同じようなルール)。
一回マルチスレッドのメモリモデルや順序について詳しく調べてみ。
0673デフォルトの名無しさん
2010/06/19(土) 00:17:33お前が分かってないことははっきりしてる。
0674デフォルトの名無しさん
2010/06/19(土) 00:27:55>そもそもその保証がない(コンパイラの最適化によって変数そのものには
>アクセスしない可能性がある)から、そういう可能性を排除するためのvolatileの
>はずなんだけど....
ttp://msdn.microsoft.com/ja-jp/library/aa691105.aspx
Cとかの感覚で言ってるのかもしれないが、今どきのマルチスレッドを前提とした
havaやC#のような言語では、そう簡単にアクセスそのものが消されることはないよ。
マルチスレッドで正常な動作を保証するために(保証するようなコーディングができるようにするために)、
メモリモデルというものを定義して、そのルール内で最適化を行うようになってる。
だからlockやvolatileなどをルールに従って使用して、正常に動作することが保証できるコーディングを行える。
0675デフォルトの名無しさん
2010/06/19(土) 00:36:38>>618のような動作を正常に行えるようにvolatileを使う例が書いてあるな。
まあ日本語がおかしくて意味不明な感じに読めてしまうけどな。
言ってることはまさに>>618と同じ。
0676デフォルトの名無しさん
2010/06/19(土) 00:38:40using System.Threading;
class Test
{
public static int result;
public static volatile bool finished;
static void Thread2() {
result = 143;
finished = true;
}
static void Main() {
finished = false;
// Run Thread2() in a new thread
new Thread(new ThreadStart(Thread2)).Start();
// Wait for Thread2 to signal that it has a result by setting
// finished to true.
for (;;) {
if (finished) {
Console.WriteLine("result = {0}", result);
return;
}
}
}
}
この例では、次のように出力されます。
result = 143
この例では、Main メソッドが Thread2 メソッドを実行する新しいスレッドを開始します。このメソッドは、値を result という非 volatile フィールドに格納し、
次に volatile フィールド finished に true を格納します。メイン スレッドは、フィールド finished が true に設定された時点で、フィールド result を読み込みます。
finished は volatile として宣言されているため、メイン スレッドはフィールド result から値 143 を読み込む必要があります。
フィールド finished が volatile として宣言されていない場合は、finished への格納後に result への格納がメイン スレッドから参照可能になります。
その結果、メイン スレッドがフィールド result から読み込む値は 0 になります。finished を volatile フィールドとして宣言すると、このような矛盾を回避できます。
0677デフォルトの名無しさん
2010/06/19(土) 00:46:040678デフォルトの名無しさん
2010/06/19(土) 13:25:41かたくなにそう信じてるやつがいるんだな…
元々意味のない参照ならそうなる場合はあるが、
普通ほとんどの場合は違うのに。
0679デフォルトの名無しさん
2010/06/19(土) 13:38:21キリッ
ついていけないならくだらんケチつけなきゃいいのに
0680デフォルトの名無しさん
2010/06/19(土) 16:08:49お前はもうマルチスレッドとか無理だからあきらめろw
0681デフォルトの名無しさん
2010/06/19(土) 18:18:540682デフォルトの名無しさん
2010/06/19(土) 18:31:32コールしているアセンブリの署名を調べる。
0683デフォルトの名無しさん
2010/06/19(土) 18:41:02kwsk!
ちなみにクラスアセンブリは自前のソース月の物でありまする><
0684デフォルトの名無しさん
2010/06/19(土) 19:09:18DLLのアクセス制限云々の機能ではない
0685デフォルトの名無しさん
2010/06/19(土) 19:29:04がっくし・・・・
ProjectA ---{OK}--- A.dll
第三者のProject ---{NG}--- A.dll
みたいな事をやりたい時はみんなどうしてるのん?
0686デフォルトの名無しさん
2010/06/19(土) 19:32:120687デフォルトの名無しさん
2010/06/19(土) 19:35:14不正リンクされて盗まれても「でへへっ!」とか言うだけ?
うそーん><
0688デフォルトの名無しさん
2010/06/19(土) 19:38:50DLLのファイルかフォルダにNTFSのアクセス権つければよくね?
0689デフォルトの名無しさん
2010/06/19(土) 19:47:26リフレクション使ってクラス調査→不正リンク→(゚∀゚ )アヒャヒャ
という.net固有の糞みたいな問題が解決するけど
未だに対策は難読化しかない。
0690デフォルトの名無しさん
2010/06/19(土) 19:53:51売り物ならライセンス処理つけるだろうし。
お買い上げありがとうございました。だろ?
0691デフォルトの名無しさん
2010/06/19(土) 19:55:50盗まれたら裁判すればいいし(キリッ
0692デフォルトの名無しさん
2010/06/19(土) 19:58:48盗んだほうはC++で書きましたってオチだ
0693デフォルトの名無しさん
2010/06/19(土) 20:08:44そういうときは法務部門や顧問弁護士の出番。
0694デフォルトの名無しさん
2010/06/19(土) 20:18:14裁判なんざ普通は起こせないしそもそも把握すること事態が不可能
0695デフォルトの名無しさん
2010/06/19(土) 20:47:430696デフォルトの名無しさん
2010/06/19(土) 20:50:51自作パッカー作ったところで焼け石に水
理想は寝て言え
0697デフォルトの名無しさん
2010/06/19(土) 20:50:51どのアセンブリからコールされているかはわかるだろ。
そして、そのアセンブリがどのような署名されているかを調べる。
逆コンパイル防止はそれ以前の問題。
0698デフォルトの名無しさん
2010/06/19(土) 21:05:35手間かかりすぎだろ
0699デフォルトの名無しさん
2010/06/19(土) 21:07:48まあ改ざんされたらもうだめだけどな。
0700デフォルトの名無しさん
2010/06/19(土) 21:45:18public class MyLicence : License {
public override void Dispose() {}
public override string LicenseKey { get { return ""; } }
}
public class MyLicenceProvider : LicenseProvider {
public override License GetLicense(LicenseContext context, Type type, object instance, bool allowExceptions) {
if (allowExceptions) {
string exename = Path.GetFileName(Assembly.GetEntryAssembly().Location);
if (! exename.Equals("MyLicenceTest.exe")) {
throw new LicenseException(type, instance, "do't licenced");
}
}
return new MyLicence();
}
}
[LicenseProvider(typeof(MyLicenceProvider))]
public class TestClass {
License license;
public TestClass() {
license = LicenseManager.Validate(typeof(TestClass), this);
}
}
とかでもいいんじゃね?呼び出し元exe名縛り。
0701デフォルトの名無しさん
2010/06/19(土) 21:54:35中々面白いアプローチだと思う。
0702デフォルトの名無しさん
2010/06/19(土) 21:59:050703デフォルトの名無しさん
2010/06/19(土) 22:05:48そりゃどうも。えっへん!
0704デフォルトの名無しさん
2010/06/19(土) 22:06:080705デフォルトの名無しさん
2010/06/19(土) 22:07:590706デフォルトの名無しさん
2010/06/19(土) 22:10:53Dispose()しといたほうがいいだろね。
0707デフォルトの名無しさん
2010/06/19(土) 22:14:16同時利用数をデクリメントするとか
空でも全く問題ない
0708デフォルトの名無しさん
2010/06/19(土) 22:20:590709デフォルトの名無しさん
2010/06/19(土) 22:48:040710デフォルトの名無しさん
2010/06/19(土) 23:10:480711デフォルトの名無しさん
2010/06/19(土) 23:30:090712デフォルトの名無しさん
2010/06/19(土) 23:33:20FileSecurity filesecurity = File.GetAccessControl(path);
(pathはstring型でファイルの絶対パスが代入されています)
としました。
このファイルを他のアカウントで作成して、
アクセス権限も拒否にしたら、デバッグ環境でですが、
'/'アプリケーションサーバーエラーが発生しました。
と出て、実行できませんでした。
とりあえず、try catchを使い、アクセス禁止として
処理すれば、実行エラーは回避できました。
DACLとかいまいちわかっていないのですが、
なにか他の回避方法はあるでしょうか?
よろしくお願いします。
0713デフォルトの名無しさん
2010/06/19(土) 23:33:38どうせその他の部分で穴だらけ
0714デフォルトの名無しさん
2010/06/20(日) 00:00:25public class Hoge
{
private Hoge() {}
public static Hoge()
{
string exename = Path.GetFileName(Assembly.GetEntryAssembly().Location);
if (exename != "hoge.exe")
throw new Exception();
return new Hoge();
}
}
でも、リフレクションやLCGを使われたらどうなるの?
0715デフォルトの名無しさん
2010/06/20(日) 00:27:30参考になったけど、正直実用的な意味があるとは思えんなあ…
アセンブリがロードされた時に何らかのスタティックメソッドの実行を強制できれば
いろいろ面白いことが出来そうな気がするんだけど
0716デフォルトの名無しさん
2010/06/20(日) 00:43:560717デフォルトの名無しさん
2010/06/20(日) 01:26:14※ SID : GetComputerName、LookupAccountName API参照
※ MAC : NetworkInterface.GetPhysicalAddress 参照
※ PNPDeviceID : WMI で Win32_DiskDrive, Win32_DiskDriveToDiskPartition, Win32_LogicalDiskToPartition, Win32_LogicalDisk 参照
そういった利用者を一意に特定出来る情報をプロダクトキーと一緒に公開鍵で
暗号化してライセンス認証サーバに送って、サーバで認証後に秘密鍵で
特定情報を暗号化して送り返してもらったものを記録。
その情報を公開鍵で復号して動作環境での取得値と一致していなかったら
ライセンス違反と判断・・・とかメンドクサい実装は必要に応じて。
0718デフォルトの名無しさん
2010/06/20(日) 01:53:370719デフォルトの名無しさん
2010/06/20(日) 02:49:16されてライセンス処理部を改ざんされたら無理。
それを言うことに意味はあるのかな?
0720デフォルトの名無しさん
2010/06/20(日) 03:02:300721デフォルトの名無しさん
2010/06/20(日) 05:35:330722デフォルトの名無しさん
2010/06/20(日) 11:42:560723デフォルトの名無しさん
2010/06/20(日) 11:47:550724デフォルトの名無しさん
2010/06/20(日) 12:00:08その属性にstaticコンストラクタを仕込んでおけば
dllを読みこんだタイミングで実行されたりしないかなあ
0725デフォルトの名無しさん
2010/06/20(日) 12:00:320726デフォルトの名無しさん
2010/06/20(日) 12:08:28されない
カスタム属性っていうのはあくまでメターデータのラッパークラスなので
インスタンスが作られるのはその属性を参照しようとしたとき
0727デフォルトの名無しさん
2010/06/20(日) 12:26:530728デフォルトの名無しさん
2010/06/20(日) 12:32:24(゚∀゚)
0729デフォルトの名無しさん
2010/06/20(日) 18:55:140730デフォルトの名無しさん
2010/06/20(日) 19:30:280731デフォルトの名無しさん
2010/06/20(日) 19:53:32遅い
0732デフォルトの名無しさん
2010/06/20(日) 21:27:20あんなのすら分からなかったらそもそもコードかけねぇだろ。
0733デフォルトの名無しさん
2010/06/20(日) 21:46:45インデントの差だろ
0734デフォルトの名無しさん
2010/06/20(日) 22:42:20なんて当分は無縁だということ。
0735デフォルトの名無しさん
2010/06/20(日) 22:50:21専ブラで>>700をポップアップさせて見ればいい
0736デフォルトの名無しさん
2010/06/21(月) 00:53:370737デフォルトの名無しさん
2010/06/21(月) 10:19:51thread.spinwaitとthread.sleepってどう違うんですかっ?
MSDN読んでも引数の違いぐらいしかわからないです!
高度な技術を持ってる人、おすえて!
0738デフォルトの名無しさん
2010/06/21(月) 10:31:490739デフォルトの名無しさん
2010/06/21(月) 11:41:25わかりません!
0740デフォルトの名無しさん
2010/06/21(月) 18:04:49それともpartialで分割するべきですか?(あまり意味ないと思いますが)
0741デフォルトの名無しさん
2010/06/21(月) 18:11:42ユーザーコントロールにするとか、ビジネスロジックを別クラスにするとか、
そんな感じ。
0742デフォルトの名無しさん
2010/06/21(月) 18:49:350743デフォルトの名無しさん
2010/06/21(月) 20:37:11そこそこ普通のフリーツールくらいの規模でもメインウィンドウのクラスだけで何千行にもなっちゃう。
0744デフォルトの名無しさん
2010/06/21(月) 20:40:430745デフォルトの名無しさん
2010/06/21(月) 20:43:21あれたぶん2010でも放置なんだろうな
0746デフォルトの名無しさん
2010/06/21(月) 21:11:27へったくそだなぁ
0747デフォルトの名無しさん
2010/06/21(月) 21:12:310748デフォルトの名無しさん
2010/06/21(月) 21:29:20具体的に教えてよ
0749デフォルトの名無しさん
2010/06/21(月) 22:12:54イベントが盛りだくさんなの?
0750デフォルトの名無しさん
2010/06/21(月) 22:17:360751デフォルトの名無しさん
2010/06/21(月) 22:28:160752デフォルトの名無しさん
2010/06/21(月) 23:05:110753デフォルトの名無しさん
2010/06/21(月) 23:35:240754デフォルトの名無しさん
2010/06/21(月) 23:50:20素人臭い意見だな。
そんなわけないでしょw
実際ある程度やってみれば俺の言ってる意味がわかるよ。
0755デフォルトの名無しさん
2010/06/21(月) 23:54:220756デフォルトの名無しさん
2010/06/22(火) 00:07:04ユーザーコントロール使ったこともない自称玄人乙
0757デフォルトの名無しさん
2010/06/22(火) 00:12:58#define BEGIN {
と同じくらいひどいと思うんだけど、素人だからですかね
0758デフォルトの名無しさん
2010/06/22(火) 00:15:09IDEのコード生成は信用できないので禁止、くらいだろ。
0759デフォルトの名無しさん
2010/06/22(火) 00:24:310760デフォルトの名無しさん
2010/06/22(火) 00:29:02「だから」避けろとか使うべきでない、などとは一言も言ってない。
0761デフォルトの名無しさん
2010/06/22(火) 00:31:030762デフォルトの名無しさん
2010/06/22(火) 00:34:15デザイナがバグって正常に表示されないというのは素人がよくハマる部分だから
気をつけろって言う意味?
0763デフォルトの名無しさん
2010/06/22(火) 00:36:18ネトウヨみたいなよくわからん被害妄想だなおい。
こっちは単にVSのデザイナはユーザーコントロールを使うとバグって
正常に表示されなくなる場合がある、という事実を言ってるだけ。
っていうか、この程度の経験もない奴が偉そうに「ユーザーコントロール使え」
とか人に講釈垂れてるっていい根性してるよな。
0764デフォルトの名無しさん
2010/06/22(火) 00:40:46VS自体のバグだから使う側が玄人か素人か関係ないし、
気をつけようもないんだけどさだから。
0765デフォルトの名無しさん
2010/06/22(火) 01:53:370766デフォルトの名無しさん
2010/06/22(火) 02:11:16VS2010に持ってきたが、いまのとこ一度も腐ってない
0767デフォルトの名無しさん
2010/06/22(火) 02:36:55これは楽しみ
0768デフォルトの名無しさん
2010/06/22(火) 03:24:29そんなにフォーム固有の処理って多いもん?
0769デフォルトの名無しさん
2010/06/22(火) 03:50:48ユーザコントロール作ったらバグるって言われるよ
0770デフォルトの名無しさん
2010/06/22(火) 04:23:340771デフォルトの名無しさん
2010/06/22(火) 04:25:560772デフォルトの名無しさん
2010/06/22(火) 04:29:59ボタンコントロールにだけ関連する処理ならユーザーコントロールか
継承したクラス作ってそこへ入れてしまえばいいんじゃね?
Formにだらだら書くよりすっきりするよ
0773デフォルトの名無しさん
2010/06/22(火) 04:35:29デザイナの意味を成さなくなってくるな
0774デフォルトの名無しさん
2010/06/22(火) 04:40:23基本や構造を理解せずに何となくソフトを作るプログラマーが増えた
マシンパワーが有り余ってるから、いいかげんな作りのソフトでもそれなりに動いてしまうのも善し悪し
0775デフォルトの名無しさん
2010/06/22(火) 05:00:27もう少し詳しく。
適当に予想してレスすると怒られる流れっぽいので。
0776デフォルトの名無しさん
2010/06/22(火) 05:11:51成すよ
まあこのあたりみてくれ
http://cs2ch.blog123.fc2.com/blog-entry-8.html
0777デフォルトの名無しさん
2010/06/22(火) 05:33:54イベント追加する時に+=を書かなくちゃいけなくなるとか
0778デフォルトの名無しさん
2010/06/22(火) 05:35:24hoge.Click +=
とか書いてTAB2回押せば勝手につくってくれるじゃん
0779デフォルトの名無しさん
2010/06/22(火) 05:47:02プロパティのイベントを選べないじゃん
0780デフォルトの名無しさん
2010/06/22(火) 05:54:13だからその辺は>>776読めって
一旦デバックすれば継承したクラスも同じように操作できるから
それができないとFormを継承したForm1の設定はどうやって実現するんだよ
普段コードをごりごり書いてるのはFormを継承したクラスだぞ
0781デフォルトの名無しさん
2010/06/22(火) 06:01:54MainFormのデザイナから継承させたコントロールのイベントを
プロパティウィンドウからメソッド生成させると
結局MainFormのクラス内にメソッドが追加されないか?
これじゃ分割出来てないんだが
0782デフォルトの名無しさん
2010/06/22(火) 10:25:36インタフェースの仕事としては、どのボタンがクリックされたかを伝えるだけで良いんだからさ。
それ以上に、動かす用途によって書き方は変わると思うんだが。
0783デフォルトの名無しさん
2010/06/22(火) 11:17:47ツールボタン的なものや、データ行それぞれに対するコマンドあたりだろうけど
そういうのは共通の入り口から振り分けられる
0784デフォルトの名無しさん
2010/06/22(火) 12:30:020785デフォルトの名無しさん
2010/06/22(火) 13:01:54{
MessageBox.Show("1");
}
private void button2_clickClick(object sender, EventArgs e)
{
MessageBox.Show("2");
}
...
private void button100_clickClick(object sender, EventArgs e)
{
MessageBox.Show("100");
}
なんてコードがあったら継承して、一つに纏めろと言いたくなるわな。
0786デフォルトの名無しさん
2010/06/22(火) 13:34:52使う方も大変だな、ボタン100個
0787デフォルトの名無しさん
2010/06/22(火) 14:01:280788デフォルトの名無しさん
2010/06/22(火) 14:03:54TagでもNameでもいいので識別に使う情報も足せておけば
イベントハンドラで余裕で処理できるよ
0789デフォルトの名無しさん
2010/06/22(火) 14:10:08>イベントハンドラで余裕で処理できるよ
TagでもNameでもいいので識別に使う情報持たせておけば
一つのイベントハンドラで余裕で処理できるよ
0790デフォルトの名無しさん
2010/06/22(火) 14:40:49継承も何も、一つだけ作って後は全部同じの指定しろって感じ?w
IDEからもできるしな!
0791デフォルトの名無しさん
2010/06/22(火) 14:46:51部品化したにもかかわらず、何処かのフォームの勝手な理由で部品を変更しようとするの?
>>790
MessageTextみたいなプロパティをつくり、IDEからも操作できるようにしておき、
クリックされた時にMessageBox.Show(MessageText)を行うようなボタンを作成すれば
IDEで配置→MessageTextを設定
という作業になるよ
0792デフォルトの名無しさん
2010/06/22(火) 14:49:52private void Form1_Load(object sender, eventargs e)
{
Foreach (Control c in Panel1.Controls)
{
if(typeof(c)==typeof(Button)) ((Button)c).Click += new EventHandler(softkeys_button_click);
}
}
private void softkeys_button_click(object sender, eventargs e)
{
Textbox1.Text = String.concat(Textbox1.Text, ((Button)sender).Text);
}
0793デフォルトの名無しさん
2010/06/22(火) 15:05:210794デフォルトの名無しさん
2010/06/22(火) 18:05:57この例だと継承なんていらないでしょ。
button_clickに全てまとめて自分自身を判別すればいいんじゃまいか。
0795デフォルトの名無しさん
2010/06/22(火) 18:09:31自分自身を判断する際に適当なプロパティがあるかどうかってところだな。
0796デフォルトの名無しさん
2010/06/22(火) 18:15:47Tagになんでも設定できるので識別情報を入れるか
Nameにbuttonxxxと言った感じでxxxの部分に識別情報を入れておけばOK
0797デフォルトの名無しさん
2010/06/22(火) 18:24:57Tagってそういうのに使っちゃダメなの?
0798デフォルトの名無しさん
2010/06/22(火) 18:28:35その他のコントロールもあったら数百個のイベントがあってもおかしくない。
そしてそれらが共通しない機能なのも普通にあり得る。
そういう状況の時にユーザコントロールを使えって話じゃないの?
でもそれだとイベントを関連付けるときにプロパティウィンドウは使えませんよーって話。
0799デフォルトの名無しさん
2010/06/22(火) 18:37:59>イベントを関連付けるときにプロパティウィンドウは使えませんよ
・・・お前は何を言ってるんだ・・・?
継承したのもカスタムのも、普通にプロパティ窓からイベント付けられるぞ?
0800デフォルトの名無しさん
2010/06/22(火) 18:46:41Firefoxみたいにタブに閉じるしいたけ付けたいんだけど
オーナードローするしかない?
0801デフォルトの名無しさん
2010/06/22(火) 18:47:35ユーザーコントロールにするのなら、
メソッドやプロパティ同様に、イベントもコントロール内で定義したらプロパティウィンドウで使えるっしょ。
0802デフォルトの名無しさん
2010/06/22(火) 18:49:40タブ部分に閉じるボタンってこと?
labelなんかだと配下にbuttonとか置けるんだけど
タブコントロールのタブ部分にできたっけかな?
0803デフォルトの名無しさん
2010/06/22(火) 18:59:31うん、オーナードロー。
0804デフォルトの名無しさん
2010/06/22(火) 19:11:17>>801
あれ?
プロパティウィンドウからイベントを自動生成+関連付けしたら、結局メインクラスに生成されない?
メインクラスに生成されたらわざわざユーザコントロール作った意味がない気が…。
0805デフォルトの名無しさん
2010/06/22(火) 19:16:44ユーザコントロールの方のプロパティウィンドウ使えばいいんだよね。
0806デフォルトの名無しさん
2010/06/22(火) 19:20:21どうもタブそのものを取得するのが難しいみたい
だから結局>>803って結論しかないか
WPFなら簡単なのかねー?
0807デフォルトの名無しさん
2010/06/22(火) 19:21:55あとはタブぽい動きをするユーザーコントロールを自分で作るかだねえ
0808デフォルトの名無しさん
2010/06/22(火) 19:22:12RichTextBoxで行間をピクセル単位で指定する方法はありますか?
0809デフォルトの名無しさん
2010/06/22(火) 19:34:110810デフォルトの名無しさん
2010/06/22(火) 19:38:29WPFなら簡単だね、タブに何でも入れられる。TabControl in タブなんて意味不明なUIさえ可能だ。
>>808
WinFormのRichTextBoxだと、EM_SETPARAFORMATで設定できないこともない
0811デフォルトの名無しさん
2010/06/22(火) 21:10:050812デフォルトの名無しさん
2010/06/22(火) 21:18:580813デフォルトの名無しさん
2010/06/22(火) 21:30:19VS2010をdisってるの?
0814デフォルトの名無しさん
2010/06/22(火) 22:20:06DirectXをちゃんと使えるようにしろと
0815デフォルトの名無しさん
2010/06/22(火) 22:21:310816デフォルトの名無しさん
2010/06/22(火) 22:24:190817デフォルトの名無しさん
2010/06/22(火) 22:34:17いやはや、NVIDIAにAMD、インテルから感謝状が期待できますのう。
0818デフォルトの名無しさん
2010/06/22(火) 22:39:17Win7がちゃんと動く環境ならWPFは普通に動く
0819デフォルトの名無しさん
2010/06/22(火) 22:42:48煽りじゃなく
C#(.net)が出た当時なんてもっとボロカスに叩かれて「誰が使うんだよw」とか言われてたが
ハードの進化で今は軽い方だと思うけどなー
0820デフォルトの名無しさん
2010/06/22(火) 22:43:470821デフォルトの名無しさん
2010/06/22(火) 22:47:15ちなみに、XP 62.55%、Vista 15.25%、7 12.68% (NetApplications May, 2010)。
いつになったらメジャーになるんだろうかな?
0822デフォルトの名無しさん
2010/06/22(火) 22:48:39見た目がどうでもいいんだったらWindows95時代の格好悪いUIで作ってればいい
今のWinFormsの見た目だって数年後には古臭くて格好悪いと認識されるようになってるよ
0823デフォルトの名無しさん
2010/06/22(火) 22:51:13ワクチンソフトの対応さえあればXP64bit使いたいんだが。
0824デフォルトの名無しさん
2010/06/22(火) 22:51:25まーでも、ここ1〜2年で大分変わると思うけど。
0825デフォルトの名無しさん
2010/06/22(火) 22:52:490826デフォルトの名無しさん
2010/06/22(火) 22:52:50一年近く使っててもイライラする。
0827デフォルトの名無しさん
2010/06/22(火) 22:53:32よくわからんが64bit7でワクチンソフト?ウィルス対策ソフト?なら使ってるよ
0828デフォルトの名無しさん
2010/06/22(火) 22:55:39歴史に学べ
どのOSもメジャーになるのに数年かかってる
SPが2になる頃にはシェア一位になってる
0829デフォルトの名無しさん
2010/06/22(火) 22:57:08では、Vistaもそろそろメジャーに!
0830デフォルトの名無しさん
2010/06/22(火) 22:57:42が、ある程度のスペックならばXPより快適だぞ
XP厨だったのに素直に降参した
0831デフォルトの名無しさん
2010/06/22(火) 22:57:450832デフォルトの名無しさん
2010/06/22(火) 22:57:58カスタマイズしたりショートカットキー使ったり補助ツール使ったりしてたら使い勝手なんか全然変わらないよ
0833デフォルトの名無しさん
2010/06/22(火) 22:58:167の64bit版はワクチンソフトの対応有るけど、XPの64bit版の対応が無いんだよ。
で、泣く泣く7の64bit版使ってる。
0834デフォルトの名無しさん
2010/06/22(火) 22:59:460835デフォルトの名無しさん
2010/06/22(火) 23:01:490836デフォルトの名無しさん
2010/06/22(火) 23:02:050837デフォルトの名無しさん
2010/06/22(火) 23:20:47ライブラリが幅きかせすぎ。
おまけにクリックすると「アクセスが拒否されました」なフォルダ大杉。
エクスプローラでフォルダ開くとフォルダのツリーで現在のフォルダがなぜか一番下にスクロール。投げ飛ばしたくなる。
時々、デスクトップにdesktop.iniが居座って削除出来ない。
ホームグループアイコン、レジストリ弄ってデスクトップから消しても消してもいつのまにか復活。
USBメディア抜き差ししてるとUSBアイコンが消える。まだもう一本刺さってるだろがぁ!
これは相性の問題かもしれないが休止から戻るとNICがだんまりする確率高し。
セキュリティの問題なのか知らないが、旧型のTeraStationと繋ぐときにはグループポリシーでNTLM応答のみ送信にしないとならない。
はぁはぁ・・・他にも色々ありすぎて・・・思い返すと段々腹が立ってきた。
0838デフォルトの名無しさん
2010/06/22(火) 23:25:250839デフォルトの名無しさん
2010/06/22(火) 23:26:280840デフォルトの名無しさん
2010/06/22(火) 23:32:40まだ5年以上MSのサポートもあるわけだし。
ここら辺はうまく使い分けないとな。
0841デフォルトの名無しさん
2010/06/22(火) 23:38:030842デフォルトの名無しさん
2010/06/22(火) 23:39:030843デフォルトの名無しさん
2010/06/22(火) 23:39:31エクスプローラのAlt>F>WがAlt>F>Xに変更されてたりしててだな。
すぐ慣れるんだけどさ。
0844デフォルトの名無しさん
2010/06/22(火) 23:40:53まあ、UIの操作性は確かに難が多い。
単なる慣れの問題と言い切れない改悪点がいろいろあるとは俺も思う。
最悪なのがファイル検索の改悪。
だが、
>おまけにクリックすると「アクセスが拒否されました」なフォルダ大杉。
こんな文句垂れる人はシステムフォルダを隠さない設定にしちゃダメだろw
0845デフォルトの名無しさん
2010/06/22(火) 23:42:57ファイラー使うから7特有のUIとか関係なし
OSは安定さえしてればいいよ
0846デフォルトの名無しさん
2010/06/22(火) 23:44:050847デフォルトの名無しさん
2010/06/22(火) 23:47:02っていうか、使えるファイラある?
Avestaとか使いにくいし、UltraExplorerは期待してたが結局放置状態のようだし
0848デフォルトの名無しさん
2010/06/22(火) 23:47:58マルチCPUに対応してない
サポート切れてセキュリティ死んでる
.Net4が入らない
スリープが終わってる
パフォーマンス悪い
安定云々以前に論外です
>>847
UltraExplorer風のものをdelphiで作ったからそれ使ってる
0849デフォルトの名無しさん
2010/06/22(火) 23:50:17>>847
x-finder使ってる。極稀に落ちるけど気にならないレベル。Win7pro64bit
0850デフォルトの名無しさん
2010/06/22(火) 23:53:20ありがと後で試してみる。
0851デフォルトの名無しさん
2010/06/23(水) 00:25:55例えば SendTo。
実際は SendTo は C:\Users\{ユーザ}\AppData\Roaming\Microsoft\Windows\SendTo
なんだけど、何故か C:\Users\{ユーザ}\SendTo が意味もなく存在してアクセス不能。
こんな変なものがあっても、隠れていたら良いとか言えるのか?
0852デフォルトの名無しさん
2010/06/23(水) 00:40:29>何故か C:\Users\{ユーザ}\SendTo が意味もなく存在してアクセス不能。
うちのセブンちゃんにはありません
0853デフォルトの名無しさん
2010/06/23(水) 00:48:22実際は(管理者権限なら)アクセス権をちゃんと設定すればアクセスできるんだけどさ。
まあ、アクセスを制限されるのに「管理者」って名ばかりなのは何なの、
って突っ込みたい気持ちは俺も分かるけどw
0854デフォルトの名無しさん
2010/06/23(水) 01:17:310855デフォルトの名無しさん
2010/06/23(水) 02:14:51Vistaまではタイムアウトするまでプロセスを殺すことすらできなかった。
VistaからAPI追加されて対応したと思ってたのにVistaでも追加したAPIを使ってないのか殺せなかったなぁ…
0856デフォルトの名無しさん
2010/06/23(水) 02:34:23この仕様のせいで数百個のファイルの入ってるフォルダを別フォルダに移動する時に手動で50個くらいずつ移動しなくちゃいけなくて不便。
0857デフォルトの名無しさん
2010/06/23(水) 03:01:31落ちるとなるとむしろ変なシェル拡張とかが入ってる環境じゃないかと疑いたくなるなぁ。
XPでも数百くらいのファイル数というかただファイルが多いという状況で落ちたことなんて全然ない。
それでもVista以降のエクスプローラの安定感はXPとは比べものにならないと思うよ。
でも、Vistaのエクスプローラは7を触ったあとでは操作性がいろいろクソすぎてもう触る気が起きないので7がお勧めだなぁ。
0858デフォルトの名無しさん
2010/06/23(水) 03:36:59Meは知らんが、2000、XPでは当たり前のように1000ファイルぐらい選択していたよ。
ファイルの種類にもよるんだろか。
0859デフォルトの名無しさん
2010/06/23(水) 03:57:210860デフォルトの名無しさん
2010/06/23(水) 04:06:59> ファイルやフォルダを選択しただけでエクスプローラが落ちる
と何か関係が?
0861デフォルトの名無しさん
2010/06/23(水) 04:22:50普通にFormを継承したMyFormとかTextBoxを継承したMyTextBoxみたいなの使うよな?
デザイナ上で普通に動くし・・・
0862デフォルトの名無しさん
2010/06/23(水) 04:52:330863デフォルトの名無しさん
2010/06/23(水) 09:48:39内部でDI使った更新処理とか超楽ちんだった
過去形なのは今はWPFやってるから!
なんせもっと超楽ちんぽんなのだ!
0864デフォルトの名無しさん
2010/06/23(水) 13:34:20808です。ありがとうございます。ちょっと検索してみます。
0865デフォルトの名無しさん
2010/06/23(水) 19:00:27それらはXP以前のバックアップ系アプリの互換性のために設けられたジャンクション。
Vistaや2008の時に騒ぐなら許せるが、今更過ぎるので許さない。
この情弱開発者が!
0866デフォルトの名無しさん
2010/06/23(水) 20:41:14まあそういうのはドトネトの用語では「カスタムコントロール」なんだけどねw
誰も「ユーザーコントロールに文句」言ってる奴なんていないと思うが、
「俺はデザイナのバグなんか遭遇してことねえよ」って言いたいなら、
だからそりゃ超シンプルなコントロールしか作ってないからだよ
0867デフォルトの名無しさん
2010/06/23(水) 20:59:190868デフォルトの名無しさん
2010/06/23(水) 21:29:070869デフォルトの名無しさん
2010/06/23(水) 21:33:000870デフォルトの名無しさん
2010/06/23(水) 21:46:55バグる話はよく聞くから本当にあるんだろうね。
俺はなったことないからどうでもいいけど。
で、論点ずらして何がいいたい?
0871デフォルトの名無しさん
2010/06/23(水) 21:52:520872デフォルトの名無しさん
2010/06/23(水) 21:54:24もっと使い込めよ!と。
無い物をゴールに置くとかやり手だわぁ
0873デフォルトの名無しさん
2010/06/23(水) 22:44:350874デフォルトの名無しさん
2010/06/23(水) 22:54:490875デフォルトの名無しさん
2010/06/23(水) 22:57:20居座るかが問題だ。
どのPCでも動かそうっていうアプリを組むなら、あと数年はFormsかなぁ。
まあ、いずれにしろ時間の問題だろうけど。
>>873
System.Collections.BitArray なんかはどーだろう?
0876デフォルトの名無しさん
2010/06/23(水) 22:59:03重たいアプリを作るべき。無駄に重たいのではなくてね。
0877デフォルトの名無しさん
2010/06/23(水) 23:07:09フラグ扱いのenumを管理するジェネリッククラスを
作りたかったんですが、何か良い方法はありませんか?
二つをまとめた値をチェック出来るならhashsetでも
いいのですか。
0878デフォルトの名無しさん
2010/06/23(水) 23:09:34ありがとう
試してみます
0879デフォルトの名無しさん
2010/06/23(水) 23:12:430880デフォルトの名無しさん
2010/06/23(水) 23:18:15T BitwiseAnd(T other);
}
こんなん?
0881デフォルトの名無しさん
2010/06/23(水) 23:27:28あれ?2,300個くらいで落ちるのは普通だと思ってた。
てかvistaでも落ちた。
確認したのは98,XP,Vista。あと2000もだったかも。
それぞれ全く違う環境だから特殊なわけじゃないと思うけど。
vistaは比較的新しいノートPCでOS入れ立てで確認。
ファイルはそれぞれのPCで違うけど、同一種類のファイルでも別々の種類のファイルでも確認。
0882デフォルトの名無しさん
2010/06/23(水) 23:44:43けど、それに意味があるとしたら、ある型Tの「論理和」なら「論理和」に
複数の定義がありうる場合だけじゃないのかな。
やっぱ変だと思うけどなw
0883デフォルトの名無しさん
2010/06/24(木) 01:02:27まさしくユーザーコントロールでうまく動かない例じゃないか。
0884デフォルトの名無しさん
2010/06/24(木) 01:10:32開いた直後は特に問題なくてしばらくなにかしてると重くなってくる
段々コンテキストメニューが選択できなくなったり固まったり
パーツが消えたり中身が表示されなくなっていく
でもデザイナ閉じて開きなおすとしばらくはまた普通に使える
コードが悪いとかいう以前の変な動作のことだろ?
0885デフォルトの名無しさん
2010/06/24(木) 02:56:33IEqualityComparer<FileInfo>を継承したMyCompareを使ってExceptしたのですがうまくいきません。
GetHashCode()で return 1;など定まった値を返せばうまくいくので、GetHashCode()の実装が悪いのかと思います。
しかし、オブジェクトを一意に特定するためのメソッドなのだからそういった実装は間違っていると思います。
もしかしたら全然勘違いをしているかもしれませんが、どなたか助け舟をいただけませんか?
よろしくお願いします。
ソース:http://ideone.com/Ttea4
0886デフォルトの名無しさん
2010/06/24(木) 03:50:55ハッシュの計算にフルパス使ってちゃ、
ファイル名と更新日が同じなのにフォルダが違ったら違う値になる。
それ以前に差集合じゃダメじゃないか?
0887デフォルトの名無しさん
2010/06/24(木) 10:32:57一意である必要はない
0888デフォルトの名無しさん
2010/06/24(木) 14:12:21とりあえず答えるが、間違いの指摘以外の質問は受け付けない
// 'a : new { string DirectoryName, string FileName, DateTime ModifiedTime }
// files1 : IEnumerable<'a>
// files2 : IEnumerable<'a>
from f1 in files1
join f2 in files2 on f1.FileName equals f2.FileName
select (f1.ModifiedTime >= f2.ModifiedTime) ? f1 : f2
0889デフォルトの名無しさん
2010/06/24(木) 14:23:32LINQつかうとスゲー短くかれるんだな。
こりゃ覚えたほうが仕事がらくになるな。
0890デフォルトの名無しさん
2010/06/24(木) 20:48:360891デフォルトの名無しさん
2010/06/24(木) 20:50:48コードを自己レビューする際に混乱してきて「もーいいや、大丈夫、正しい」にならんかと心配。
すでに机上でのレビューは遺物で、IDE必須なのか・・・
0892デフォルトの名無しさん
2010/06/24(木) 20:51:090893デフォルトの名無しさん
2010/06/24(木) 20:59:07買ってください(><;)
0894デフォルトの名無しさん
2010/06/24(木) 20:59:40型を明示してもいいのよ?
>>888だって匿名型a'にしてるけどFileInfoでいいし
from FileInfo f1 in ... とか join FileInfo f2 in ... とか書けるし
0895デフォルトの名無しさん
2010/06/24(木) 21:02:42少なくとも>>888をLINQ使わずに書いても分かりやすくはならないと思うよ
0896デフォルトの名無しさん
2010/06/24(木) 21:09:36それはダメじゃないかな。
その形での型の明示はキャストだから。
0897デフォルトの名無しさん
2010/06/24(木) 21:12:01ありがとうございます。
GetHashCodeの動きを全く勘違いしていました。
マルチ質問なのに親切にお答え頂いてありがとうございました。
FullNameをNameにすると期待通りの動きになりました。
>>888
後出しで申し訳ありませんが、Whereを使用した解決方法にはたどりついていました。
ともかくありがとうございました。
0898デフォルトの名無しさん
2010/06/24(木) 22:30:230899デフォルトの名無しさん
2010/06/24(木) 22:33:050900デフォルトの名無しさん
2010/06/24(木) 22:34:180901デフォルトの名無しさん
2010/06/24(木) 22:40:52中身は拡張メソッドだよ。
0902デフォルトの名無しさん
2010/06/24(木) 22:43:37それで、
あるコントロールが、全体の、と言うか、
そのプログラム内のControls配列の中の
何番目になっているのかを判別する方法ってありますでしょうか?
プログラムから。
0903デフォルトの名無しさん
2010/06/24(木) 22:51:26親コンテナのControlsに入ってるだけで、アプリケーション全体の一つのコレクションなんて物は無いはずだが
0904762
2010/06/24(木) 22:54:40拡張メソッドでなくても構わないよ。インスタンスメソッドでもいい。
from x in hoge where x < 10 select x は単に形式的に
hoge.Where(x => x < 10).Select(x => x);
と解釈される。HogeにWhereという名前のインスタンスメソッドがあればそれが呼び出されるし、
拡張メソッドが呼び出されることもある。ルールはそれだけ。
0905デフォルトの名無しさん
2010/06/24(木) 22:55:560906デフォルトの名無しさん
2010/06/24(木) 23:01:50おお、そうなのか。
クラスとLINQがインターフェースできなくって使ってなかった。使ってみる気になったぜ。
0907デフォルトの名無しさん
2010/06/24(木) 23:02:53Form上ならthis.Controls<TextBox>().Select(c=>c)でTextBoxだけとれる。
何で順番付けるかは好きにすればいい。
0908デフォルトの名無しさん
2010/06/24(木) 23:17:51え、そんなことできるのか?知らんかった。ごそごそ
private void InitializeMe() {
var c = this.Controls<TextBox>().Select(c => c);
}
ん?
エラー 1 プロパティ 'System.Windows.Forms.Control.Controls' は型引数と一緒には使用できません。 C:\User\VS2010\Projects\test\ControlsTest\Form1.cs 18 17 ControlsTest
えーと、どーやるの?
0909デフォルトの名無しさん
2010/06/24(木) 23:21:060910デフォルトの名無しさん
2010/06/24(木) 23:30:290911デフォルトの名無しさん
2010/06/24(木) 23:43:09var con = this.Controls.OfType<TextBox>().Select(c => c);
foreach (Control ctr in con) {
textBox1.Text += ctr.Name + "\n";
}
と
foreach (Control ctr in this.Controls) {
if (ctr is TextBox) {
textBox1.Text += ctr.Name + "\n";
}
}
の、どちらが分かりやすくて保守しやすいかが問題だな。
こんなサンプルじゃLINQには役不足なのかな。
0912デフォルトの名無しさん
2010/06/24(木) 23:52:50textBox1.Text += t.Name + "\n";
}
0913デフォルトの名無しさん
2010/06/25(金) 00:16:29絶対OfTypeだねえ。
ネストが減るのは良いことです。
将来的に中がどれだけ膨らんでいくかわからないし。
0914デフォルトの名無しさん
2010/06/25(金) 00:20:060915デフォルトの名無しさん
2010/06/25(金) 00:29:27Concat より Join のほうがよくないか?
0916デフォルトの名無しさん
2010/06/25(金) 00:37:460917デフォルトの名無しさん
2010/06/25(金) 07:16:530918デフォルトの名無しさん
2010/06/25(金) 07:19:450919デフォルトの名無しさん
2010/06/25(金) 09:50:39var texts = Controls.OfType<TextBox>().Select(x => x.Name);
var joined = string.Concat(texts);
textBox1.Text = joined;
くらいにはしたい。
区切りごとに多少意味のある変数名付けて。
0920デフォルトの名無しさん
2010/06/25(金) 09:52:140921デフォルトの名無しさん
2010/06/25(金) 14:45:380922デフォルトの名無しさん
2010/06/25(金) 19:43:23あまり重要でない部分で、余計な一時変数がぽんぽん出てくるほうが嫌だなあ。
0923デフォルトの名無しさん
2010/06/25(金) 20:34:05意味のある名前が付くってのが区切りを作る1つの指針だと思うのよね。
0924デフォルトの名無しさん
2010/06/25(金) 21:23:54ああ、ListBox と UserControl は Tag に String が入っている奴だけ、Label は
逆に Text が ":" で終わっている奴と Image が null でない奴はいらないから
除いておいてね。
とか簡単でかつ分かりやすく修正できるなら、今すぐ乗換も考えてみよう。
非LINQの例
foreach (Control ctr in this.Controls) {
bool hit = false;
if (ctr is TextBox) {
hit = true;
} else if ((ctr is ListBox) || (ctr is UserControl)) {
if (ctr.Tag is String) {
hit = true;
}
} else if (ctr is Label) {
if ((ctr.Text.EndsWith(":") || ((ctr as Label).Image!=null))) {
} else {
hit = true;
}
}
if (hit) {
listBox1.Items.Add(ctr.Name);
}
}
0925デフォルトの名無しさん
2010/06/25(金) 21:27:03やってることが整理できてないから汚いだけ
0926デフォルトの名無しさん
2010/06/25(金) 21:28:540927デフォルトの名無しさん
2010/06/25(金) 21:35:450928デフォルトの名無しさん
2010/06/25(金) 21:42:11http://dobon.net/vb/dotnet/system/sessionending.htmlを参考に
システムシャットダウン時のアプリ終了処理を書くことができました。
(タスクトレイ常駐型アプリです。)
ですが、上記のページは、Formがあると前提のプログラムで
SystemEvents.SessionEnding -= new SessionEndingEventHandler(SystemEvents_SessionEnding);
という一文をForm1_Closedメソッドの中で書いています。
私のプログラムはタスクトレイ常駐アプリでほとんどフォームを表示しないので
どの部分で書けばいいのかわかりません。
知っている人がいましたら、教えてください。
0929デフォルトの名無しさん
2010/06/25(金) 21:42:38フォーマットが多少変でも最後まで読みこむけど
途中で発生したエラーは全部記録して呼び出し元に返したいなんて時って
どんな風に実装するのがスマートなんでしょかね。
戻り値は読み込んだ値を返したいから
out あたりでリストで返すのがいいのかなぁ。
それともイベントで逐一返す方がいいんでしょか。
0930デフォルトの名無しさん
2010/06/25(金) 21:43:44百歩譲ってその処理が必要だとして、
非 LINQ で回すにしても、それは条件を一度メソッド化して、
foreach (var ctr in this.Controls)
if (cond(ctr))
listBox1.Items.Add(ctr.Name);
とすべきだと思うし、これの LINQ 化は、
foreach (var item in this.Controls.Where(x => cond(x)).Select(x => x.Name))
listBox1.Items.Adde(item);
0931デフォルトの名無しさん
2010/06/25(金) 21:44:38参考例が欲しいだけだったりする。
エレガントに書けるならば、それに越したことないから教えてくれ。
おおっと思ったら真似するから。
0932デフォルトの名無しさん
2010/06/25(金) 21:44:48デリゲートかインターフェイスを引数に渡して、エラーが起きるたびにコールバックする
イベントでも同じだけどコンポーネント作るのでもなければ大袈裟すぎるし分かりづらい
0933デフォルトの名無しさん
2010/06/25(金) 21:51:57bool cond(Control ctr) {
bool hit = false;
if (ctr is TextBox) {
hit = true;
} else if ((ctr is ListBox) || (ctr is UserControl)) {
if (ctr.Tag is String) {
hit = true;
}
} else if (ctr is Label) {
if (!((ctr.Text.EndsWith(":") || ((ctr as Label).Image!=null)))) {
hit = true;
}
}
return hit;
}
と出して、
var col = this.Controls.OfType<Control>()
.Where(x => cond(x)).Select(x => x.Name);
foreach (var item in col) {
listBox1.Items.Add(item);
}
と書くわけか。でも、それって
foreach (Control ctr in this.Controls) {
if (cond(ctr)) {
listBox1.Items.Add(ctr.Name);
}
}
よりワケ分かんないからフーン。
0934デフォルトの名無しさん
2010/06/25(金) 22:12:39お前みたいなアホが書いてもカオスを生むだけだからifの羅列に埋もれてたほうがいいよ。
0935デフォルトの名無しさん
2010/06/25(金) 22:16:13起動時に一回+=してアプリ終了までそのまんまなら別に-=する必要はないよ
0936928
2010/06/25(金) 22:17:010937928
2010/06/25(金) 22:19:05おお、どうもありがとうございます!!
-=は必要ないんですね!すみませんでした。初心者スレで聞いたほうがよかったみたいです。
ありがとう。
0938デフォルトの名無しさん
2010/06/25(金) 22:23:05イベントで繋がってる間、イベントの登録先がGCされない限りは絶対にイベントハンドラ側はGCされないから
何の意味もないどころか、デストラクタで他のオブジェクトにアクセスしてしまうとそのオブジェクトが復活してGCタイミングが遅れる。
0939デフォルトの名無しさん
2010/06/25(金) 22:26:22933見れば分かるが、言われた書き方書いたら、非LINQより字数多くなってたでござるの巻。
if に埋もれる以前に複雑にしてどーするよ?
0940デフォルトの名無しさん
2010/06/25(金) 22:34:32アホだと行ったのは、お前の出したLinq版と非Linq版は挙動が違うからだよ。
0941デフォルトの名無しさん
2010/06/25(金) 22:35:270942デフォルトの名無しさん
2010/06/25(金) 22:38:06ふむ、試して挙動は同じだったんだが、試し方が足りなかったのかな?
具体的には?
0943928
2010/06/25(金) 22:38:17確かに、やっちゃいそうでした・・
自分にはまだかなり難しそうですが、やらないということは
しっかり覚えておきます。どうもありがとうございました。
0944デフォルトの名無しさん
2010/06/25(金) 22:54:49文字数 = 複雑度じゃないけどね。
意図を記述するってのが大事。
この例くらいなら、各要素なめて(foreach)、もし条件満たすなら(if)なんで、
LINQ でなくても大体意図表せてるし、別に元のままでもいいと思うけど。
もちろん、cond の部分を関数化してない >>924 はそれ以前の問題で論外。
0945デフォルトの名無しさん
2010/06/25(金) 22:56:55ああ、ごめん、挙動というのは言い方が悪かった。
OfTypeは完全不要だし、下と合わせるならSelectも微妙なところだから
字数が多くなって複雑とかいうような比較なら
foreach (var item in this.Controls.Where(x => cond(x))) {
listBox1.Items.Add(item.Name);
}
じゃないのかな、と。
結局、ifを中に置くか外に置く(Where)か、という
textBox1.Textの例と同じ話になってる。
まあ、比較部分をcond関数に分けたから、そうなるのは当然だけど。
Linqの良し悪しを語れる例ではない(これならどっちでも好みでいい)
0946デフォルトの名無しさん
2010/06/25(金) 23:11:00>>908
'System.Windows.Forms.Control.ControlCollection' に 'Where' の定義が含まれておらず、型 'System.Windows.Forms.Control.ControlCollection' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
それとも、何か参照を追加したらコンパイル通るのか?
試してみたコードのusingを貼ってくれ。
0947デフォルトの名無しさん
2010/06/25(金) 23:21:02あー、試してないで言ってたよ、完全に俺が悪い、
偉そうなこと言ったくせに、ほんとすまん。
IEnumerableにはCast<T>もしくはOfType<T>が必要。
LinqはIEnumerable<T>が基本なので、
isやasで分岐させるといった、複数の型を扱うのには向いてない。
今回は基底型にアップキャストしたうえで、
別関数に分けたとはいえ型判定でダウンキャストして分岐させるという
二度手間三度手間状態になってるので、Linqには向いてない例ということになりそう。
0948デフォルトの名無しさん
2010/06/25(金) 23:58:210949デフォルトの名無しさん
2010/06/26(土) 00:08:50向いている例として、IQueryableとかExpressionとか、なんとなく換えのなさげな
新(?)機能は色々あるのに、いまいち使い方がピンとこないんだよなぁ。
>>948
コード書いてよ。
0950デフォルトの名無しさん
2010/06/26(土) 00:18:340951デフォルトの名無しさん
2010/06/26(土) 00:23:42デザパタ覚えたてのアホプログラマが
if文を何でもかんでもストラテジに置き換えてたのを思い出したわ。
中途半端な派遣にこういうのが多い。
0952デフォルトの名無しさん
2010/06/26(土) 00:25:16簡潔さなんて自己満足じゃなく、目で追いやすさ確認しやすさが第一なんよ坊ちゃん。
0953デフォルトの名無しさん
2010/06/26(土) 00:28:420954デフォルトの名無しさん
2010/06/26(土) 00:32:51見やすさとかいう以前に設計やばそう。
0955デフォルトの名無しさん
2010/06/26(土) 00:35:16日本に置けるIT業界の癌
0956デフォルトの名無しさん
2010/06/26(土) 00:38:30そんなアホな仕様だろうと、ちゃんと実装して実現可能と示したんだから、
文句言われる筋合いはないな。
文句を言えるのは対抗してコード出してきた>>930とかだけ。
反論もコードでお願いしますね、プログラマーに向いているお方。
0957デフォルトの名無しさん
2010/06/26(土) 00:39:480958デフォルトの名無しさん
2010/06/26(土) 00:41:000959デフォルトの名無しさん
2010/06/26(土) 00:42:340960デフォルトの名無しさん
2010/06/26(土) 00:42:350961デフォルトの名無しさん
2010/06/26(土) 02:20:56listBox1.Items.AddRange(
from c in this.Controls
where
i is TextBox ||
((i is ListBox || i is UserControl) && i.Tag is string) ||
(i is Label && !(i.Text.EndsWith(":") || ((Label)i).Image != null))
select i.Name);
0962デフォルトの名無しさん
2010/06/26(土) 03:03:04x from c in this.Controls
o from i in this.Controls
0963デフォルトの名無しさん
2010/06/26(土) 11:19:330964デフォルトの名無しさん
2010/06/26(土) 11:34:12var ctrls
= from ctr in Controls.OfType<Control>()
where (
(
ctr is TextBox
) || (
((ctr is ListBox) || (ctr is UserControl))
&& (ctr.Tag is String)
) || (
(ctr is Label)
&& (!((ctr.Text.EndsWith(":") || ((ctr as Label).Image!=null))))
)
)
select ctr.Name;
listBox2.Items.AddRange(ctrls.ToArray());
※ OfType追加と、AddRangeはIEnumrable<String>許容しないんでToArray噛ませた
と書けばいいんですね。言われてみたら当たり前だった・・・。
これなら(個人主観で)納得。簡潔に書きたい場所で使ってみます、ありがとうございました。
0965デフォルトの名無しさん
2010/06/26(土) 11:38:17listBox2.Items.AddRange((
from ctr in Controls.OfType<Control>()
(where 句省略)
select ctr.Name
).ToArray());
0966デフォルトの名無しさん
2010/06/26(土) 13:30:270967デフォルトの名無しさん
2010/06/26(土) 13:41:59(
ctr is TextBox
) || (
((ctr is ListBox) || (ctr is UserControl))
&& (ctr.Tag is String)
) || (
(ctr is Label)
&& (!((ctr.Text.EndsWith(":") || ((ctr as Label).Image!=null))))
)
);
と delegate で条件書いて、
foreach (Control ctr in this.Controls) {
if (lambda_cond(ctr)) {
listBox3.Items.Add(ctr.Name);
}
}
と差し替え可能にしてみたんだけど、LINQ 版の書き方がわかんないです。
listBox2.Items.AddRange((from ctr in Controls.OfType<Control>() where lambda_cond select ctr.Name).ToArray());
と書くと「型 'System.Func<System.Windows.Forms.Control,bool>' を型 'bool' に暗黙的に変換できません。」。
どう書いたらいい?単に書き方の問題だと思ってる。
0968デフォルトの名無しさん
2010/06/26(土) 13:44:22listBox2.Items.AddRange((from ctr in Controls.OfType<Control>() where lambda_cond(ctr) select ctr.Name).ToArray());
で自己解決。当たり前だw
0969デフォルトの名無しさん
2010/06/26(土) 14:47:25Func<Control, bool?>[] filter = {
c => (c is TextBox) ? true : default(bool?),
c => ((c is ListBox || c is UserControl) && c.Tag is string) ? true : default(bool?),
c => (c is Label && !c.Text.EndsWith(":") && (((Label)c).Image == null)) ? true : default(bool?),
};
var q = from Control c in Controls
let qq = from f in filter
select f(c) into r
where r != null
select (bool)r
where qq.FirstOrDefault()
select c.Name;
listBox1.Items.AddRange(q.ToArray());
0970デフォルトの名無しさん
2010/06/26(土) 15:28:01マッチはtrue,アンマッチはnullで結果にnullしかなければfalseとしてtrueを集める。
判定を分割して追加削除をやりやすくしようと言うんですね。
むずかしす・・・でも更新箇所は配列要素になっていて扱いやすそう。
filter をパラメータにして関数化してしまえば隠蔽できるし。
0971デフォルトの名無しさん
2010/06/26(土) 15:33:35Func<string, IEnumerable<ManagementObject>> GetManagementObject
= type => new ManagementClass(type).GetInstances().OfType<ManagementObject>();
foreach (var d in
from ldisk in GetManagementObject("Win32_LogicalDisk")
from l2p in GetManagementObject("Win32_LogicalDiskToPartition")
from d2p in GetManagementObject("Win32_DiskDriveToDiskPartition")
from disk in GetManagementObject("Win32_DiskDrive")
where ldisk.ToString()==l2p["Dependent"].ToString()
&& l2p["Antecedent"].ToString()==d2p["Dependent"].ToString()
&& d2p["Antecedent"].ToString()==disk.ToString()
select new {Name=ldisk["DeviceID"], PNPDeviceID=disk["PNPDeviceID"]
, ldisk, l2p, d2p, disk })
{
Console.Out.WriteLine("{0} : {1}", d.Name, d.PNPDeviceID);
}
とか。いや本当に便利だわ、これなら。
これで、DiskDrive と結びつかない LogicalDisk もリストアップしたいと挑戦中。
outer join とかどう表現したらいいんでしょう?
0972デフォルトの名無しさん
2010/06/26(土) 15:39:360973デフォルトの名無しさん
2010/06/26(土) 15:58:340974デフォルトの名無しさん
2010/06/26(土) 16:12:31Union で混入させてしまえば、というアイデアが浮かんだ。
でも、左外部結合を繰り返すパターンの書き方が知りたいです。
関連づかない場合は l2p, d2p, disk のそれぞれに null が入って返ってくる方法。
今は
foreach (var d in
from ldisk in GetManagementObject("Win32_LogicalDisk")
join l2p in GetManagementObject("Win32_LogicalDiskToPartition")
on ldisk.ToString() equals l2p["Dependent"].ToString()
into ld_l2p from ld_l2p_outer in ld_l2p.DefaultIfEmpty()
join d2p in GetManagementObject("Win32_DiskDriveToDiskPartition")
on l2p["Antecedent"].ToString() equals d2p["Dependent"].ToString()
join disk in GetManagementObject("Win32_DiskDrive")
on d2p["Antecedent"].ToString() equals disk.ToString()
select new {
Name=ldisk["DeviceID"], PNPDeviceID=disk["PNPDeviceID"]
, ldisk, l2p, d2p, disk
})
という感じで on l2p["Antecedent"].ToString() equals d2p["Dependent"].ToString() が
「名前 'l2p' は 'equals' の左辺のスコープにありません。'equals' の両辺の式を交換してみてください。」
となり、両辺の式を交換しても同じ、という処で詰まっています。
0975デフォルトの名無しさん
2010/06/26(土) 16:16:160976デフォルトの名無しさん
2010/06/26(土) 16:21:55というテンプレがあるけど、こっちにはないのね。
そして、964は、なんでわざわざ気持ち悪い改行に改悪するのだか……
これが職業SEの目で追いやすいコード?
0977デフォルトの名無しさん
2010/06/26(土) 16:57:50修正しやすいコード
0978デフォルトの名無しさん
2010/06/26(土) 17:06:04>>964 とかは
foreach
from ... (で元の集合)
join ... (で結合する集合)
on ... (で結合条件)
into ... (で一次的な結合結果集合)
join ... (で結合する集合)
on ... (で結合条件)
into ... (で一次的な結合結果集合)
というように条件を追加削除しやすい単位でまず分けて、かつ横幅がA4印刷に
耐えられる程度で分けてインデントという意図。
何か疑問でも?疑問あるなら改良してくれ。
0979デフォルトの名無しさん
2010/06/26(土) 17:09:58けど、考え方は同じ。
縦に伸びすぎない限りは条件の深さ別にインデントしつつ行分けしておいてる。
実際のコードだと更にコメントが入る。
0980デフォルトの名無しさん
2010/06/26(土) 17:31:27var ctrls
= from ctr in Controls.OfType<Control>()
where (
(
ctr is TextBox
) || (
((ctr is ListBox) || (ctr is UserControl))
&& (ctr.Tag is String)
) || (
(ctr is Label)
&& (!((ctr.Text.EndsWith(":") || ((ctr as Label).Image!=null))))
)
)
select ctr.Name;
listBox2.Items.AddRange(ctrls.ToArray());
って感じで書いてる。
0981デフォルトの名無しさん
2010/06/26(土) 18:08:46仕事でコメントも付けて書くとしたら、こんな感じかな。
#region 条件に合ったコントロールの名前をコントロール一覧に表示
var ctrls
= from ctr in Controls.OfType<Control>()
// 選択条件
where (
(
// TextBox の場合、無条件
ctr is TextBox
) || (
// ListBox, UserControl の場合
((ctr is ListBox) || (ctr is UserControl))
// Tag が文字列
&& (ctr.Tag is String)
) || (
// Label の場合
(ctr is Label)
// ":" で終わっているか、Image が null でないものは除く
&& (!((ctr.Text.EndsWith(":") || ((ctr as Label).Image!=null))))
)
)
select ctr.Name;
listBox2.Items.AddRange(ctrls.ToArray());
#endregion
IDEじゃなく印刷ベースでレビューとかするなら、コメントに●とか目立つ文字を
先頭に入れておくとか別インデントとかすることもある。印刷だとコメントも見づらいから。気分。
ムシャクシャしてやった。今は後悔している。
0982デフォルトの名無しさん
2010/06/26(土) 18:23:460983デフォルトの名無しさん
2010/06/26(土) 18:28:33修正のしやすさとかいうんだったら、LINQやラムダを使うかどうかはどうでもいいけど
考え方は>>969スタイルにするべき
0984デフォルトの名無しさん
2010/06/26(土) 18:33:01そのコメント不要だろ。
0985デフォルトの名無しさん
2010/06/26(土) 18:41:33for(){
} // for終わり
とか
string hoge = hage; // hogeにhageを代入
とかかきそうだね。
コメントだらだら入れれば見やすいってもんじゃねーぞ。
そんな小さい部分にregionもいらねえし。
0986デフォルトの名無しさん
2010/06/26(土) 19:08:34WMI で外部結合させる版、とりあえず無理矢理に自己解決させましたけど、
・・・ド汚くて、どうしたらいいかわからないです。どう改良すればよいでしょう?
http://ideone.com/bOJL9
0987デフォルトの名無しさん
2010/06/26(土) 20:48:48メソッド内でregionで閉じられたソースがあったら
どれだけ長大なソースが展開されるのかと思って怖くて仕方が無いです。
まともな行数のメソッドならregionが必要になることもないわけだし、
メソッド内でregionを使う習慣がある人のソースはどれだけ長大な最長不倒メソッドを日頃から作ってるんだよという感じで怖すぎます。
0988デフォルトの名無しさん
2010/06/26(土) 20:49:52もしかしたら作業用の画面解像度が低いだけかもしれないぞ
0989デフォルトの名無しさん
2010/06/26(土) 22:54:52共通化するよ。ご心配なく。
サンプルってんだろ・・・ほんと >>960
0990デフォルトの名無しさん
2010/06/26(土) 23:01:26http://ideone.com/9bOXe
ネストの気持ち悪さは減ったけど共通的な部分多いのが気になってる。
こんなことしなくても join のうまい書き方ってありそうなんだけどなぁ・・・なんとなくの感触だけど。
0991デフォルトの名無しさん
2010/06/26(土) 23:51:42ほんとセンスの無さに溢れてるな
0992デフォルトの名無しさん
2010/06/26(土) 23:55:02http://ideone.com/Dmtg7
自虐ネタとして。
0993デフォルトの名無しさん
2010/06/27(日) 00:00:110994デフォルトの名無しさん
2010/06/27(日) 03:07:12ライブラリ
http://ideone.com/OHmUl
使用サンプル
http://ideone.com/hl3Ai
WBEMのイベントとか面倒そうだし、LINQに慣れるために使ってみただけだから
いじくるのは終了〜
どうせ昨日LINQ始めたばかりの初心者だから、もっといい書き方もあるだろうし。
0995デフォルトの名無しさん
2010/06/27(日) 03:15:46さん、貴重なご示唆ありがとうございました。
まだ勉強しないと使いこなせないようですが。
ところで、次スレ建ててくるね。特にテンプレはつけないからよろしく。
0996デフォルトの名無しさん
2010/06/27(日) 03:17:56C#, C♯, C#相談室 Part60
http://pc12.2ch.net/test/read.cgi/tech/1277576240/
0997デフォルトの名無しさん
2010/06/27(日) 07:21:53100行をある程度の目安にするところは同意だが、メソッド内でregionはないな。
fold機能を覚えたての初心者がよく乱発する
0998デフォルトの名無しさん
2010/06/27(日) 10:32:17#endregion
#region コンストラクタ
#endregion
みたいな見りゃわかるよ系はどうよ
0999デフォルトの名無しさん
2010/06/27(日) 10:37:06コンストラクタやプロパティは畳んでおきたくなるのはわかる
1000デフォルトの名無しさん
2010/06/27(日) 10:56:2810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。