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

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん (ワッチョイ 2317-qMUn)
垢版 |
2018/12/15(土) 11:07:07.89ID:0aSEF/I+0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1538646998/
■コードを貼る場合は↓を使いましょう。
http://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
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/02/19(火) 12:03:57.65ID:IsM0ebyqd
日本語でよろしく
2019/02/19(火) 12:33:41.44ID:efthhon4M
そいつは難しいproblemだな
2019/02/19(火) 17:38:20.55ID:JJR46+B00
>>859
vs codeのことは専用スレで聞け、スレ違い
Visual Studio Code / VSCode Part5
https://mevius.5ch.net/test/read.cgi/tech/1541649564/
2019/02/19(火) 19:41:44.24ID:t+ZZI+Uh0
なぜmain関数の中に処理を書かないといけないのですか?
そういうルールだからってことですか?
pythonだとどこに書いてもいいと思うんですが
2019/02/19(火) 19:46:47.41ID:+t+aP4snM
そういう設計思想だから
2019/02/19(火) 19:54:09.61ID:zirjw7Cj0
main以外をエントリポイントにできるけどな
win32apiからの慣習
2019/02/19(火) 21:39:52.76ID:eXSGnhOj0
>>865
C#で出来るの?
どうやって?
2019/02/19(火) 22:33:06.53ID:MriKnXlj0
>>866
なくはない
https://ufcpp.net/study/csharp/cheatsheet/apscripting/
2019/02/20(水) 01:09:59.10ID:WG18KXuW0
助けて!!
Parallel.Forを使ってそれぞれで別の演算アプリを起動して
4スレッドで演算処理してるんだけど
アプリ強制終了してもスレッド(演算アプリ)はずっと処理し続けてるの!お願い止まって!!

親スレッド(UIスレッド)が死んだら子スレッドも死ぬみたいなお作法ありますか?
演算アプリはSystem.Diagnostics.Process使って起動してます
2019/02/20(水) 01:46:34.63ID:3QCW37aG0
Process.Kill()でしょ
870デフォルトの名無しさん (スプッッ Sdff-lPFl)
垢版 |
2019/02/20(水) 02:03:55.40ID:/GvzZ744d
>>868
それはC#的にスレッドとは言わない。
別プロセスだ
2019/02/20(水) 07:56:23.82ID:Jfh2EJBjr
電源off
2019/02/20(水) 09:16:30.41ID:JdxivbIi0
>>868
CancellationTokenSourceを使ってみれば?
2019/02/20(水) 16:01:28.63ID:qtZmd9yJa
form1にsplit container をverticalで貼り付けて左右に2分割してその中にボタンとかコンポーネントいろいろ置いてて、
あとから上にmenu stlipを追加したくなってツールボックスからmenu stripコンポーネントをドラッグ&ドロップすると
splitcontanerのpanel1かpanel2のどっちかにしか貼り付けられないのだけどform1にmenuStripを表示するようにするにはどう操作すればいいのでしょうか
2019/02/20(水) 16:10:46.41ID:YXUL7WNb0
一旦張り付けてから
ドキュメントアウトライン表示させてForm直下に移動させる
2019/02/20(水) 16:31:00.95ID:ThCTwK+Ha
>>873
前も書いたけど、
[ctrl] + [alt] + t
2019/02/20(水) 16:42:16.67ID:qtZmd9yJa
>>874
ありがとうございます
2019/02/20(水) 16:43:52.95ID:qtZmd9yJa
>>875
ありがとうございます

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

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

次にAに話しかけた時の処理を作りました。

public void Sample(){
 //50%の確率で無視される
 if(Probability.DetectFromPercent(50)){
MainText.text = “Aに話しかけてみた・・・”;
StartCoroutine(waitforsecond(2));
 MainText.text = "なんとAから無視された!”;
 
 //50%の確率で殴られる
  }else {
MainText.text = “Aに話しかけてみた・・・”;
StartCoroutine(waitforsecond(2));
MainText.text = "なんとAから蹴られた!”;
2019/02/21(木) 16:24:21.78ID:+4fiWh+W0
これで、話しかけたあと2秒時待機して反応がある、という処理になるかと思ったのですが、うまく行きません。

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

....

ToolStripMenuItem1.Click += (sender, e) =>
{
  RecursiveShowDropDown(((ToolStripMenuItem)sender));
};

....

void RecursiveShowDropDown(ToolStripMenuItem item)
{
  if (item == null) return;
  var parent = item.OwnerItem as ToolStripMenuItem;
  RecursiveShowDropDown(parent);
  parent?.ShowDropDown();
}

たぶんこれでいける。
でもエンターキーでクリックした場合の操作性に問題が残るけど
2019/02/23(土) 19:24:23.57ID:gzY/wSmba
こっちの方がいいか
EventHandler eh = (sender, e) =>
{
  Action<ToolStripMenuItem> a = null;
  a = item =>
  {
    if (item == null) return;
    var parent = item.OwnerItem as ToolStripMenuItem;
    a(parent);
    parent?.ShowDropDown();
  };
  a((ToolStripMenuItem)sender);
};
ToolStripMenuItem1.Click += eh;
2019/02/24(日) 03:15:52.41ID:pRL7US30a
>>899
無事できました
ありがとうございます!
2019/02/24(日) 11:47:42.69ID:L3+XvQB40
質問です
現在、以下のように一つの非同期処理(時間のかかるディスクの書き込み)
を実行しています。

private async void button1_Click(object sender, EventArgs e)
{
 await DoSomethingAsync();
 MessageBox.Show("完了");
}

これを実行中にUIを操作して、次の処理の準備ができたら(実行する内容はDoSomethingAsync)
button1を押して予約し、実行中の処理が終わったら引き続き実行させたいです。(並列ではなく)
また、「完了」は登録されたタスクが全て終わったときに出したいです。
どのように書くのが一般的なのでしょうか?


初回実行時にすべての実行すべきタスクがわかっている場合は
そのタスクのリストを作ってWhenAllする みたいなのはググったら出てきたんですが

ContinueWithを使うのかなと思ったのですが、書き方がわかりませんでした
2019/02/24(日) 11:58:25.65ID:u2ta9zSf0
Queue<T>を使えば良いんじゃね
2019/02/24(日) 12:36:22.83ID:cR8EPyISM
>>902
最後に追加したTaskを覚えておいてContinueWithで繋ぐとかできなくはないけど、
そんな変なハックをするくらいなら素直に別スレッド立てて順番にバックグラウンド実行したほうがいい
Producer-Consumerでググれ
2019/02/25(月) 11:09:41.10ID:a5srEHrc0
c#のフォームで、タイルマップエディタのようなものを作りたいのですが、どのような情報を調べたらいいでしょうか
また、そのような目的に適したフォームはありますか?

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

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

private async void button1_Click(object sender, EventArgs e)
{
  mRepeatCount += 1;
  if (mBusy) return;
  mBusy = true;
  for (int i = 0; i < mRepeatCount; i++)
    await DoSomethingAsync();
  mBusy = false; mRepeatCount = 0;
  MessageBox.Show("全部終わった");
}
2019/02/25(月) 19:17:48.39ID:61uBElrFd
>>907
俺はエディタでヒント表示させただけで落ちるけど。Blendなら使えてる。
2019/02/26(火) 06:14:33.14ID:hTJo4mxi0
https://i.imgur.com/NCB8nLP.jpg
c#をデバッグするとこのようなエラーが出るのですが、どこを改善すればいいかヒントをください
2019/02/26(火) 06:21:28.31ID:byKZhMZS0
>>913
dllのパス
2019/02/26(火) 07:34:07.95ID:hTJo4mxi0
↑ありがとうございます
.NET Core Launch (console)
というデバッガを使っているので、
"program": "${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
という部分を修正するのだと思いますが、どう修正するんでしょうか?
実行したいプログラムを{workspaceFolder}/Program.csと指定してもエラーになります
2019/02/26(火) 07:53:17.80ID:U5FDQ2yTd
>>915
いやだからcsじゃなくてdllだってば
2019/02/26(火) 07:54:10.15ID:U5FDQ2yTd
ログにもちゃんと出てるはず
2019/02/26(火) 08:00:35.55ID:H+xdnOpD0
>>915
プログラミングするなら英語は必須だから、「何だか分からないこと言ってる!」とか思わずにちゃんと読みな。
2019/02/26(火) 08:41:24.11ID:hTJo4mxi0
>>916
c#なのにDLLなんですか?
このDLLのパスは何をしてるんですか?
2019/02/26(火) 08:50:05.00ID:UlQR9ttEM
普通にVisualStudio(Codeじゃないやつ)ダウンロードして知識付けてから挑戦しろよ
邪魔だよ
2019/02/26(火) 09:40:46.12ID:7RJrl9MrM
小学校でプログラミング教育でも受けてろ
2019/02/26(火) 09:54:59.60ID:s7Q5fSFO0
>>909
そうなるともう新しいプロジェクトに今のを段階的に移していってどこで再現するか確認するかなぁ
2019/02/26(火) 10:57:10.09ID:s7Q5fSFO0
>>919
とりあえずエクスプローラなりコンソールなりvscodeとは別に開いて
プロジェクトフォルダのbinフォルダの配下を確認
どこかにビルド結果のdllが作られてるから

うちはいつの間にかPlatformって環境変数が定義されてたせいで
HPDとかいうフォルダが1個挟まってたぞ
2019/02/26(火) 10:58:52.43ID:RV1beKRS0
こっちへどうぞ
Visual Studio Code / VSCode Part5
https://mevius.5ch.net/test/read.cgi/tech/1541649564/
2019/02/26(火) 11:47:10.27ID:7Gbx8Ae00
>>922
ありがとうございます
とりあえず特定のメソッドを呼ばなければ大丈夫ということがわかったのでデバッグモードでは呼ばないようにして対策することにしました
2019/02/26(火) 11:58:57.74ID:hTJo4mxi0
>>923
デバッグできました 余計なフォルダが挟まっていました
指定してやらないといけないんですね ありがとうございました
2019/02/26(火) 12:16:54.99ID:vuJi7+izd
どういたしまして
2019/02/26(火) 12:29:03.14ID:CYrridvRd
>>923
それDELLやろ
2019/02/26(火) 12:29:38.62ID:CYrridvRd
>>924
そっちはスレチ
930デフォルトの名無しさん (ワッチョイ 9fad-SKB1)
垢版 |
2019/02/28(木) 00:37:24.74ID:weUa1N+o0
setterメソッドで文字列が8文字以下ならname変数に引数を代入する文を書きたいんですけど
どのように書けばいいんでしょうか?
2019/02/28(木) 00:51:58.07ID:ucEMLrR20
private string name;
public void SetName( string name )
{
 if ( name.Length <= 8 )
 {
  this.name = name;
 }
}
2019/02/28(木) 00:55:51.76ID:ucEMLrR20
セッターよりもプロパティで良い気がする

private string name;
public string Name
{
 set
 {
  if ( value.Length <= 8 )
  {
   this.name = value;
  }
 }

 get
 {
  return this.name;
 }
}
2019/02/28(木) 01:05:38.31ID:weUa1N+o0
>>931
ありがとうございますー
lengthを使うとint型とstringをオペランドに比較が使えるんですね
覚えておきます
2019/02/28(木) 08:14:05.87ID:3CdGs56rM
>>933
> lengthを使うとint型とstringをオペランドに比較が使えるんですね
言いたいことはなんとなくわかるけどほんとに理解してるのか不安になる文章だな
2019/02/28(木) 12:10:16.83ID:2lomOid8M
8文字越えた場合や
検証属性の話をと思ったけど自重
936デフォルトの名無しさん (ワッチョイ 37e5-i/5X)
垢版 |
2019/02/28(木) 19:23:03.02ID:owSMuOWF0
Windows.Forms の質問です。
TextBox 数個と MenuStrip に サブメニューのない MenuItem を追加したFormで
Altキーでメニューを選択すると、
カーソルキーの上下でTextBoxのフォーカスが移動するのですが
どういった理由でしょうか?
2019/02/28(木) 20:29:09.92ID:1IHH1hzPa
>>936
Menuに反応してるのでは?
2019/02/28(木) 20:50:40.99ID:DAgKUWMjM
うーん
ショートカットキーの設定ができるので
ツールバーの代わりに使おうと思ったんですが
予想外のキモい動きで躊躇してます
2019/02/28(木) 21:20:30.71ID:560qka060
ドロップダウンしないのは想定してないだろう
940デフォルトの名無しさん (ワッチョイ 377c-vuRV)
垢版 |
2019/03/01(金) 12:58:28.41ID:ozM8zBQ90
この本おすすめですか?
https://www.amazon.co.jp/dp/4774187585
2019/03/01(金) 19:45:05.46ID:MA7hbDcR0
JS
hoge([[1,2,3], [4,5,6]]);

C#
hoge(new int[,] {{ 1,2,3 }, { 4,5,6 }});

javascriptみたいにnew付けないで渡せないですか?
paramでは2次元がだめでした。
2019/03/01(金) 21:07:24.70ID:tVNocw1h0
サイドバーについてなんですが、例えばgimpというソフトがあるのですが、両サイドにツールやレイヤーが表示されています
このように領域を分けるコントロールを教えてください
win form c#です

これはもう1つフォームを追加してるんでしょうか?
2019/03/01(金) 21:59:18.22ID:ORsij5/P0
>>942
フォームの枠の中に配置・移動させるのならVisual Studioでデザイナ画面+ツールボックスの「コンテナー」のカテゴリの好きなものを
フォームの枠の外やはみ出して使いたいものには別のフォームを割り当て、というのが基本じゃないかな
GimpはCだからどうやっているかは知らないけど
2019/03/02(土) 05:28:46.45ID:QccNqZJQ0
別フォーム使った場合でもドッギングなど可能ですか?
だとすれば分けたほうが作業しやすそうですが
2019/03/02(土) 10:41:05.28ID:29oPzrI/0
GTKでやればいいじゃない
946デフォルトの名無しさん (アウウィフ FF9b-vuRV)
垢版 |
2019/03/02(土) 11:00:56.30ID:+L4gK20KF
>>940
超初心者か池沼向け

普通の人はwebで充分
947デフォルトの名無しさん (アウウィフ FF9b-vuRV)
垢版 |
2019/03/02(土) 11:02:23.80ID:+L4gK20KF
GTKは糞
2019/03/02(土) 11:07:40.19ID:QccNqZJQ0
>>945
win formではドッギングや分離はできないのですか?
また、別フォームと同じフォームでやるのとではどちらが都合がよいでしょうか
2019/03/02(土) 11:11:23.26ID:PVVyhIVEM
>>948
出来るよ。
2019/03/02(土) 11:12:34.80ID:PVVyhIVEM
>>948
ttps://dobon.net/vb/dotnet/links/dockingwindow.html
2019/03/02(土) 11:22:59.87ID:Flko+1Y10
市販のinfragisticsのドッキングウインドウが楽チンだったわ
2019/03/02(土) 18:42:16.44ID:QccNqZJQ0
Form1からForm2を呼び出すとき、こういう記述をしますが、変数の型がどうしてForm2なんでしょか?varじゃエラーです
Form2 form2 = new Form2();
form2.Show();
2019/03/02(土) 19:06:17.17ID:QSGa9wbhp
そのform2クラスは君が作ったんじゃないのか?
2019/03/02(土) 19:09:49.50ID:euLZafKS0
取り敢えずエラーの内容を読めよ
955デフォルトの名無しさん (ワッチョイ d72d-SKB1)
垢版 |
2019/03/02(土) 23:01:13.05ID:XIaahVa70
学習のために、確保した変数がスタックかヒープかどっちにあるのか知りたいんだけどさあ
簡単にチェックする手段ってないんかな?
2019/03/02(土) 23:08:52.67ID:20MtSIx6a
メモリダンプ系のツール使えばいいよ
昔の話だがメモリ上のオブジェクトグラフを可視化してGC絡みのバグをデバッグした事がある
2019/03/02(土) 23:10:49.78ID:nONug4XP0
"変数が"ってことなら変数の型が参照型か値型か
要はコンパイルの時点で判断できる
IntelliSenseでclassかstructを見れば良い話に思えるが
2019/03/02(土) 23:19:19.07ID:20MtSIx6a
box
2019/03/02(土) 23:33:08.46ID:D0+5Vwwl0
>>953
ワロタ
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況