トップページ⇒tech
1001コメント245KB

ふらっとVisual C#,C♯,C#(初心者用) Part100

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/12/02(日) 17:32:06.09
このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、
もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますが、
ご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ
ふらっとVisual C#,C♯,C#(初心者用) Part99
http://toro.2ch.net/test/read.cgi/tech/1351515076/

関連スレ
C#, C♯, C#相談室 Part77
http://toro.2ch.net/test/read.cgi/tech/1352467358/
0153デフォルトの名無しさん2012/12/09(日) 14:15:08.14
>>145

>>126の要望に>>130で回答されたら
そりゃぶん殴られるだろ
0154デフォルトの名無しさん2012/12/09(日) 14:21:07.07
>>152
おまえがな
0155デフォルトの名無しさん2012/12/09(日) 14:25:22.11
9つの値があって、ソートしたときに5番目の値を選びたいのですが
Listを使わずにやる方法ってないでしょうか?
0156デフォルトの名無しさん2012/12/09(日) 14:28:07.68
values.OrderBy(x => x).Skip(4).First()
0157デフォルトの名無しさん2012/12/09(日) 14:29:59.33
魔法の言葉っすか
0158デフォルトの名無しさん2012/12/09(日) 14:41:45.72
>>156
わざわざSkipせんでもElementAtでいいよ
0159デフォルトの名無しさん2012/12/09(日) 14:42:57.94
(x => x)減らせないの?
0160デフォルトの名無しさん2012/12/09(日) 14:54:11.76
「基本的には寝ているけど、キューにActionが来れば1つずつ処理していくサブスレッド」
みたいなのを実現するクラスはありますか?
名前的にThreadPool.QueueUserWorkItemかなと思ったんですが、
別々のスレッドで並列で実行されてしまうようです。
0161デフォルトの名無しさん2012/12/09(日) 15:01:40.84
>>160
queue = new BlockingCollection<Action>();
while (!queue.IsCompleted) {
 var action = queue.Take(); // 空なら新しく追加されるまでブロックしてくれる
 action();
}
これをバックグラウンドスレッドで実行しておいて、queueにAddしていけばいいだけ
終了させたいときにはqueue.CompleteAdding();ね
0162デフォルトの名無しさん2012/12/09(日) 15:05:49.23
VS起動するつもりでついついJane起動しちまう
0163デフォルトの名無しさん2012/12/09(日) 15:11:02.67
Array.Sortなんてあったの知らなかった ごめんちゃい
0164デフォルトの名無しさん2012/12/09(日) 15:46:27.67
>>162
わからなくもない
0165デフォルトの名無しさん2012/12/09(日) 16:09:47.63
Parallelが神すぎる
使いどころはまればネイティブなんておよびじゃねー
0166デフォルトの名無しさん2012/12/09(日) 16:13:07.32
ネイティブではOpenMPで似たようなことができるが
変な言語拡張なしでライブラリレベルでここまで見通し良く書けるのはすばらしい
0167デフォルトの名無しさん2012/12/09(日) 16:18:06.39
大量の文字列(数千行)を描画して、その内、指定範囲内のみ表示し、
表示されている部分以外は処理を行わなず、上下にスクロールして表示領域を変更できる
というものを、既存のコントロール(System.Windows.Forms系)を使用せずに実装したいのですが、どのような
手法をとればよいのでしょうか?また、これらの情報をWeb上で検索する場合
どのようなキーワードが適しているのでしょうか?
0168デフォルトの名無しさん2012/12/09(日) 16:21:22.63
UserControl継承してGDI+で描画するとかか?
0169デフォルトの名無しさん2012/12/09(日) 16:27:31.93
クリッピング領域?
01701662012/12/09(日) 16:29:03.71
あっ・・・すいません。
ここは「Visual」C#のスレでしたね・・・
質問はPlayStationMobileStudio(monodevelop)の内容でした・・・
0171デフォルトの名無しさん2012/12/09(日) 16:32:37.78
まず書き込む前にいろいろ見直せ
レス番も違うぞ
0172デフォルトの名無しさん2012/12/09(日) 16:32:44.53
>>167
たった数千行なら何も考えずに全部描画しても恐らく問題ないと思うけど
01731672012/12/09(日) 16:47:30.51
すいませんでした・・・
0174デフォルトの名無しさん2012/12/09(日) 16:49:58.35
指定範囲内のみ表示だと再描画時の処理が増えてスクロールが重くなるよ
0175デフォルトの名無しさん2012/12/09(日) 16:52:05.34
全部描画だと拡大縮小が重くなるけどな
0176デフォルトの名無しさん2012/12/09(日) 16:55:19.56
スクロールのたびに画像作り直すよかましだろ
0177デフォルトの名無しさん2012/12/09(日) 16:57:26.64
ワールド変換行列
0178デフォルトの名無しさん2012/12/09(日) 16:59:56.59
テキストのこといってんじゃねーの
01791672012/12/09(日) 17:03:37.29
ええ・・・仰るとおり指定範囲プラスアルファの描画が必要なのかなあ?と考えてました・・・

>>172
前述の環境ですので、描画できる範囲が狭いんです
0180デフォルトの名無しさん2012/12/09(日) 17:29:14.24
>>179
だから、もちろん座標系の変換はワールド変換等を使って行ってやる必要はあるけど、
ユーザーコードの側でクリッピングを考える必要は恐らくないよ。

表示範囲外への描画はGDI+が適当に握りつぶすからパフォーマンスはそんなに心配しなくても大丈夫。
0181デフォルトの名無しさん2012/12/09(日) 17:31:11.85
自分でやってることが理解できてねーのに用意されてるもん使いたくねーとか馬鹿じゃねーの
0182デフォルトの名無しさん2012/12/09(日) 17:35:20.20
スクロールはぬるぬるじゃないとだめ?
0183デフォルトの名無しさん2012/12/09(日) 17:35:49.43
ってかDataGridViewコントロールでデータバインディングさせてやれば、
勝手に必要な部分(表示部分)だけ描画してくれるだろ?
0184デフォルトの名無しさん2012/12/09(日) 17:45:06.15
まんこはぬるぬるじゃないとだめ
01851672012/12/09(日) 18:08:54.65
みなさんありがとうございました。
参考にさせていただきます。
0186デフォルトの名無しさん2012/12/09(日) 18:16:15.28
タイマーのtickイベントのintervalを100(0.1秒)にすると、ダブルクリックが無効になるのですが、この対処法あれば教えてください
エクスプローラのフォルダをダブルクリックで開けなくなったりします
恐らく最初のクリックと次のクリックの間にtickイベントが走ってフォーカスか何かが移るのが原因だと思うのですが…
tickイベントに何も処理を書いていなくてもこうなります
intervalの間隔を長くするのはNGでお願いします
0187デフォルトの名無しさん2012/12/09(日) 18:22:48.92
タイマーじゃなくてスレッドを使えばいいよ
0188デフォルトの名無しさん2012/12/09(日) 18:22:56.73
そのタイマーで何をやっているんだ?
フォーカスが移るのが問題ってことまでわかってるなら移らないようにすればいいと思う。
0189デフォルトの名無しさん2012/12/09(日) 20:08:03.60
.NET4.5にEntity Framework5の環境でSQL Server Compact4の更新について質問です。
TransactionScopeを利用して2つのテーブルを更新したいのですが・・
2つめのテーブルの取得クエリを呼ぶと「接続オブジェクトをトランザクション スコープに参加させることができません。」と例外がでます。
どのようにすればよろしいのでしょうか。

今こんな感じにしています。
using (var tr = new TransactionScope())
using (var context = new HogeEntities()) {

 var r1 = (from x in context.TableA select x).Single();
 r1.Hoge = 100;

 var r2 = (from x in context.TableB select x).Single(); //ここで例外(レコードは有り
 r2.Piyo = "Z";

 context.SaveChanges();
 tr.Complete();
}
0190デフォルトの名無しさん2012/12/09(日) 20:31:52.41
>>189
ひどいなこりゃ・・・
0191デフォルトの名無しさん2012/12/09(日) 22:15:40.93
>>189
context.SaveChanges()の処理中は自動的に
トランザクションが適用されるから
このケースの場合TransactionScopeは不要。
0192デフォルトの名無しさん2012/12/09(日) 22:40:40.03
ほにゃららインターフェース型の値を返すメソッドというのは、
ほにゃららインターフェースを実装してるクラスのインスタンスへの
参照を返すメソッドってことでおk?
0193デフォルトの名無しさん2012/12/09(日) 22:41:38.77
なんで今そんなこと聞くのよ?!
0194デフォルトの名無しさん2012/12/09(日) 22:46:00.41
クラスじゃなくて値型の可能性もある
0195デフォルトの名無しさん2012/12/09(日) 22:50:05.07
構造体の可能性もあるけど返ってくるのは常にオブジェクト参照だよ
値型はボックス化しないとインターフェイスにキャストできない
0196デフォルトの名無しさん2012/12/09(日) 23:27:40.36
インターフェースなんて
クラスとか構造体とかに別の型名を付けてるようなものだ。
0197デフォルトの名無しさん2012/12/09(日) 23:28:28.51
???????????????
0198デフォルトの名無しさん2012/12/10(月) 00:26:16.25
>>150
これって本当にそうなの?そういう潮流なの?
0199デフォルトの名無しさん2012/12/10(月) 00:27:23.63
foreachよりToArrayの方が多く使うぐらいだわ
0200デフォルトの名無しさん2012/12/10(月) 00:56:05.81
単純に見づれえから130にはしないというだけの話
0201デフォルトの名無しさん2012/12/10(月) 00:57:25.25
ForEachはforeachがあるから要らないって事だろう
副作用がどうとかはただの妄想
0202デフォルトの名無しさん2012/12/10(月) 00:59:06.09
>>201
Linqで射影とかした結果に対して一連の処理するときとか
いちいち変数作ったり配列作ったりせず、直結して書けるから楽だと思うんだけどな。
まあ好みの問題だけど。
0203デフォルトの名無しさん2012/12/10(月) 01:01:41.09
個人的には変換・抽出と消費は分けた方が綺麗だと思う
0204デフォルトの名無しさん2012/12/10(月) 01:01:53.56
foreach(var a in hoge.Select(func)){ ... }

でいいじゃない
0205デフォルトの名無しさん2012/12/10(月) 01:02:18.04
動的型の言語ならやるけどC#だと野暮ったすぎてパスだな
普通に書いた方が見通しいい
0206デフォルトの名無しさん2012/12/10(月) 01:09:44.59
野暮ったいってそれだけで注意力を損なうから結構大事よ。
0207デフォルトの名無しさん2012/12/10(月) 08:06:20.79
IContainerインターフェイスを実装したクラスを作ってうんぬん
みたいなことをしなければならないとき
皆さんは一切何も見ずに記憶だけでささっと作れちゃうもんなんですか?
IComponentとかいろいろ絡んでくるじゃないですか

こういう風に考えれば全然難しく考えなくていいいみたいな視点というか、
理解の仕方とかがあれば教えてください。
0208デフォルトの名無しさん2012/12/10(月) 09:18:33.62
何を悩んでいるのかわからないけど

インターフェイスの実装はVSで
class HogeContainer : IContainer
{
...
}
の「IContainer」のところにマウスカーソルあててメニューだせば自動でテンプレ追加してくれるし

あとインターフェイスは抽象化されてるからインターフェイスなんだから
上っ面(シグニチャの合ってるメソッドが揃ってるか)だけ考えときゃいいんじゃない
0209デフォルトの名無しさん2012/12/10(月) 09:23:09.52
IContainerなんて実装したいと思ったこともなかったわ
0210デフォルトの名無しさん2012/12/10(月) 10:01:27.90
>>208
ありがとうございました。
0211デフォルトの名無しさん2012/12/10(月) 10:02:38.33
IComponentとかIContainerとかってWinFormsのデザイナに張り付けられるコンポーネント作るやつだろ
そんなもん熟練者が商用コンポーネント作るんでなければ要らん
0212デフォルトの名無しさん2012/12/10(月) 10:25:21.32
既存のcsvファイルで、1列目だけに、全行データを追記するには、どうしたら良いですか?
0213デフォルトの名無しさん2012/12/10(月) 10:31:21.08
全く意味が分からない
一列目だけ更新したいってこと?
無理だから全部書き直し
幅が完全に固定されているならシークしながらとびとびに書き込めないこともないが
サロゲートペアとか考え出すと泥沼
0214デフォルトの名無しさん2012/12/10(月) 10:56:50.96
質問の下手な初心者は上達しないと常々思っている。
0215デフォルトの名無しさん2012/12/10(月) 11:06:59.30
改行を消せばおk
じゃーダメなんか?
0216デフォルトの名無しさん2012/12/10(月) 12:04:44.13
質問の内容から経験で推測できない奴は質問者のレベルにすら達していないと常々思っている。
0217デフォルトの名無しさん2012/12/10(月) 12:16:10.56
どうでもいいけど寒い
ストーブはあるんだが灯油がない
近くにスタンドはあるんだがお金がない
そんな俺東北
マジで凍死するかも
0218デフォルトの名無しさん2012/12/10(月) 12:16:57.40
へーそう
今後は思うだけで書かない方がいいよ
0219デフォルトの名無しさん2012/12/10(月) 12:46:52.43
へーそう
今後は思うだけで書かない方がいいよ
0220デフォルトの名無しさん2012/12/10(月) 12:49:26.02
スレチもスルーできない馬鹿もゴキブリ以下だと常々思っている。
0221デフォルトの名無しさん2012/12/10(月) 12:51:21.96
へーそう
今後は思うだけで書かない方がいいよ
0222デフォルトの名無しさん2012/12/10(月) 12:53:20.10
tp:://d.hatena.ne.jp/okazuki/20110309/1299683215
↑
のページを参照して国際化対応をやっているのですが、
上のページの「Resources.resx」にて作られるクラスのコンストラクタがinternalになってしまうので、
コンパイルエラーが発生してしまいます。
手動でコンストラクタを public にすると一時的にコンパイルエラーが解決するのですが、恒久的な解決策になっていません。
すいませんが、国際化対応を行うにはどうしたら良いか、正しい方法を教えてくれないでしょうか。
その方法がない場合は、resxで作られるクラスのコンストラクタをpublicにする方法を教えてください。
おしえてくださいえろいひと
0223デフォルトの名無しさん2012/12/10(月) 12:53:29.42
しかし寒いな
マジで凍死するかも
そんな俺九州
0224デフォルトの名無しさん2012/12/10(月) 12:54:22.02
せめて沖縄にしとけよ
0225デフォルトの名無しさん2012/12/10(月) 13:04:01.45
>>222
リンク先読んでないけど
Resources.resx
Resources.ja.resx
Resources.en.resx
Resources.ar.resx

みたいにするとサテライトアセンブリつくってくれるんじゃね?
0226デフォルトの名無しさん2012/12/10(月) 13:39:07.04
へーそう
今後は思うだけで書かない方がいいよ
0227デフォルトの名無しさん2012/12/10(月) 13:59:57.53
へーそう
今後は思うだけで書かない方がいいよ
0228デフォルトの名無しさん2012/12/10(月) 14:18:57.61
うそーへ
よいいが方いなか書でけだう思は後今
0229デフォルトの名無しさん2012/12/10(月) 15:08:41.47
ない寒しかし
0230デフォルトの名無しさん2012/12/10(月) 15:12:19.09
何この糞スレ存在する意味あるのかよ
0231デフォルトの名無しさん2012/12/10(月) 15:16:30.78
お前よりはあるんじゃね
0232デフォルトの名無しさん2012/12/10(月) 15:25:18.78
>>225
サテライトアセンブリ・・・というのは
このコードはツールによって生成されました。ランタイムバージョンry
とかいう、ソースコードのことでしょうか?

だとすると、それは作られています。
そのコードに記述されたクラスのコンストラクタがinternal になってしまうんです。
それをpublicにしたいんです。
0233デフォルトの名無しさん2012/12/10(月) 16:50:22.68
へーそう
今後は思うだけで書かない方がいいよ
0234デフォルトの名無しさん2012/12/10(月) 17:10:26.79
しかし寒いな
0235デフォルトの名無しさん2012/12/10(月) 17:25:22.91
>>232
〜のことでしょうかじゃねーよ
ぐぐれよハゲ

何やりたいのかすら書いてないから分からないけど
その裏ワザてきなローカライゼーションじゃなくて
用意されたローカライゼーションは試したのかよハゲまくり野郎が
0236デフォルトの名無しさん2012/12/10(月) 17:29:24.74
コンソールアプリケーションをPowerShellのcmdletへ移行できるか試しているのですが、app.configが反映されません。
どのようにすればいいのでしょうか?
0237デフォルトの名無しさん2012/12/10(月) 17:35:47.93
反映するようにすればいいのです
0238デフォルトの名無しさん2012/12/10(月) 17:38:33.49
アプリケーションを作りたいのですが、作れません。
どのようにすればいいのでしょうか?
0239デフォルトの名無しさん2012/12/10(月) 17:41:51.75
質問の下手な初心者は上達しないと常々思っている。
0240デフォルトの名無しさん2012/12/10(月) 17:46:39.33
質問の上手な初心者は質問する前に自己解決できてしまうと常々思っている。

なぜなら、どのように質問すれば上手く伝わるのかを考える時点で答えが出てしまうから。
0241デフォルトの名無しさん2012/12/10(月) 17:55:28.14
アプリケーションを作ります
0242デフォルトの名無しさん2012/12/10(月) 18:26:57.02
この猿真似はWin32APIスレの芸風
0243デフォルトの名無しさん2012/12/10(月) 22:21:54.00
うーむ。
暇だからwin8のデスクトップでタートルグラフィックスを書いてたら、
間を開けた動的な描画イベント来なくて小一時間悩んだわ。
結局Timerクラス起動して無理やりイベントループ回したけど、なんかダサイわ。

こういうのってなんか対策有る?
02442432012/12/10(月) 22:26:13.06
あー、Winformね。
0245デフォルトの名無しさん2012/12/10(月) 22:36:44.38
「間を開けた動的な描画イベント」が何を言っているのか意味が分からない。
なんか根本的に勘違いしてるんじゃないの?

何かの図形を一度にではなく少しずつ描画したいのなら、図形を更新したいタイミングで
クライアント領域を無効化してやるのが普通だと思うけど。
0246デフォルトの名無しさん2012/12/10(月) 22:43:43.61
>>245
this.invalidate(false)でフォームを無効化して描画待ちしてたんだけど、なんか描画されなかった。
パフォーマンス見るためにタスクマネージャー起動したらそのタイミングで書き換えが起こったりわけわかめだった。
なんか、イベントループ回ってないっぽいんだよね。ウィンドウの上でカーソル動かしたら描画されたりしたし。
だから、タイマー突っ込んで回したんだ。
0247デフォルトの名無しさん2012/12/10(月) 22:58:08.71
タートルグラフィックスって何かと思ったら木の枝みたいなのがかかれていくやつか

描いてる最中も経過をリアルタイムで表示したいのか
それとも描き終わるまでは特に表示がなくてもいいのかで
表示の仕方変わるよね
02482122012/12/10(月) 22:58:56.89
既存のcsvファイルを一行ずつ読み、その文字列の先頭にデータを連結し、
一行ずつ読み込んだ文字列の長さが0の時はスキップで、
最後に、上書き保存することで出来ました。
0249デフォルトの名無しさん2012/12/10(月) 22:58:57.93
うちだけのバグかもしれんから、半信半疑だけど上げてみる。
ttp://www1.axfc.net/uploader/Sc/so/403931.zip

現象は、フォームのコンストラクタにあるTimerクラスのstartを起動するかしないかだけで発現している。
他の環境でうまくいくんだったらうちの問題だ。ちなみにOSはWin8pro。
0250デフォルトの名無しさん2012/12/10(月) 23:01:33.49
>>247
それを制御できるコマンドを追加したんだ。

あー、そうだ。
ちなみに>>249はバグってる可能性が高いので、転用は厳禁だよ。
やるんだったら、自己責任でお願いね。
02512472012/12/10(月) 23:18:11.96
色を一色しか使わないのならGraphicPathにLineなどを
追加していけばいいんじゃないかな?

DrawPathで描画すれば履歴にあたる部分を自分で書かなくても
.net内部で最適化された機能でPathを描いてくれるよ
0252デフォルトの名無しさん2012/12/10(月) 23:25:00.35
>>251
一応、機能としては色変更入ってるけど、いらないかなー。むー。
GraphicPathは使ったこと無いのでちょっと試してみようかな。
■ このスレッドは過去ログ倉庫に格納されています