[過去ログ] ふらっと C#,C♯,C#(初心者用) Part141 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
841: (ササクッテロレ Sp7b-13Kq) 2019/02/17(日)21:29 ID:I+dbukVsp(2/2) AAS
>>840
使うひともいれば使わないひともいますね
842
(3): (ワッチョイ 7fda-cT+3) 2019/02/18(月)01:50 ID:pxm+KTrW0(1/3) AAS
入力項目が沢山ある画面で、変更を保存せず画面を閉じようとしたときは警告を出したいです。
何も変更せず画面を閉じる場合は警告を出さずに閉じたいです。

この場合の変更チェックは入力項目に紐づく変数1個1個をチェックする以外に、スマートな方法は無いでしょうか?
入力項目に紐づく変数はデータクラスとして用意しているので、画面開く直前にハッシュのようなものを計算し退避しておき、
画面を閉じる直前にハッシュを再計算し比較すれば行けると思うのですが、オブジェクトのハッシュを求めるのは
GetHashCodeでいいのでしょうか?
843: (ワッチョイ a761-udZ6) 2019/02/18(月)01:58 ID:0Vx/m/dz0(1) AAS
ないね
上に1dot
下に1dot
って動かされて終了したときは
出したくないんでしょ?
何か妥協点がない限り全部比較するしかないよ
844: (ワッチョイ 275f-8zyB) 2019/02/18(月)02:13 ID:Y8U6L+e90(1) AAS
>>842
データクラスとして纏めてあるなら、GetProperties()やGetFilelds()で抽出した各変数を
ループで比較すればそこそこスマートなんじゃない。
845
(1): (ワッチョイ 5f47-0jsH) 2019/02/18(月)02:29 ID:GC8vaMYY0(1/2) AAS
俺ならデータクラスにINotifyPropertyChangedを実装するかな
846
(1): (アウアウエー Sa1f-x6Gg) 2019/02/18(月)02:53 ID:+SQV8UeVa(1) AAS
>>842
直接の回答でなくてごめん。

そういうMSにありがちなUIはたぶん

(1) 変更をキャンセル可能であること
(2) OKボタンをクリックした時点で初めて変更が反映されること

が要件になってるからそういう仕様になるんだと思うけど、こんな要件が必用ないなら
画面の入力項目の変更を変更があった時点でその都度対応するオブジェクトの
省3
847
(1): (ワッチョイ 7fda-cT+3) 2019/02/18(月)03:23 ID:pxm+KTrW0(2/3) AAS
>>845
いいアイデアですね。
プロパティ1つ1つに
if(beforeValue!=afterValue)
 OnPropertyChanged();
みたいな実装が必要なのが若干だるい気がしますが。

>>846
省4
848: (ワッチョイ 5f47-0jsH) 2019/02/18(月)08:27 ID:GC8vaMYY0(2/2) AAS
>>847
データクラスのベースクラスをPrism.MvvmのBindableBaseにするとまあまあタイプ量減らせたりするよ
849
(2): (ワッチョイ bfef-l0e6) 2019/02/18(月)11:29 ID:huM3ZKfN0(1/2) AAS
画像リンク[jpg]:i.imgur.com
vs codeを使っているのですが、どこから実行できるんでしょうか?
言語はc#で、マイクロソフトのc#のアドオンを入れました
ctr shift pでrunというコマンド?が出てくるので、それをクリックしたのですが、outputには何も出ません

また、ヴィジュアルスタジオの場合はイベントハンドラーがありますが、常に実行させるようなイベントというのはただのC#にあるんでしょうか?
850: (スッップ Sd7f-/Qxi) 2019/02/18(月)11:34 ID:FChOt/Xad(1) AAS
>>849
チュートリアルくらいやれよ
851
(1): (ブーイモ MMcf-lPFl) 2019/02/18(月)12:06 ID:RBxZ7FEaM(1) AAS
>>849
ターミナルでdotnet runと打ち込んでEnterや
852
(1): (スフッ Sd7f-Phvs) 2019/02/18(月)12:13 ID:vM1YVHVQd(1) AAS
>>842
そう言うの割とダルいから、データをクラスにまとめといて、開いた時点でシリアライズして文字列で持っちゃう。
保存時にシリアライズして文字列一致しなかったら、変更されてると言うことにする。
一個ずつ比較したら改修で漏れるよ。
853
(1): (ワッチョイ bfef-l0e6) 2019/02/18(月)12:41 ID:huM3ZKfN0(2/2) AAS
>>851
ありがとうございます
そうやって実行するんですね
visual studioよりむずいです

ただ、Program.csという自動生成されたファイルが実行されます
同じフォルダに自分で作ったsample.csがあるんですが、こっちを実行させる設定はどこからするんでしょうか?
パスを指定してからdotnet runしてもエラーになるます
854: (スップ Sdff-/Qxi) 2019/02/18(月)12:42 ID:OjJXAwBNd(1) AAS
>>853
いやだからチュートリアルくらいやれって
855: (ワッチョイ 7fda-lPFl) 2019/02/18(月)12:59 ID:pxm+KTrW0(3/3) AAS
>>852
それもいい考えですね。
メンバ変数に[DataMember]とアノテーションを
つければいいだけですね
856
(1): (アウアウエー Sa1f-x6Gg) 2019/02/18(月)13:05 ID:99WFuefSa(1) AAS
まあ一度変更があった時点で実際には等価でも別物と見なす実装が一番簡単だねたぶん。
実際そういうソフト結構あるよね。

そういう手抜きが気に入らないなら素直にEquals実装するのが結局シンプルじゃないのかな。
フィールドが全部値型の構造体ならデフォルト実装で済むと思ったし

...と思って調べてみたけど、なんかドキュメントによって書いてるこが微妙に違うなw

外部リンク:docs.microsoft.com
↑には「リフレクションを使用して、型のフィールドとプロパティをすべて調べます。」と書いてあるが
省3
857: (アウアウウー Sa4b-F6dR) 2019/02/18(月)18:49 ID:L0NbuPbAa(1/2) AAS
>>856
> 外部リンク[2]:docs.microsoft.com
のRemarksには、thisとobjの全フィールドが参照型でなければbyte単位の比較、そうでなければリフレクションを使うとある
外部リンク:docs.microsoft.com
他に知っているもので↑では、リフレクションを使うとだけある

外部リンク[cs]:referencesource.microsoft.com
少なくとも.NET Framework 4.7.2では、ビット比較だけしていそうなFastEqualsCheckを呼ぶパスが存在する
省1
858: (アウアウウー Sa4b-F6dR) 2019/02/18(月)19:16 ID:L0NbuPbAa(2/2) AAS
ごめん「他に知っているもの」に貼るURL間違えた
外部リンク:docs.microsoft.com
859
(1): (ワッチョイ bfef-l0e6) 2019/02/19(火)11:05 ID:t+ZZI+Uh0(1/2) AAS
vs codeのproblemの欄なんですが、間違ったコードを入力しても自動で更新されないようです
デバッグを実行しないとだめなようですが、リアルタイムにエラーを表示してくれる設定はできますか?
以前はできたんですが
860: (スップ Sd7f-/Qxi) 2019/02/19(火)12:03 ID:IsM0ebyqd(1) AAS
日本語でよろしく
861: (オイコラミネオ MMdb-KRFs) 2019/02/19(火)12:33 ID:efthhon4M(1) AAS
そいつは難しいproblemだな
862: (ワッチョイ 077b-Pt61) 2019/02/19(火)17:38 ID:JJR46+B00(1) AAS
>>859
vs codeのことは専用スレで聞け、スレ違い
Visual Studio Code / VSCode Part5
2chスレ:tech
863: (ワッチョイ bfef-l0e6) 2019/02/19(火)19:41 ID:t+ZZI+Uh0(2/2) AAS
なぜmain関数の中に処理を書かないといけないのですか?
そういうルールだからってことですか?
pythonだとどこに書いてもいいと思うんですが
864: (ブーイモ MMcb-A2tD) 2019/02/19(火)19:46 ID:+t+aP4snM(1) AAS
そういう設計思想だから
865
(1): (ワッチョイ bf7d-KRFs) 2019/02/19(火)19:54 ID:zirjw7Cj0(1) AAS
main以外をエントリポイントにできるけどな
win32apiからの慣習
866
(1): (ワッチョイ 5f2f-dPPD) 2019/02/19(火)21:39 ID:eXSGnhOj0(1) AAS
>>865
C#で出来るの?
どうやって?
867: (ワッチョイ 5fad-/Qxi) 2019/02/19(火)22:33 ID:MriKnXlj0(1) AAS
>>866
なくはない
外部リンク:ufcpp.net
868
(2): (ワッチョイ 7ff2-yQ/S) 2019/02/20(水)01:09 ID:WG18KXuW0(1) AAS
助けて!!
Parallel.Forを使ってそれぞれで別の演算アプリを起動して
4スレッドで演算処理してるんだけど
アプリ強制終了してもスレッド(演算アプリ)はずっと処理し続けてるの!お願い止まって!!

親スレッド(UIスレッド)が死んだら子スレッドも死ぬみたいなお作法ありますか?
演算アプリはSystem.Diagnostics.Process使って起動してます
869
(1): (ワッチョイ 5f47-0jsH) 2019/02/20(水)01:46 ID:3QCW37aG0(1) AAS
Process.Kill()でしょ
870: (スプッッ Sdff-lPFl) 2019/02/20(水)02:03 ID:/GvzZ744d(1) AAS
>>868
それはC#的にスレッドとは言わない。
別プロセスだ
871: (オッペケ Sr7b-mTlM) 2019/02/20(水)07:56 ID:Jfh2EJBjr(1) AAS
電源off
872
(1): (ワッチョイ a742-yQ/S) 2019/02/20(水)09:16 ID:JdxivbIi0(1) AAS
>>868
CancellationTokenSourceを使ってみれば?
873
(1): (アウアウエー Sa1f-cT+3) 2019/02/20(水)16:01 ID:qtZmd9yJa(1/3) AAS
form1にsplit container をverticalで貼り付けて左右に2分割してその中にボタンとかコンポーネントいろいろ置いてて、
あとから上にmenu stlipを追加したくなってツールボックスからmenu stripコンポーネントをドラッグ&ドロップすると
splitcontanerのpanel1かpanel2のどっちかにしか貼り付けられないのだけどform1にmenuStripを表示するようにするにはどう操作すればいいのでしょうか
874
(1): (ワッチョイ ff7c-yz29) 2019/02/20(水)16:10 ID:YXUL7WNb0(1) AAS
一旦張り付けてから
ドキュメントアウトライン表示させてForm直下に移動させる
875
(1): (アウアウエー Sa1f-x6Gg) 2019/02/20(水)16:31 ID:ThCTwK+Ha(1) AAS
>>873
前も書いたけど、
[ctrl] + [alt] + t
876: (アウアウエー Sa1f-cT+3) 2019/02/20(水)16:42 ID:qtZmd9yJa(2/3) AAS
>>874
ありがとうございます
877: (アウアウエー Sa1f-cT+3) 2019/02/20(水)16:43 ID:qtZmd9yJa(3/3) AAS
>>875
ありがとうございます

配置していたテキストボックスがめり込んでしまいましたがなんとか修正してみます
878
(1): (ワッチョイ 66f2-i3+Z) 2019/02/21(木)12:23 ID:A65FK9eD0(1/2) AAS
目のかすみ
>>872
>>869
神!トークン付けてスレッド実行して
キャンセル時にスレッド内でIsCancellationRequestedで拾って
Process.Kill()すればいいのか
行けそうな気がしてきた
879
(1): (ワッチョイ b67c-cX2z) 2019/02/21(木)12:51 ID:Nj5ihKJg0(1/2) AAS
それでいいのか
アプリ強制終了っていうからタスクマネージャから落とす時のことを想像してた
880: (ワッチョイ 66f2-i3+Z) 2019/02/21(木)13:02 ID:A65FK9eD0(2/2) AAS
>>879
それもあるよ!今はキャンセル機能ないから強制終了させて
この問題発せしたんよ
ちなみに強制終了の場合はなんか手法ある?
別プロセスもタスクマネージャーで落とすしかない?
881: (ワッチョイ b67c-cX2z) 2019/02/21(木)13:15 ID:Nj5ihKJg0(2/2) AAS
基本的にはそうじゃないかね
ちょっと凝った風にするならプロセス間通信でハートビート送って応答なけりゃ自死するとかあるけど
882
(2): (ワッチョイ b501-4fA7) 2019/02/21(木)16:20 ID:+4fiWh+W0(1/4) AAS
すみません、コルーチンの使い方について教えてください。
例えばRPGなどのゲームで、キャラクターAに話しかけると、数秒待って反応が返ってくるという処理をしたいと思っています。

まず、数秒待つというコルーチンを作り
private IEnumerator waitforsecond(float sec) {
yield return new WaitForSeconds(sec);
}

次にAに話しかけた時の処理を作りました。
省12
883
(1): (ワッチョイ b501-4fA7) 2019/02/21(木)16:24 ID:+4fiWh+W0(2/4) AAS
これで、話しかけたあと2秒時待機して反応がある、という処理になるかと思ったのですが、うまく行きません。

あと登場キャラクターもA、B、C‥‥とたくさんいるのであれば、話しかけると数秒待って反応するという関数を作ってあげたほうがスッキリするのでしょうが、やり方がイマイチわかりません。
884
(1): (ブーイモ MM0a-LvDS) 2019/02/21(木)16:42 ID:VKoyYoRjM(1) AAS
>>883
非同期や
885
(1): (ワッチョイ b501-4fA7) 2019/02/21(木)17:11 ID:+4fiWh+W0(3/4) AAS
>>884
非同期・・ググりました。
「非同期」とは重い処理があった場合は終わるのを待たないこと。とありますが、、
886: (アウアウクー MM7d-QeDo) 2019/02/21(木)19:03 ID:+XWUccMjM(1) AAS
Wait前にthis.Refresh()って無意味だっけ
887
(1): (アウアウエー Sa52-SfL3) 2019/02/21(木)19:53 ID:5v/pkJgQa(1/5) AAS
>>882
何で待つのにイテレーターを使うのかちょっと意味がわかんないねw
888: (ワッチョイ 790c-rusg) 2019/02/21(木)20:08 ID:c4smrZlO0(1) AAS
yieldでコルーチンという一昔前の一発芸がUnityで幅を利かせているから仕方ないのねー
889
(1): (ワッチョイ 667b-SpKW) 2019/02/21(木)20:11 ID:969mh7640(1) AAS
俺もあいまいな理解だから偉そうには言えないけど
>>882
ここのサンプルが分かりやすいかも
外部リンク:developer.wonderpla.net
>>885
private IEnumerator waitforsecond(float sec) とpublic void Sample()が非同期(違う時間軸での動作)になるので待ち時間になっていない
>>887の言う通り待ち時間には他の物を使わないと
890: (ワッチョイ 6a2f-oRCO) 2019/02/21(木)20:17 ID:mRRRBv2X0(1) AAS
>>878
その演算アプリがどういう物かわからんが
そもそもそれ別プロセスじゃないとダメなのか?
891
(1): (ワッチョイ b501-4fA7) 2019/02/21(木)22:25 ID:+4fiWh+W0(4/4) AAS
>>889
ありがとうございます。
他の物とは具体的にどんな関数を使えばいいのでしょうか?
892
(1): (アウアウエー Sa52-SfL3) 2019/02/21(木)23:14 ID:5v/pkJgQa(2/5) AAS
>>891
思ったより面倒臭い
外部リンク:ideone.com
893
(2): (アウアウエー Sa52-SfL3) 2019/02/21(木)23:22 ID:5v/pkJgQa(3/5) AAS
>>892
これ書いてて一つ疑問に思ったのが、
MessagingTask = MessagingTask.ContinueWith(t => job.Action());
これを以下のように、
MessagingTask.ContinueWith(t => job.Action());
こう変えると期待した動きにならない。
ContinueWithってキューになってて先に入ってるタスクの完了を待って次を実行すると思ったけど違うのか
894
(1): (ワッチョイ 3de7-fRYm) 2019/02/21(木)23:42 ID:aABnGI350(1) AAS
>>893
重箱の隅…だが。
Task.Run(() => { })の代わりにTask.CompletedTaskってあるよ。
後、Task.Delay(Pause).Wait()ってThread.Sleep(Pause)で良いんでない。
895
(1): (ワッチョイ a95f-cnIv) 2019/02/21(木)23:44 ID:e6A24yU10(1) AAS
>>893
継続タスクが1つとは限らない。複数あったらパラって実行される。
896: (アウアウエー Sa52-SfL3) 2019/02/21(木)23:48 ID:5v/pkJgQa(4/5) AAS
>>894
うん、知ってたけど今使ってるのがVS2015なのよ...
897: (アウアウエー Sa52-SfL3) 2019/02/21(木)23:49 ID:5v/pkJgQa(5/5) AAS
>>895
やっぱり俺が誤解して理解してたんだなありがと
898
(1): (アウアウエー Sa52-dS/9) 2019/02/23(土)14:44 ID:3cOSTboLa(1) AAS
MenuStripコンポーネントでItemを選択した時にその左にチェックを入れるようにしてるのだけど
選択した時点でメニュー閉じちゃって若干不便なのだけど
ひらいたままにする設定にはできないのでしょうか
899
(1): (アウアウエー Sa52-SfL3) 2019/02/23(土)19:07 ID:gzY/wSmba(1/2) AAS
>>898
ルートのアイテムの直下ならClickか何かで親のShowDropDown()を呼べば一応実現できるっぽい。
入れ子になってる場合は、

....

ToolStripMenuItem1.Click += (sender, e) =>
{
  RecursiveShowDropDown(((ToolStripMenuItem)sender));
省11
900: (アウアウエー Sa52-SfL3) 2019/02/23(土)19:24 ID:gzY/wSmba(2/2) AAS
AA省
901: (アウアウエー Sa52-dS/9) 2019/02/24(日)03:15 ID:pRL7US30a(1) AAS
>>899
無事できました
ありがとうございます!
902
(2): (ワッチョイ ada2-uPuZ) 2019/02/24(日)11:47 ID:L3+XvQB40(1) AAS
質問です
現在、以下のように一つの非同期処理(時間のかかるディスクの書き込み)
を実行しています。

private async void button1_Click(object sender, EventArgs e)
{
 await DoSomethingAsync();
 MessageBox.Show("完了");
省8
903: (ワッチョイ 662c-/qFZ) 2019/02/24(日)11:58 ID:u2ta9zSf0(1) AAS
Queue<T>を使えば良いんじゃね
904: (ドコグロ MM15-bAbS) 2019/02/24(日)12:36 ID:cR8EPyISM(1) AAS
>>902
最後に追加したTaskを覚えておいてContinueWithで繋ぐとかできなくはないけど、
そんな変なハックをするくらいなら素直に別スレッド立てて順番にバックグラウンド実行したほうがいい
Producer-Consumerでググれ
905: (ワッチョイ 9eef-upo5) 2019/02/25(月)11:09 ID:a5srEHrc0(1) AAS
c#のフォームで、タイルマップエディタのようなものを作りたいのですが、どのような情報を調べたらいいでしょうか
また、そのような目的に適したフォームはありますか?

そもそもC#が適切なのかわからないのですが
906: (ワッチョイ 66f2-rusg) 2019/02/25(月)11:41 ID:2iFL+VGx0(1) AAS
>>90結局Unityになるんやろなあ
907
(1): (ワッチョイ 7d01-b+8Y) 2019/02/25(月)12:13 ID:kHS+5sOB0(1) AAS
VisualStudioでデバッグ実行した時だけプログラムがフリーズしてしまうのですがこういう時はどういった原因が考えられるでしょうか?
WinFormを使用していてフォームが立ち上がったらバックグラウンドで色々するって感じの処理なのでどこかでUIスレッドをブロックしているのかとも思いましたがConfigureAwait(false)の設定し忘れは無さそうでした
VisualStudioを通さずに直接実行した場合は正常に動作しています
908
(1): (ワッチョイ b67c-cX2z) 2019/02/25(月)13:05 ID:fW706uYI0(1) AAS
とりあえずフリーズした時に「すべて中断」して
どこでブレイクされるか確認
ついでにスレッド一覧を見てみる
909
(1): (ササクッテロラ Spbd-b+8Y) 2019/02/25(月)13:15 ID:O8+i9ARHp(1) AAS
>>908
それを試そうとしたのですが全て中断しても中断出来ない状況です
中断押すとVS自体もフリーズしてタスクマネージャーからプログラムを終了しないと復帰出来なくなります
910: (ファミワイ FFc9-kEY9) 2019/02/25(月)15:41 ID:stIKiSPsF(1) AAS
最前面じゃなくて後ろ面にアクティブウィンドウがポップアップされてるんじゃね
911: (アウアウエー Sa52-SfL3) 2019/02/25(月)19:11 ID:ERkCIkZda(1) AAS
>>902
単純にボタンをクリックした回数だけ非同期メソッドを実行したいだけなら
これでいいような気が

private bool mBusy = false;
private int mRepeatCount = 0;

private async void button1_Click(object sender, EventArgs e)
{
省8
912: (スフッ Sd0a-7Wge) 2019/02/25(月)19:17 ID:61uBElrFd(1) AAS
>>907
俺はエディタでヒント表示させただけで落ちるけど。Blendなら使えてる。
913
(1): (ワッチョイ 9eef-upo5) 2019/02/26(火)06:14 ID:hTJo4mxi0(1/4) AAS
画像リンク[jpg]:i.imgur.com
c#をデバッグするとこのようなエラーが出るのですが、どこを改善すればいいかヒントをください
914: (ワッチョイ 6aad-5Ibu) 2019/02/26(火)06:21 ID:byKZhMZS0(1) AAS
>>913
dllのパス
915
(2): (ワッチョイ 9eef-upo5) 2019/02/26(火)07:34 ID:hTJo4mxi0(2/4) AAS
↑ありがとうございます
.NET Core Launch (console)
というデバッガを使っているので、
"program": "${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
という部分を修正するのだと思いますが、どう修正するんでしょうか?
実行したいプログラムを{workspaceFolder}/Program.csと指定してもエラーになります
916
(1): (スッップ Sd0a-5Ibu) 2019/02/26(火)07:53 ID:U5FDQ2yTd(1/2) AAS
>>915
いやだからcsじゃなくてdllだってば
917: (スッップ Sd0a-5Ibu) 2019/02/26(火)07:54 ID:U5FDQ2yTd(2/2) AAS
ログにもちゃんと出てるはず
918: (ワッチョイ 4a52-ynlc) 2019/02/26(火)08:00 ID:H+xdnOpD0(1) AAS
>>915
プログラミングするなら英語は必須だから、「何だか分からないこと言ってる!」とか思わずにちゃんと読みな。
919
(1): (ワッチョイ 9eef-upo5) 2019/02/26(火)08:41 ID:hTJo4mxi0(3/4) AAS
>>916
c#なのにDLLなんですか?
このDLLのパスは何をしてるんですか?
920: (ドコグロ MM12-/na9) 2019/02/26(火)08:50 ID:UlQR9ttEM(1) AAS
普通にVisualStudio(Codeじゃないやつ)ダウンロードして知識付けてから挑戦しろよ
邪魔だよ
921: (ラクペッ MM65-6xHP) 2019/02/26(火)09:40 ID:7RJrl9MrM(1) AAS
小学校でプログラミング教育でも受けてろ
1-
あと 81 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.043s