C♯, C#相談室 Part35
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/03(金) 03:07:45前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/
過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0140デフォルトの名無しさん
2006/11/08(水) 22:00:340141デフォルトの名無しさん
2006/11/08(水) 22:04:52えーとSortedList ってのは、中身が何らかの順序関係によって整列されたリストのこと。
(Sort ってのは英語で並べ替えというような意味)
ソートしなくていいなら、List<string> や ArrayList を使うべき。
0142デフォルトの名無しさん
2006/11/08(水) 22:06:42・インデックスで検索するためのList<Pair<string,string>>
・キーで検索するためのDictionary<string, string>
・値で検索するためのDictionary<string ,string>
を各々用意したらいかがか。
0143デフォルトの名無しさん
2006/11/08(水) 22:10:45同等の機能でいいなら、そこまで複雑なことしなくてもいいんじゃないかなあ。
0144デフォルトの名無しさん
2006/11/08(水) 22:25:49複雑なことしなくてよいのは私もなんですけど…客先の要件なので…
要は状態遷移を行いたいのです。
1.Prev、Nextであればカレントインデックス値を加減算して処理する。
2.指定した状態へJumpであればキーで検索して処理する。
3.前の状態へJumpであれば値で検索して処理する。
と言う具合です。これを満たすためにはArrayList、HashTableの両方を
兼ね備えたSortedListが最適と判断したのです。
自動的に並び替えが無ければOKなんでけどねぇ〜orz
0145デフォルトの名無しさん
2006/11/08(水) 22:28:22List<Pair<string,string>> でOK。
0146デフォルトの名無しさん
2006/11/08(水) 22:37:18それだとキーでの検索と値での検索に線形オーダーかかるのでは。
どれも定数オーダーでやるには>>142の三つが必須じゃない?
0147デフォルトの名無しさん
2006/11/08(水) 22:41:420148デフォルトの名無しさん
2006/11/08(水) 22:42:170149デフォルトの名無しさん
2006/11/08(水) 22:46:56ほとんどのコントロールを自前で用意って、ほんとにそう?
ほとんどのアプリでは標準コントロールを使用している。
.Netでできていて、標準コントロールを使用する機会がないような
人に見せて恥ずかしくないUIを持ったアプリを教えてくれるとありがたいんですが。
0150デフォルトの名無しさん
2006/11/08(水) 22:49:34Dictinary だと線形オーダーのままだよ
0151デフォルトの名無しさん
2006/11/08(水) 22:52:23テキストエディタを作る場合を考えてください。
TextBoxコントロールを使って作れますか?
0152デフォルトの名無しさん
2006/11/08(水) 22:52:30推測だがデリゲートが遅いせいじゃない?
0153デフォルトの名無しさん
2006/11/08(水) 22:52:59いやいや、Dictionaryはハッシュテーブルだよ
だから定数オーダー。
0154デフォルトの名無しさん
2006/11/08(水) 23:01:58v1ならしゃあないけど。
0155デフォルトの名無しさん
2006/11/08(水) 23:05:02Writing Faster Managed Code: Know What Things Cost
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/fastmanagedcode.asp
たとえHashtableがそうでも、その3つの中にリスト含んでるから LogN(配列のオーダ)でしょ
OrderedDictionaryなんてあったのか、ふざけー
なんでGenerics空間に作らなかったんだ・・
0156デフォルトの名無しさん
2006/11/08(水) 23:05:04違うから。
0157デフォルトの名無しさん
2006/11/08(水) 23:06:00エディタなら検索ダイアログや置換ダイアログ、各種の設定用ダイアログ等での
文字列入力で盛大に使うんじゃない?
ポトペタで作れて生産性向上というのと、「ポトペタだけで」作れるというのは違う
ことだってのはわかるよね。
簡単に作れる部分を簡単に作れば、そこで浮いた工数を他の処理、
例えばテキストエディタならばエディット部分の作成に回すことができる。
あるいは工数の減った分を単純に利益としてもよいし、販売価格を下げてもよいし、
バージョンアップサイクルを短縮してもよい。
.Net にしたからといって何でも簡単にできるわけではなくって、
簡単にできることが多少増える→生産性が上がる、ということが重要。
漏れはUI以外は C++ or C++/CLI 使ってるけど。
C# ってtemplate無いし多重継承無いし using たくさん書かせられるから効率悪いんだもん。
0158デフォルトの名無しさん
2006/11/08(水) 23:08:180159デフォルトの名無しさん
2006/11/08(水) 23:11:55OrderedDictionaryを用いる方向で実装していました。
ところが、値の存在チェックは出来るのですが、インデックス値を取得することが
出来なかった(取得する方法がわからない)からです。
1.インデックス値の操作でキー、値を取得する。
2.キーで検索して、インデックス値を取得する。
3.値で検索して、インデックス値を取得する。
この3つの要件を満たすのがSortedListだったのです。
0160デフォルトの名無しさん
2006/11/08(水) 23:16:57ありがとうございます。早速試したところ…自宅のPCはXP-HOMEだった。orz
明日、出社して早速試してみます。
0161デフォルトの名無しさん
2006/11/08(水) 23:22:270162デフォルトの名無しさん
2006/11/08(水) 23:40:46ああそうか…
OrderdDictionaryにあってもよさそうなのにな。
0163デフォルトの名無しさん
2006/11/08(水) 23:47:36class Record { string key, value; int index; }
でも作って
・List<Record>
・Dictionary<string key, Record>
・Dictionary<string value, Record>
の3つを作れば?
・List<Pair<string key, string value>>
・Dictionary<string key, int index>
・Dictionary<string value, int index>
でもいいけど。
0165デフォルトの名無しさん
2006/11/09(木) 00:39:14> デリゲートはそんなに遅くないのでは?
全然言ってることが的外れ。
例えばdelegateでカリー化したり関数合成したりしてもinliningされないことが問題。
アンダースに次会ったときに突っ込んでみるよ。
0166デフォルトの名無しさん
2006/11/09(木) 00:48:460167デフォルトの名無しさん
2006/11/09(木) 01:16:04Scheme最高w
0168デフォルトの名無しさん
2006/11/09(木) 01:40:20アンダース、年に数回、日本に来るよ。おまいさんも聞きたいことがあればサミットなり何なり参加しれ。
でもtypedefとネイティブコード生成の質問はタブーな。
毎回聞く馬鹿があとを絶えないのでアンダースはうんざりぎみ。
0169デフォルトの名無しさん
2006/11/09(木) 08:39:52次世代windowsはマネージコードが標準で、
ネイティブコード実行が保護下のエミュレーションに。
0170デフォルトの名無しさん
2006/11/09(木) 08:48:100171デフォルトの名無しさん
2006/11/09(木) 09:27:53昔はゲームはDOSじゃないと遅くて動かなかった。
windowsでゲームというと馬鹿にされたもんだよ。
もしかしてマネージアプリのほうが高速になる時代が来るかもな
0172デフォルトの名無しさん
2006/11/09(木) 10:35:15List<Pair<>> list = null;
上記のように定義してどのように追加すればよいのでしょうか?
Addメソッドを用いるのは理解出来てます。書き方がわかりません。
ご存知の方、教えてください。
0173デフォルトの名無しさん
2006/11/09(木) 14:17:48list.Add(new KeyValuePair<string, string>("key", "value"));
こういうこと?
0174デフォルトの名無しさん
2006/11/09(木) 15:10:00を参考にして書き直してみたやつ。現状うまくいってない。
Image srcimgが吸出し元
int w= srcimg.Width/10;
int h = srcimg.Height/10;
Bitmap[,] result =new Bitmap[10,10];
for(int j=0;j<10;j++){
for(int i=0;i<10;i++){
result[i,j]= new Bitmap(w,h);
Graphics g = Graphics.FromImage(result[i,j]);
g.DrawImage(srcimg, -i*w, -j*h, w, h);
g.Dispose();
}
}
foreachのほうがいいのかな。。。
0175デフォルトの名無しさん
2006/11/09(木) 15:44:32じゃあ、こうすれ。
g.DrawImage(srcimg,
new Rectangle(0, 0, w, h),
new Rectangle(i*w, j*h, w, h),
GraphicsUnit.Pixel);
0176デフォルトの名無しさん
2006/11/09(木) 15:46:53int h = srcimg.Height / 10;
Bitmap[,] result = new Bitmap[10, 10];
for( int j = 0; j < 10; j++ )
{
for( int i = 0; i < 10; i++ )
{
result[i, j] = srcimg.Clone( new Rectangle( i * w, j * h, w, h ), System.Drawing.Imaging.PixelFormat.DontCare );
}
}
じゃ駄目なのか
0177176
2006/11/09(木) 15:49:090178デフォルトの名無しさん
2006/11/09(木) 17:00:55うまい方法ないすかね。
先ずはonSubmitをフックしようとしたのだけど、
単純に マネージドコードのHtmlElement.AttachEventHandler("onsubmit", new EventHandler....)ではただイベントが飛んでくるだけで
formの内容がわからん。
さらに、ttp://www.thescripts.com/forum/thread232640.html によるとHTMLFormElementの onsubmitのフックにはバグがあるようで使えない。
0179デフォルトの名無しさん
2006/11/09(木) 17:07:210180デフォルトの名無しさん
2006/11/09(木) 17:10:180181デフォルトの名無しさん
2006/11/09(木) 17:40:53イベントメソッドをアンバインドしてもクリアはされませんでした。
0182デフォルトの名無しさん
2006/11/09(木) 17:42:27>>175を反映させたところ成功しますた。
アイディアを出してくれた人たちに百万の感謝を。
0183デフォルトの名無しさん
2006/11/09(木) 17:48:24C#語でおk
0184デフォルトの名無しさん
2006/11/09(木) 18:32:490185デフォルトの名無しさん
2006/11/09(木) 19:33:59BeforeNavigate2 イベントに POST されるデータも入ってる。
Interop.SHDocVw.dll 参照して ActiveXInstance を SHDocVW.WebBrowser にキャストしてイベント使用するか
CreateSink でイベントシンク作るかしないと使えないが。
0186デフォルトの名無しさん
2006/11/09(木) 20:21:53面倒だから素直にAxBrowser使ったら?
素直にBeforeNavigate2使えるし。
0187デフォルトの名無しさん
2006/11/09(木) 21:33:49なるほど〜、SHDocVW.WebBrowserにキャストすればいいんですね。
ふつうに
SHDocVw.WebBrowser browser = (SHDocVw.WebBrowser)this.ActiveXInstance;
browser.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(browser_BeforeNavigate2);
とかやってでBeforeNavigate2イベントのフックおよびPOSTデータ取れました。
0188デフォルトの名無しさん
2006/11/09(木) 23:54:470189デフォルトの名無しさん
2006/11/10(金) 00:01:040190デフォルトの名無しさん
2006/11/10(金) 06:52:57コメントそのもののフォーマットを求めているならヘルプのそれを参考にすれば?
たとえばプロパティなら「〜を取得または設定します」みたいな。
0191デフォルトの名無しさん
2006/11/10(金) 11:46:540192デフォルトの名無しさん
2006/11/10(金) 11:58:40多重継承を許容すると退化することになる。
新しいスキームが必要。
0193デフォルトの名無しさん
2006/11/10(金) 12:10:03CLOS系のやつ
シバリがなくなるだけで退化にはならんと思う。
漏れは色んなパラダイムを許容する言語の方が好きだ。
0194デフォルトの名無しさん
2006/11/10(金) 12:13:47多重継承で同じインターフェイス含んだクラス2つ継承したら、
動作はどうなるの?
0195デフォルトの名無しさん
2006/11/10(金) 12:16:49C++なら部分オブジェクトを共有するか別々にするか制御できるよね。
スレ違いスマソ
0196デフォルトの名無しさん
2006/11/10(金) 12:38:160197デフォルトの名無しさん
2006/11/10(金) 16:19:21ひとつしか実装なかったらそれが呼ばれて明示的実装あればそっちが呼ばれる。
副作用よりも記述性のメリットが勝ると思うんだけど。
複数クラスに委譲コードこぴぺするほうがバグでるっちゅーねん。
0198デフォルトの名無しさん
2006/11/10(金) 16:25:510199デフォルトの名無しさん
2006/11/10(金) 17:45:42float Width{set{_width=value;}}
っていうプロパティがあるんですが、
floatを引数にもつデリゲートが他の変数に代入しようとしても
_deleg=Width;はだめだし
_deleg=set_Widthもだめ。
0200デフォルトの名無しさん
2006/11/10(金) 18:42:080201デフォルトの名無しさん
2006/11/10(金) 19:14:56言ってることおかしくないかな?
0202デフォルトの名無しさん
2006/11/10(金) 19:28:01言うやつが増えるだけじゃないのかな?
0203デフォルトの名無しさん
2006/11/10(金) 19:46:140204デフォルトの名無しさん
2006/11/10(金) 22:37:010205デフォルトの名無しさん
2006/11/10(金) 23:21:00デジタルアドバンテージ 一色 政彦
2006/11/11
PS3並みのフライング?
0206デフォルトの名無しさん
2006/11/11(土) 01:08:56何が?<フライング
.NET Framework 3.0、もう正式版出てるし、
β版とか CTP 版はずいぶん前からあるし。
0207デフォルトの名無しさん
2006/11/11(土) 01:16:34記事の日付と書き込み日時
0208デフォルトの名無しさん
2006/11/11(土) 01:32:590209デフォルトの名無しさん
2006/11/11(土) 01:48:570210デフォルトの名無しさん
2006/11/11(土) 02:25:490211デフォルトの名無しさん
2006/11/11(土) 12:08:58private void Form1_KeyDown( object sender, KeyEventArgs e )
{
switch ( e.KeyCode ) {
case Keys.Left:
rects[0].X -= 25;
rects[1].X -= 25;
rects[2].X -= 25;
rects[3].X -= 25;
break;
case Keys.Right:
rects[0].X += 25;
rects[1].X += 25;
rects[2].X += 25;
rects[3].X += 25;
break;
}
}
}
すいっちのとこにブレーク張ってるのにキーボードのキー入力しても
イベントハンドラに�dで来ないお
これだから馬具だらけのC#はきらいだ!!!
0212デフォルトの名無しさん
2006/11/11(土) 12:10:28やっぱフリーのだから馬具ありなのかな、外地?
0213デフォルトの名無しさん
2006/11/11(土) 12:12:250214デフォルトの名無しさん
2006/11/11(土) 12:18:51初心者スレ池
0215デフォルトの名無しさん
2006/11/11(土) 12:27:49違いますよ^^;
ちゃんとフォームにフォーカス当ててる
0216デフォルトの名無しさん
2006/11/11(土) 12:30:52みつからないんだが紹介してくれ、そっちで質問するから
0217デフォルトの名無しさん
2006/11/11(土) 12:53:12Form.KeyPreview
0218デフォルトの名無しさん
2006/11/11(土) 12:59:18できればurlをお願いいたします(ぺこりー
0219デフォルトの名無しさん
2006/11/11(土) 13:09:19ふらっとC♯, C#(初心者用) Part10
http://pc8.2ch.net/test/read.cgi/tech/1162193452/
だが>>217が答えだ
0220デフォルトの名無しさん
2006/11/11(土) 13:16:08どーも。
ボタンを押したときのイベントで>>217の
Form.KeyPreview = true;
というのを追加したけどコンパイルエラーになる。
変数はForm1という名前だから
Form1.KeyPreview = true;
とやっても怒られる。
this.KeyPreview = true;
でコンパイルが通った!
でもやっぱりだめなんだな、これが。
やっぱり>>211のイベントに�dで来ないお
試しにみんなもやってみてくれ、
もしバグだったら誰か舞糞に連絡ヨロ
0221デフォルトの名無しさん
2006/11/11(土) 13:17:32プログラム言語の勉強を一からやることをお勧めする
0222デフォルトの名無しさん
2006/11/11(土) 13:24:02\∩─ー、 ====
/\● 、_ `ヽ ======
/ (0o) ● |つ ちょっ! ちょっと待つクマ!
| (_入__ノ ミ
、 (_/ ノ /⌒l 釣り方間違ってるクマ!!
/\___ノ゛_/ / =====
〈 __ノ この吊り方は、やばすぎるクマー!!
\ \_ \ ===
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
0223デフォルトの名無しさん
2006/11/11(土) 13:28:01>>219氏の教えてくれたスレに移動するからここでの質問は取り下げるお
お世話様ですた
0224デフォルトの名無しさん
2006/11/11(土) 13:30:22>>222
釣りならそういえよw
0225デフォルトの名無しさん
2006/11/11(土) 13:49:53いやあんなの一生プログラミングに触って欲しくないな
0226デフォルトの名無しさん
2006/11/11(土) 13:56:22C#+asp.net2.0でプログラムかいてます。で、あるページでGridViewを使ってるんですが動作がおかしいです。
画面にはGridViewと更新ボタンがあります。Gridviewにはデータバインドしてるのとテンプレートフィールドがあります。
テンプレートフィールドはチェックボックスになってて、チェックボックスをオンにした状態で更新ボタンを押すとその状態がDBに記憶され、
次同じページを開いたときはチェックボックスがオンになった状態でページが開かれます。
更新ボタンのイベントではまずDBにある全てのデータを消してからGridView全てのRowを見て
Checkbox.checked=trueのものだけDBに保存する仕様になってます。
しかしここで問題が…。チェックボックスがオフの状態からオンの状態にして更新ボタンを押すとうまく反映されるのですが、ページを開いた状態のときにすでにオンになってるチェックボックスをオフにして更新を押すとDBに反映されません。
原因を調べたところチェックボックスをオフにしたはずなのに条件判定のところではチェックボックスがオンの状態になっているようでした。これはなぜでしょうか?
わかる人いらっしゃったら教えてください。お願いします。
0227デフォルトの名無しさん
2006/11/11(土) 14:04:23とエスパーなりきって考えてみた。
0228226
2006/11/11(土) 14:17:59書き忘れてましたが更新ボタンを押した後は「更新されました」というページに遷移するようになってます。なのでpostbackは関係ないかもしれません…。
ページがロードされたときにDBに項目があるものに関してはチェックボックスをオンにするということをしてますが、
それでオンになった項目をオフにして更新ボタンを押しても、そのイベントハンドラ内ではチェックボックスがオンだと認識されているところに問題があるんだと思いますが、なぜかがわかりません…。
0229211
2006/11/11(土) 14:25:56の(口は悪いが)親切な回答者のおかげで解決したよ、
このスレは本当に役立たずな回答者しかいないな、
二度と来る門下
0230デフォルトの名無しさん
2006/11/11(土) 14:27:33役立たず。
0231デフォルトの名無しさん
2006/11/11(土) 14:37:20>というのを追加したけどコンパイルエラーになる。
>変数はForm1という名前だから
>Form1.KeyPreview = true;
>とやっても怒られる。
>this.KeyPreview = true;
>でコンパイルが通った!
>Form.KeyPreview = true;
>というのを追加したけどコンパイルエラーになる。
>変数はForm1という名前だから
>Form1.KeyPreview = true;
>とやっても怒られる。
>this.KeyPreview = true;
>でコンパイルが通った!
>Form.KeyPreview = true;
>というのを追加したけどコンパイルエラーになる。
>変数はForm1という名前だから
>Form1.KeyPreview = true;
>とやっても怒られる。
>this.KeyPreview = true;
>でコンパイルが通った!
こんなレベルなのに文句を言う方がどうかしてるな。
0232デフォルトの名無しさん
2006/11/11(土) 15:10:46↑
これくらいいい加減読めるようになろうぜwww
0233デフォルトの名無しさん
2006/11/11(土) 15:13:17プロテインだね
0234デフォルトの名無しさん
2006/11/11(土) 15:19:46コードのロジックミスじゃないの?
0235デフォルトの名無しさん
2006/11/11(土) 15:24:20この投稿の段階で怪しい。
あげ足取りごめんね!!
0236226
2006/11/11(土) 15:46:08一応更新ボタンのイベントハンドラにはまずDBの全ての内容をdeleteして、その後foreachで全てのrowを見てチェックボックスがオンならDBにタプルを追加するという方法を取ってます。これがいけないんでしょうか?
>>235
実際はrowからcheckboxオブジェクトを取ってそれのcheckedをチェックしてます。
0237デフォルトの名無しさん
2006/11/11(土) 16:30:37って思うんだが。
0238デフォルトの名無しさん
2006/11/11(土) 17:15:070239226
2006/11/11(土) 17:24:49うお!本当だ!
初心者で申し訳ありませんでした。更新ボタンを押したときそのボタンのイベントハンドラのみが呼び出されると思っていたのですが、
その前にpage_loadが呼び出されてるんですね…。
僕の仕様だとpage_loadのところでGridViewの全てのRowをチェックしてそれがDBにあった場合チェックボックスをtrueにするので一度消したやつも再度チェックがオンになってしまっているようです。
isPostBackを使うことで解決しました。こんな初心者に助言していただいて本当にありがとうございました!
■ このスレッドは過去ログ倉庫に格納されています