1 名前:デフォルトの名無しさん [2017/11/07(火) 21:11:25.20 ID:LeQqgpmT0.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part132 mevius.5ch.net/test/read.cgi/tech/1507543256/ ■関連スレ C#, C♯, C#相談室 Part95 mevius.5ch.net/test/read.cgi/tech/1508180530/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源https://msdn.microsoft.com/ja-jp/library/gg145045.aspx https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
465 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 22:44:23.78 ID:EAeU3mIh0.net] >>458 クソコード貼っていい気になってるの? アドバイスしてあげるけど 滅茶苦茶レベル低いよ
466 名前:デフォルトの名無しさん [2017/11/15(水) 23:03:01.93 ID:vH3D/QHI0.net] キミ流のコードおなシャス!
467 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 23:19:43.56 ID:rNYxO5wL0.net] >>436 ここは初心者スレじゃないのかw
468 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 23:22:37.65 ID:vwyVPxZJp.net] 人間初心者のスレですよ、たぶん
469 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 23:25:46.54 ID:vwyVPxZJp.net] 正確にはC#で記述された人工知能なんですけどね
470 名前:デフォルトの名無しさん [2017/11/15(水) 23:26:21.77 ID:H4muME/S0.net] >>428 どこ情報?
471 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 23:47:19.33 ID:EAeU3mIh0.net] >>464 amazonで予約中になってる
472 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 12:14:27.14 ID:x/aWQ3sN0.net] stringは参照型だから既定値はnullということで合ってるよね?
473 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 12:22:49.67 ID:/4eW5bh4M.net] >>466 既定値はnullだけどstringはイミュータブル型
474 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 13:24:58.55 ID:lGT15xaEa.net] >>466 stringは参照型で規定値はnull
475 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 18:15:43.67 ID:7VJMckpW0.net] WPFじゃなくてWindowsForms内で簡単な3D描画したいんですが どういう風がいいでしょうか。 とりあえず箱を線で描くだけなんですが。 ・DrawLineみたいなので始点終点を3次元(X,Y,Z)で指定し描画 ・視点の位置(X,Y,Z)と向きを指定して表示 って風な感じが希望なんですが・・・・
476 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 18:25:02.34 ID:K+YFepCs0.net] それでいいじゃん
477 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 18:27:37.39 ID:7VJMckpW0.net] DrawLine の Point型 って X,Y しかないじゃないですか。 X,Y,Z で指定できる DrawLine がないのかと
478 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 18:32:16.65 ID:F5ZZYHwp0.net] 気合で座標計算
479 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 18:39:59.53 ID:K+YFepCs0.net] カメラ固定でいいんだろ? ZがXYのどこになるかは簡単な計算で出せる 紙に気に入った角度の3軸を書いて見ればいい
480 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 18:49:26.46 ID:rygh13wZ0.net] OpenTK
481 名前:でも使えば? [] [ここ壊れてます]
482 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 19:04:34.95 ID:JEjgvNkla.net] >>471 カメラの視線方向をZ軸、カメラから1000mm先のカメラの視線に垂直な平面上の1000mmの 線分がモニター上に1000mmで表示されるモデルを採用、3D、2Dともに同じ単位系(例えばmm) を使用する条件なら、3D空間上の点(X, Y, Z)を2D上の点(x, y)に写像するには、 (x, y) = (X/Z, Y/Z) でいいと思う。知らんけど 2DグラフィックのY軸が下向きなのを考慮するならyはもちろん-1倍する
483 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 19:32:37.14 ID:JEjgvNkla.net] 描画面の中心を原点にする変換も必要かw こっちはGraphicsの組み込みの機能でできるけど
484 名前:デフォルトの名無しさん [2017/11/16(木) 19:52:49.24 ID:o+kP3k0v0.net] 透視投影 satoh.cs.uec.ac.jp/ja/lecture/ComputerGraphics/3.pdf
485 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 19:57:23.76 ID:K+YFepCs0.net] そんな面倒なことしなくても カメラ固定ならXYに足すだけでいいじゃん Zが1ならXYに0.5ずつ足すみたいのでいいよ Zが2ならXYに1ずつ足す Zが3ならXYに1.5ずつ足す みたいな
486 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 21:38:46.30 ID:ac8ZDyBE0.net] >>469 URLが何故か張れないんだが C#3D立方体ワイヤーフレーム (第1回) for VS2013 Express でググって見つかるところが参考になる ライブラリを期待しているのならC++で探すしかないだろうな DLLになっていればC#からでも使えるから
487 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 22:56:01.22 ID:851mScQ5a.net] いくらなんでもopenGLライブラリはwinforms用ぐらいあると思う windows forms openglでググれ
488 名前:デフォルトの名無しさん [2017/11/16(木) 23:02:09.93 ID:o+kP3k0v0.net] >>474 でもうでてる
489 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 23:17:24.79 ID:Tv1Vr9CT0.net] 時間, 名前, テスト回数 2017/1/1, A氏, 3 2017/1/1, A氏, 4 2017/1/1, B氏, 1 2017/1/1, B氏, 2 2017/2/1, A氏, 1 2017/2/1, A氏, 2 2017/2/1, B氏, 1 2017/2/1, B氏, 2 2017/3/1, A氏, 1 2017/3/1, A氏, 2 2017/3/1, A氏, 3 ↑のようなデータがある場合 ↓のように名前ごとに最新の時間のデータを取得したい。 2017/3/1, A氏, 1 2017/3/1, A氏, 2 2017/3/1, A氏, 3 2017/2/1, B氏, 1 2017/2/1, B氏, 2
490 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 23:18:08.01 ID:Tv1Vr9CT0.net] >>482 ↓のような感じで取れるとは思いますが 実際のデータでは時間も名前も複数あるのでLINQで一発で取れる書き方はないでしょうか? public class Test { public DateTime 時間 { get; set; } public string 名前 { get; set; } public int テスト回数 { get; set; } } List<Test> ListTest = new ListTest (); var List1 = ListTest.Where(x=>x.名前 == "A氏" & x.時間 = 2017/3/1).ToList(); var List2 = ListTest.Where(x=>x.名前 == "B氏" & x.時間 = 2017/2/1).ToList(); List3.add(List1); List3.add(List2);
491 名前:デフォルトの名無しさん [2017/11/16(木) 23:18:26.88 ID:o+kP3k0v0.net] LINQの出番再び
492 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 23:19:34.43 ID:eJZERDUZ0.net] 友の会スレに行け
493 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 23:28:56.32 ID:Tv1Vr9CT0.net] そんなこといわずに優しいレスくれよ 友の会ってどこなの?
494 名前:デフォルトの名無しさん [2017/11/16(木) 23:37:44.24 ID:o+kP3k0v0.net] list.GroupBy(item=>item.名前).Select(group=>group.Max(item=>item.日時.Ticks)).ToList<Test>()
495 名前:デフォルトの名無しさん [2017/11/16(木) 23:44:12.00 ID:o+kP3k0v0.net] 今試したらエラー吐いたけど参考にしてくれ
496 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 23:44:38.82 ID:Tv1Vr9CT0.net] >>487 レスありがとうございます。 Ticks使ったことないので参考になりました。 ありがとうございます。
497 名前:デフォルトの名無しさん [2017/11/17(金) 00:03:01.06 ID:LOAPaCxV0.net] ListTest.GroupBy(item => item.名前).Select(group => group.Aggregate((max, item) => item.時間 > max.時間 ? item : max)).ToList()
498 名前:デフォルトの名無しさん [2017/11/17(金) 00:16:27.21 ID:ZIvR54fI0.net] DateTimeオブジェクトはそれ自体に大小関係演算子使えるしな
499 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 00:34:17.30 ID:xoZUoffUa.net] どれも微妙に仕様から外れてるような…
500 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 00:40:57.63 ID:45Grbd2f0.net] 並びの下の方が同じ日付でも最新なの? まあ、そういうデータよくあるけど
501 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 00:54:10.94 ID:E5GExksf0.net] SQLだとドヤ顔でExistsしてるブログがたくさん出るやつだな
502 名前:デフォルトの名無しさん [2017/11/17(金) 00:57:10.96 ID:ZBvifIa80.net] 下のやつを最新にしたいなら>=にすればいいのかな 順番通りの保障ないかもしれないけど
503 名前:デフォルトの名無しさん [2017/11/17(金) 01:02:10.05 ID:ZBvifIa80.net] ienumerbleだからだめか 最初の段階でインデックスとペアにするとか
504 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 01:13:33.00 ID:xoZUoffUa.net] 多分個人の最終日のすべてデータが欲しいんだよね
505 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 01:21:22.13 ID:xoZUoffUa.net] う〜んできたけど汚い
506 名前:デフォルトの名無しさん [2017/11/17(金) 02:55:06.18 ID:ZBvifIa80.net] これだけで各々の最新のデータが取れるはず。 ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList() ・GroupBy Elements in a grouping are yielded in the order that the elements that produced them appear in source. https://msdn.microsoft.com/ja-jp/library/bb534304(v=vs.110).aspx ・OrderBy キーに従って昇順のシーケンスの要素を並べ替えます。 このメソッドは、安定した並べ替えを実行します。つまり、2 つの要素のキーが等しい場合は、要素の順序が保持されます。 https://msdn.microsoft.com/ja-jp/library/bb534966(v=vs.110).aspx 元データの並び順で下にあるほうのが優先されてるのをはっきりとわかるように書きたかったらかなり長いけどこうかな?w ListTest.Select((item, index) => { Item = item, Index = index } ).GroupBy(pair => pair.Item.名前).Select(group => group.GroupBy(pair => pair.Item.時間).OrderBy(innerGroup => innerGroup.Key).Last().OrderBy(pair => pair.Index).Last().Item)
507 名前:デフォルトの名無しさん [2017/11/17(金) 02:56:22.67 ID:ZBvifIa80.net] .ToList() w
508 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 09:51:19.99 ID:45Grbd2f0.net] これ、仕事で使われたらキレるな
509 名前:デフォルトの名無しさん [2017/11/17(金) 10:01:35.59 ID:yfGcWiWk0.net] 落ち着けよ、おっさん。
510 名前:デフォルトの名無しさん [2017/11/17(金) 11:41:22.51 ID:vZ4OY4a56.net] LINQ使わなかったらこうか? int indexOfSame名前(Test item, List<Test> list) { for(var i=0;list.Count;i++) if(list[i].名前==item.名前){ foundIndex=i; return i; } } return -1; } List<Test> extractLatestData(List<Test> list) { var result=new List<Test>(); foreach(var item in list){ var foundIndex=indexOfSame名前(item, result); if(foundIndex>=0){ if(item.時間>=result[foundIndex].時間){ result[foundIndex]=item; } }else{ result.Add(item); } } return result; } var result= extractLatestData(ListTest); LINQ使えばこう? var result=ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList();
511 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 11:58:47.46 ID:XIkoXTHK0.net] 横に長くて拒否反応出るのも解らないでは無いんだが 読む時は愚直に左から読んでいくだけだし、PowerShell使ってると日常茶飯事だしな……
512 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 12:03:36.39 ID:/4Y2zvAi0.net] 普通は、改行しながら書く
513 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 12:08:02.02 ID:qxZxmWbCM.net] >>504 じゃあ、全コード一行でいいじゃん 左から読んでいくだけだろ?
514 名前:デフォルトの名無しさん [2017/11/17(金) 12:11:30.21 ID:vZ4OY4a56.net] foreach~~ result.Add(latestDataOf(リスト, 名前)) とかのほうがいい?
515 名前:デフォルトの名無しさん [2017/11/17(金) 12:14:53.31 ID:vZ4OY4a56.net] これだとおかしいか foreachであらかじめリストから抽出しておいた名前の種類の一覧とかを与えないとあれか
516 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 12:23:06.18 ID:uCPaYCi4d.net] 最新取る頻度が高いなら最新テーブルと履歴テーブルを分けてほしい
517 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 13:11:41.07 ID:QYCCbo0/0.net] 推敲してから書き込めば一度で済むのに。。。
518 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 13:38:17.44 ID:45Grbd2f0.net] >>503 コメントがないじゃん やり直し
519 名前:デフォルトの名無しさん [2017/11/17(金) 14:48:58.50 ID:y/lDgZqq6.net] みんなって推敲してるの? 真面目だな 俺もこれからはそうするかもしれん
520 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 15:16:56.52 ID:Km51pzYd0.net] 真面目に考えるとデータベースに更新分Insertしてからあらかじめ作ってあるビューをSelectするだけ GroupBYや集計はDBでやった方が楽だしこっちでは表示件数や順序くらいしかいじらない データベースといってもローカル鯖や組み込みもある、適材適所
521 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 17:32:51.55 ID:VYtKuwzgM.net] インサート前にソートとかボトルネックだよね
522 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 18:05:42.37 ID:g1yHwUG3M.net] sources .GroupBy(s => new { 名前, テスト回数 }) .Select(g => new { g.Key.名前, g.Key.テスト回数, 時間 = g.Max(s => s.時間) }); 悩むところねえなぁ
523 名前:デフォルトの名無しさん [2017/11/17(金) 18:29:28.97 ID:ZBvifIa80.net] 汎用性低いな。
524 名前:デフォルトの名無しさん [2017/11/17(金) 18:32:42.23 ID:ZBvifIa80.net] ListTest.GroupBy(item => item.名前).Select(group => group.OrderBy(item => item.時間).Last()).ToList() ワシのが1番じゃろ。
525 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 18:42:45.87 ID:1r1wVT3lM.net] よくみたら仕様ちゃうやん自分… src.GroupBy(s => s.名前) .SelectMany(g => g.Where(t => t.時間 == g.Max(u => u.時間)); これが王道の正解な
526 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 18:50:16.49 ID:1r1wVT3lM.net] こっちのが速いかな sec.ToLookup(s => s.名前) .Select(g => new { g, m = g.Max(t => t.時間) .SelectMany(p => p.g.Where(u => u.時間 == p.m);
527 名前:デフォルトの名無しさん [2017/11/17(金) 18:50:30.24 ID:ZBvifIa80.net] そういやラムダ式の中の命名は超シンプルでいいんだったな。 >>518 最大値を探すためにループ、その値を持ち主をまた探すためにループってなんかキモくね?それが王道なのか。
528 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 19:36:01.87 ID:15/bjs8Fd.net] >>482 まず時間と名前でグループ化 時間, 名前, テスト回数 2017/1/1, A氏, 3,4 2017/1/1, B氏, 1,2 2017/2/1, A氏, 1,2 2017/2/1, B氏, 1,2 2017/3/1, A氏, 1,2,3 あとは日付けでソートして名前でDistinctするかな
529 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 19:40:08.46 ID:hFmoO+PyM.net] >>520 ループ? SelectManyはSQLで言えば結合みたいなもの LinqのJoinだとこんな感じかな src.GroupBy(s => s.名前) .Join(src, g => new { 名前 = g.Key, 時間 = g.Max(t => t.時間) }, u => new { u.名前, u.時間 }, (g, u) => u); SelectManyの方がわかりやすいな
530 名前:デフォルトの名無しさん [2017/11/17(金) 19:46:57.67 ID:ZBvifIa80.net] Maxを探すためにループ、その持ち主また探すためにWhereでループ
531 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 20:26:05.65 ID:/4Y2zvAi0.net] max ← 持ち主 こういう方向のリンクなら、max を探してから、持ち主も探さなきゃいけないけど、 逆方向のリンクなら、すぐ
532 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 20:34:11.03 ID:45Grbd2f0.net] 名前、日付で降順ソートして名前ごとの最新取るだけでなげーな
533 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 20:40:49.52 ID:2lBbqhr3M.net] >>525 それ結局最後まで舐めないと全ての名前が分からないから何の意味もないぞ
534 名前:デフォルトの名無しさん [2017/11/17(金) 21:20:38.75 ID:Xkp76caL0.net] LINQって実は裏側でforeachで回してるってホント?
535 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 21:41:36.29 ID:SHrICtEWr.net] >>527 ループは一回
536 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 21:50:29.21 ID:/4Y2zvAi0.net] 例えば、100個の中から、1個を探すのは、全(線形)探索 O(n) しかできない 全データにインデックス・ハッシュがついていれば、O(1)だが、 ソートするには、全探索する必要がある DB みたいに、B-tree でソートされているのなら、O(log n)
537 名前:uアルゴリズムと計算量」を勉強して [] [ここ壊れてます]
538 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 21:53:48.98 ID:45Grbd2f0.net] >>529 すればいいじゃん 何がしたいの? 速度アップしたいの?
539 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 22:28:51.51 ID:fmtM/py00.net] こんなにレスが付いてるとは思わなかった。 無事満足いく結果がとれるようになりました。 試したことないのもあって勉強になりましたありがとうございます。
540 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 22:41:16.10 ID:bpYBjcB50.net] >>527 記述によっては複数回どころか毎回ループもあり得るから注意な
541 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 23:53:01.59 ID:f2B03iH5a.net] foreach版も作ったけど 一回回すだけで辞書はできるので計算量は減るし再利用にも便利
542 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 01:22:17.61 ID:dA2WGfe00.net] DBに接続して操作するクラスを作ってるのですが、コンストラクタでDBに接続してデストラクタとDisposeで切断処理を書こうと思っています 基本的にはこのような書き方でいいのでしょうか? 各処理のメソッドで接続切断を仕込むのもあると思うのですが連続で処理する場合たとパフォーマンスの低下に繋がると思ったので気になりました
543 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 01:26:06.53 ID:uyqqFOTJ0.net] これEXISTS使うSQLの定番問題なんでその定番SQLが生成されるようにAnyするのが最速 そう、EFならね
544 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 01:33:21.33 ID:Q2wZVPR60.net] >>534 途中でLANケーブル抜いたらどういう動作するの?
545 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 01:34:15.67 ID:Q2wZVPR60.net] そしてすぐに指す!
546 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 01:37:14.30 ID:dA2WGfe00.net] >>536 DBはローカルなんでそこは考えてませんでした 途中でDBとの接続切れたらエラー返すぐらいしか考えてないですね そこでクラス抜けるようにするかどうかは分かりませんがデストラクタかdisposeに入ると思います まだ実装してませんが
547 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 01:37:59.01 ID:dA2WGfe00.net] >>535 接続部分はAnyでまとめた文打ち込む前後だけ開くってことでしょうか?
548 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 02:05:22.67 ID:uyqqFOTJ0.net] >>539 悪いが俺のレスは質問と関係ないぞ ちなみに各DBのコネクションクラスは質問通りのIDisposableな自動Close設計で 連続する処理する場合はコネクションを開いたまま使いまわすのが普通 SQLite.NETが参考と言うかやりたいことそのままじゃないか?
549 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 02:09:22.40 ID:dA2WGfe00.net] >>540 ありがとうございます!
550 名前:デフォルトの名無しさん [2017/11/18(土) 02:43:03.59 ID:NMU9eY0n0.net] >>540 ありがとうございます!
551 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 16:41:16.80 ID:S0Dl2HXu0.net] >>540 ありがとうございます!
552 名前:デフォルトの名無しさん [2017/11/18(土) 17:07:33.62 ID:18CT9AkR0.net] https://ideone.com/a5csSX たくさんボタンがあって、ボタンを押すとそれに対応した画像を保存するプログラムなのですが ひとつのsaveFileDialogを使いまわすにはどうすればいいでしょうか 上のコードのpictureBox_1、pictureBox_2が引数になる様にしたいのですが
553 名前:デフォルトの名無しさん [2017/11/18(土) 17:30:37.37 ID:mVpmRSdA6.net] >>544 if (saveFileDialog1.ShowDialog() == DialogResult.OK) { // 画像保存処理 }
554 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:33:50.19 ID:v7G/T0vB0.net] >>544 ボタンで分岐ならすぐできる private void button_Click(object sender, EventArgs e) { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); if (saveFileDialog1.ShowDialog() != DialogResult.OK)) return; if (sender==button1) { pictureBox_1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp) } else if (sender==button2) { } }
555 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 18:31:43.88 ID:+tDuSBLG0.net] >>544 ボタン事に対応したピクチャーボックスがあるならTagに設定しておくと便利だよ button1.Tag=pictureBox_1;ってしといて ((PictureBox)(((Button)sender).Tag)).Imageって感じで画像を取得できる
556 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 19:04:31.90 ID:yU1kJYivM.net] void RegisterClickEvent(Button b, PictureBox p) { var d = new SaveFileDialog(); b.Click += (s, e) => { if (d.ShowDialog() == DialogResult.OK) { p.Image.Save(d.FileName, ...); } } } // on load var pairs = new [] { new { b = button_1, p = pbox_1 }, new { b = button_2, p = pbox_2 }, ... }; foreach(var pair in pairs) RegisterClickEvent(pair.b, pair.p);
557 名前:デフォルトの名無しさん [2017/11/18(土) 19:27:10.06 ID:18CT9AkR0.net] みなさん有難う御座います。 やってみます。
558 名前:デフォルトの名無しさん [2017/11/18(土) 19:30:23.03 ID:NMU9eY0n0.net] こんなところにもちゃっかり匿名クラスw
559 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:21:22.01 ID:6NKrq56ga.net] >>544 まずSaveFileDialogのFileOKイベントを使ってるのがまずいくない? これだと結局FileOKのイベントハンドラに引き渡すためだけにImageかパスをフィールドに持つ必要が出てくる private string AskSaveNameFromUser() { var sfd = new SaveFileDialog(); sfd.DefaultExt = "bmp"; sfd.Filter = "BMP形式|*.bmp"; if (sfd.ShowDialog(this) == DialogResult.OK) { return sfd.FileName; } return null; } こんな風にユーザーから保存名を貰ってくるメソッドを作った方がいいんじゃない?
560 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:22:04.37 ID:6NKrq56ga.net] その上で private bool TrySaveImage(Image img) { var savePath = AskSaveNameFromUser(); if (savePath == null) return false; try { img.Save(savePath, ImageFormat.Bmp); } catch (Exception) { return false; } return true; } こんなメソッドを用意すれば、後はラムダ式使ってボタンのclickイベントにこれを紐づけするだけ button1.Click += (s, e) => TrySaveImage(pictureBox1.Image);
561 名前:デフォルトの名無しさん [2017/11/18(土) 20:36:23.54 ID:NMU9eY0n0.net] ボタン押した時に保存したいんだからClickイベントハンドラの中に記述すればいいだろ。
562 名前:デフォルトの名無しさん [2017/11/18(土) 20:42:16.49 ID:2DwFpZ7T0.net] フォームで画像を表示したところ、それを閉じなければコンソールに処理が戻らないプログラムになってしまいました 同時に動かす方法があれば教えていただきたいです
563 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:46:06.00 ID:v7G/T0vB0.net] >>554 コンソールって何を指しているの? フォームに画像表示(パネルでもPictureboxでも)して反応が無くなるってことは普通は無い
564 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:46:26.41 ID:9PzaXhXFM.net] START をコマンド名の前に書いても? とエスパー回答
565 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:48:58.44 ID:v7G/T0vB0.net] モーダルフォームで表示しているのならモードレスフォームにして表示 https://dobon.net/vb/dotnet/form/showform.html