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
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
566 名前:デフォルトの名無しさん [2017/11/18(土) 20:53:01.78 ID:NMU9eY0n0.net] >>554 Threadを使おう var thread = new System.Threading.Thread( () => { System.Windows.Forms.Application.Run(form); }); thread.Start();
567 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 20:57:25.99 ID:6NKrq56ga.net] 一つのプロセスで複数のUIスレッド作って大丈夫なんだっけ?
568 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:01:09.80 ID:GCI+mPsu0.net] すみません、上手く説明できないと思うので一応コードも載せます やりたいことはコマンドプロンプト上で流れる処理の途中で画像を呼び出すことです その際、処理が止まってしまいます var form = new System.Windows.Forms.Form(); var pb = new System.Windows.Forms.PictureBox(); pb.Image = System.Drawing.Image.FromFile(imgpath); pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; form.Controls.Add(
569 名前:pb); System.Windows.Forms.Application.Run(form); [] [ここ壊れてます]
570 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:02:37.60 ID:GCI+mPsu0.net] 途中で送信してしまいました・・ 頂いた返事から色々と試してみようと思います!
571 名前:デフォルトの名無しさん [2017/11/18(土) 21:03:01.96 ID:NMU9eY0n0.net] >>560 var form = new System.Windows.Forms.Form(); var pb = new System.Windows.Forms.PictureBox(); pb.Image = System.Drawing.Image.FromFile(imgpath); pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; form.Controls.Add(pb); var thread = new System.Threading.Thread( () => { System.Windows.Forms.Application.Run(form); }); thread.Start();
572 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:04:16.09 ID:v7G/T0vB0.net] >>560 Application.Run(form);で止まるなそれは フォームのインスタンス作ってShow()できないの?
573 名前:デフォルトの名無しさん [2017/11/18(土) 21:06:38.70 ID:NMU9eY0n0.net] Application.Runをしないとメッセージ来ねえからShowしても一瞬で消えるだろ。
574 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:07:12.07 ID:v7G/T0vB0.net] じゃあ別スレッドでやるしかないのか
575 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:19:47.80 ID:GCI+mPsu0.net] >>562 並列処理で無事起動できました! イカのような記号が何を意味するか分かりませんが いい機会なのでスレッドも勉強してみます >>563 なぜApplication.Run(form)で止まってしまうのでしょうか? フォームに制御が移ってしまっているということですかね
576 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:23:57.35 ID:D1AcCkIgr.net] Task使え!
577 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:26:29.84 ID:v7G/T0vB0.net] >>560 その部分全部を別クラスにしてインスタンスを作って呼び出せば動いた 実際に呼び出す部分は formtest f = new formtest(); f.formshow(); を入れておいて 別クラスで例えば class formtest:Form { public formtest() { } public void formshow() { var form = new System.Windows.Forms.Form(); var pb = new System.Windows.Forms.PictureBox(); pb.Image = System.Drawing.Image.FromFile(imgpath); pb.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; form.Controls.Add(pb); System.Windows.Forms.Application.Run(form); } } を作っておく >>566 ああちょっと遅かったか
578 名前:.>>568 mailto:sage [2017/11/18(土) 21:29:35.82 ID:v7G/T0vB0.net] ごめんこれ無しでw>>568
579 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:36:41.17 ID:GCI+mPsu0.net] >>568 丁寧に教えてもらいありがとうございます どの実現方法も勉強になりますし、解がすぐに思い浮かびコードにできるのは憧れます
580 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:37:46.34 ID:v7G/T0vB0.net] >>570 すいません手順間違えて動くと勘違いしていましたw 結局同じことなので参考にしないでくださいw
581 名前:デフォルトの名無しさん [2017/11/18(土) 21:50:58.81 ID:AvOAupbn0.net] 変数がNULLだったら、ってこれが一番シンプル? a == null ? 0 : 1;
582 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:55:24.54 ID:GCI+mPsu0.net] >>571 そうでしたか 検証までしてもらい申し訳ないです
583 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 21:56:43.57 ID:kl8n9Pj50.net] >>572 つ ?? 演算子
584 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:13:06.30 ID:ScUjvH+z0.net] >>574 >>572 の式書ける?
585 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:17:16.38 ID:kl8n9Pj50.net] >>575 書けない。nullの場合の値設定のみ。
586 名前:デフォルトの名無しさん [2017/11/18(土) 22:17:39.50 ID:AvOAupbn0.net] NULLじゃなかった場合の処理が要らない場合は>>574 がベスト?
587 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:20:13.27 ID:w1kiMD3J0.net] a == null ? 0 : a; a ?? 0; は同じ内容になる