ふらっと C#,C♯,C#(初心者用) Part142at TECH
ふらっと C#,C♯,C#(初心者用) Part142 - 暇つぶし2ch661:デフォルトの名無しさん
19/05/03 16:01:49.32 3MJf1YjB0.net
>>652
結果によってtrueやfalseになるようなんは定数と呼ばん

662:デフォルトの名無しさん
19/05/03 17:46:27.38 Xwdpydd1a.net
>>652
例外はTypeで==演算子が再定義されてるからみたいなので、
const bool y = t == (object)null;
一応これで文句言われないみたい

663:デフォルトの名無しさん
19/05/03 17:53:37.68 Xwdpydd1a.net
あ、なんか例外とか意味不明なこと書いてるけど突っ込まないでねw

664:デフォルトの名無しさん
19/05/03 18:53:11.77 78NC+NUs0.net
>>654
え?
それ通るの?
怖い

665:デフォルトの名無しさん
19/05/03 19:21:25.35 Xwdpydd1a.net
言語仕様の「定数式」の項を見れば別に不思議はないんだけど、
他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」
と思っちゃうね。

666:デフォルトの名無しさん
19/05/03 20:24:56.25 Ue5NRrHW0.net
>>653
レスありがとうございます。
定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、
表現が不適切だったかもしれません。失礼いたしました。
>>654
ありがとうございます!うまくいきました。
ちなみにいろいろ試してみると、
string は == が定義されているもののエラーが出ないようです。
さすがに string は特別ということのようですね。
(ただ、typeof(string).IsPrimitive は false にだったりして
 いまいちしっくりきませんが。。。)
==
const string s = null;
const bool z = s == null; // エラーなし、true が設定される。
==
何にせよ、問題はすっきり解消いたしました。
適切なアドバイスどうもありがとうございました。

667:デフォルトの名無しさん
19/05/03 20:25:45.58 Ue5NRrHW0.net
>>657
実際に const を使いたかったわけではなく、
問題の切り分けを行った結果として >>652 のように質問させていただいたのですが、
言われてみれば確かに何がしたいのかわからない・・・。
もう少し元の問題に近いコードを提示するなら、以下のような感じです。
==
const Type t = null;
if (t == null) Console.WriteLine("t is null.");
else Console.WriteLine("t is not null."); // 警告なし
const Exception e = null;
if (e == null) Console.WriteLine("e is null.");
else Console.WriteLine("e is not null."); // CS0162 到達できないコードが検出されました
==

668:デフォルトの名無しさん
19/05/03 20:54:20.72 mscz+0vpa.net
>>659
いやいやいや、俺はおたくにケチつけたわけじゃないよw
const bool y = t == (object)null;
こういうのはぱっと見て意図が分からないと言っただけ。
むしろ「マジックナンバー」を避けるのは良い習慣ですよ

669:デフォルトの名無しさん
19/05/03 20:57:46.12 mscz+0vpa.net
>>658
>string は == が定義されているもののエラーが出ないようです。
上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。
VSのインストールフォルダに入ってる

670:デフォルトの名無しさん
2


671:019/05/03(金) 21:13:39.41 ID:rGk2iQn5a.net



672:デフォルトの名無しさん
19/05/03 22:02:39.62 Ue5NRrHW0.net
>>660
> const bool y = t == (object)null;
> こういうのはぱっと見て意図が分からない
そうですねw
式の意味を考えるなら t == (object)null は
ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど
const うんぬんの話の中でこれはダメですし。
ちなみに今ふと思いついて試してみたんですが、
t is null も == の定義には依存しないものの定数扱いにはならないようです。
>>661
ありがとうございます。
言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような
気がしてきたので、これを機会に勉強してみようと思います。

673:デフォルトの名無しさん
19/05/03 22:03:15.73 Ue5NRrHW0.net
>>662
質問させていただいたのは、
>>659 のコードみたいに CS0162 の警告が出てほしいのに
出てくれない場面があったからです。
でもたしかに readonly なローカル変数はあってもいいですよね。
あと、引数のみに依存して副作用もないメソッドについて
↓みたいな書き方が許されたらいいのに~とか妄想しましたw
==
static class MathEx
{
  public const double Square(double x) => x * x;
}
static class MyConstants
{
  public const double SquarePI = MathEx.(Math.PI);
}
==

674:デフォルトの名無しさん
19/05/03 22:05:09.07 Ue5NRrHW0.net
何度もすみません。。。上の妄想コードは間違いです。
正しくはこちら。
==
static class MathEx
{
  public const double Square(double x) => x * x;
}
static class MyConstants
{
  public const double SquarePI = MathEx.Square(Math.PI);
}
==

675:デフォルトの名無しさん
19/05/03 22:55:31.79 1vSUmwo4M.net
実質的に定数ならJITコンパイル時に定数に置き換わるからそんなものは要らん

676:デフォルトの名無しさん
19/05/03 23:53:26.41 BZD1sthA0.net
decimalの定数は内部的にアレだけどな

677:デフォルトの名無しさん
19/05/04 07:03:09.32 Y3LpLEUoM.net
>>667
詳しく

678:デフォルトの名無しさん
19/05/04 13:03:57.01 3sktWiiHa.net
>>668
横からだけど URLリンク(ufcpp.net) のことだと思う

679:デフォルトの名無しさん
19/05/04 14:32:15.09 IHSUUilV0.net
List.Addって、複数のスレッドから同時に呼び出したらデータが壊れる可能性ってあるの?

680:デフォルトの名無しさん
19/05/04 15:00:48.03 NSx1pb1m0.net
>>670
スレッドセーフじゃないからlock制御を自前で持つか、System.Collections.Concurrentのコレクション使うべき

681:デフォルトの名無しさん
19/05/04 15:23:49.46 H40F3Pfj0.net
Queueの出し入れもlock必要だし、マルチスレッドはめんどいよな。
なんでConcurrentDictionaryはあるのにListは無いのか

682:デフォルトの名無しさん
19/05/04 15:37:29.51 uz0VN5nda.net
>>672
使い道がない

683:デフォルトの名無しさん
19/05/04 15:38:02.55 vy21Hr2ZM.net
個人的にはスレッド自体に特定のスレッドからのデータを受け取る処理がある方が好き

684:デフォルトの名無しさん
19/05/04 15:57:05.65 qIB0qWQDM.net
別々のスレッドから生成された値を集めたいなら、
各スレッドで別のバッファ(List)に値を書き込んでから最後に単一スレッドでマージするのが定番

685:デフォルトの名無しさん
19/05/04 17:20:59.03 pMssk1qR0.net
スレッドセーフって実はどういう動作するのかよく知らないぜ

686:デフォルトの名無しさん
19/05/04 17:27:01.27 0zm1CIpf0.net
>>676
わかる
エラーがでなかったらそれがスレッドセーフ!!

687:デフォルトの名無しさん
19/05/04 20:18:11.93 pMssk1qR0.net
APIのマニュアルにおいて「スレッドセーフ」という言葉が用いられる場合、たいていは「複数のスレッドからアクセスされても例外を出さない、プログラムがクラッシュしない」というような意味です。
しかしプログラムの目的によっては、例外が出ないだけでは不適切です。
例えば対象が、100個のデータを管理する変数だとします。
その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。
この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。
ってググって出たサイトで拾った

688:デフォルトの名無しさん
19/05/04 20:25:20.65 pMssk1qR0.net
つまり
for(int i=0;i<lst.count;i++)
{
unk un=lst[i];

}
みたいなプログラムを組んだとき
どっかでいきなり要素をゼロにされて死ぬってことは
スレッドセーフだろうがどうだろうが可能性はあるってことだよね
ってことを考えるとスレッドセーフである意味ってあんまりなくて
排他処理は絶対実装しないと駄目だよね?ってこと?
誰か違うと言ってくれ

689:デフォルトの名無しさん
19/05/04 20:59:32.71 Ui9BQ5TxM.net
スレッドセーフはメソッド内などで一貫性を保てる作り
排他制御が必要な場面でやってないなど作り手のロジックミスには対応出来るわけがない

690:デフォルトの名無しさん
19/05/04 21:06:21.08 Ui9BQ5TxM.net
スレッドセーフである意味
あるオブジェクトがプロパティAを持っててメソッド内で
b=aaa(A)+bbb(A);
を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ
最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない
スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ

691:デフォルトの名無しさん
19/05/04 21:07:23.59 3sktWiiHa.net
>>679
その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る
System.Collections.Concurrent系のコレクションは、
例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ)
どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽

692:デフォルトの名無しさん
19/05/04 21:27:48.58 qIB0qWQDM.net
>>679
厳密に他のスレッドとの同期を取らなきゃいけないなら>>682の言うようにBlockingCollection使うか毎回ロックだろうし、
ループ中は他のスレッドによるlstの変更を反映しなくていいならループに入る直前だけロックしてコピーしておけば済む
ケースバイケースだよ
一つ一般的なアドバイスをしておくと、並列処理のコツはデリケートな前提をなるべく設けずに極力ロバストな設計をすることだ
要件が許す限りにおいて、少々処理の順番が入れ替わったり処理間の同期が取れてなかったりしても問題にならないつくりにするのが理想

693:デフォルトの名無しさん
19/05/04 22:09:10.98 56LrGuhB0.net
非同期処理は複数のスレッドが同じデータを弄ろうとすることによる不整合は起きないけど
コールスタックは複数になるから
同じデータに触ると訳ワカメになる事があった

694:デフォルトの名無しさん
19/05/04 23:16:04.81 pMssk1qR0.net
(||゚Д゚)ヒィィィ!(゚Д゚||)
じゃあ>>679みてーな処理を書いたら
スレッドセーフなんて関係なく
バグるんだね
こぇえええええ
じゃなくて終わったわ
今まで組んだもんでテキトーにやった箇所全部終わってる気がする

695:デフォルトの名無しさん
19/05/04 23:28:33.99 J15hVQV0a.net
まあ複数スレッドで同時並行処理するときにはそのへん慎重を期さないと
再現困難なバグを埋め込んじゃうからねえ
同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ

696:デフォルトの名無しさん
19/05/05 05:07:07.08 tvdtPjB+0.net
マルチスレッドの恐ろしさは、たまにしかバグらない事。
ほとんどは正常に動くから、質が悪い。
必ず、バグらないだろ
それで喧嘩になる事も多い。
マルチスレッドは、ベテランでもバグるからやめろと言っても、
ほら、バグらないでしょ? と、突っかかってくる
その時には、バグらないと言うと、
千回実行しても、バグらないでしょ? と、突っかかってくる。
でも、その時にはバグらない
バグる立証をするのが難しい
だから、Ruby をやった人は、関数型言語のElixir をやる。
他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い
1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。
何回バグらないで実行すれば、正しいと認めるのか、と問われても困る

697:デフォルトの名無しさん
19/05/05 06:10:17.07 BzgWdCy40.net
アクマノショウメイ

698:デフォルトの名無しさん
19/05/05 08:46:40.02 TKrOuc6uM.net
>>687
喧嘩になるのはマルチスレッドのバグのせいではなくお前の頭がバグってるから

699:デフォルトの名無しさん
19/05/05 08:57:36.80 Vqy33e5r0.net
エビデンスとれてりゃ突きつけるだけなのに

700:デフォルトの名無しさん
19/05/05 10:34:54.98 RPhfdkos0.net
>>687
マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。
あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。

701:デフォルトの名無しさん
19/05/05 10:45:50.32 bYgaGqRgM.net
>>687
なんでバグが起こってるのか原因特定出来てなくてワロタ

702:デフォルトの名無しさん
19/05/05 10:48:34.16 uudMW5nw0.net
スレッドセーフは単発のメソッドが競合しないだけで
一連の処理についての動作保証をするものではないと
マルチスレッドはやらなくていいならそれに越したことはないけど
絶対に駄目というわけではなく
排他処理を組まないことが害悪

703:デフォルトの名無しさん
19/05/05 11:21:06.67 IBoHsNppa.net
排他制御をしなくても安全に並列処理できるように設計することが大事
まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい
大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき

704:デフォルトの名無しさん
19/05/05 11:29:03.77 Q2loWuJOM.net
シネ

705:デフォルトの名無しさん
19/05/05 12:22:10.03 6g/cxz/+M.net
ぱられるふぉーってのを使えば良いんじゃね?
知らんけど

706:デフォルトの名無しさん
19/05/05 12:32:51.31 uudMW5nw0.net
>>694
うーん、でも>>679みたいなこと
やった時点で終わりってまともじゃねぇよ
コードで一瞬でもすきを見せたら終了みたいになっちゃうじゃん
お前の理想はなんかあるんだろうけど
他人が叫ぶスレッドセーフに頼っちゃ駄目だよ
アプリの仕様として排他処理を盛り込むべき

707:デフォルトの名無しさん
19/05/05 13:01:26.26 EeTrV1LT0.net
>>697
だからさ、>>679みたいなforループ自体をスレッドセーフにする一番簡易な表記方法がlockなんだよ
これ以上簡単に書くことはライブラリをどんだけ上手く作っても無理

708:デフォルトの名無しさん
19/05/05 13:15:03.75 l159r3xkM.net
>>698
それって記述が簡単ってだけでしょ?
ロック中にアクセスしたらどういう動作するの?
次回に回すの?
待機して待つの?
そういうのってスレッド毎にステータスを持たせて
マトリックスで管理しないと制御できてると俺は認めない
ジジイだから

709:デフォルトの名無しさん
19/05/05 13:34:55.82 1Pm7tIcB0.net
VisualBasic大先生を怒らせてしまったようだな

710:デフォルトの名無しさん
19/05/05 13:41:27.68 IBoHsNppa.net
>>698
だからさ
そんな不安定なロジックを書かなくても良いようにちゃんと設計するのが並列処理の王道なんだよ
lockブロックは最初の一回を書くときは楽かもしれんがだんだん難しくなるぞ
そのコレクションを使う全てのプログラマが並列性を意識して正確に排他制御をコーディングしなければならない
これは実用的なシステムの規模になるとかなり大きな負担になる

711:デフォルトの名無しさん
19/05/05 14:02:39.93 IBoHsNppa.net
そもそもロックって論外なんだわ
世の中の並列処理の目的ってのはほぼ2種類に分類されるんだよ
①インフラストラクチャ処理中にCPUを待たせたくない
②消費コア数を増やして暇なCPUを働かせたい
よーするにCPUを無駄にしたくないわけ
でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう
ロックすると並列処理をする目的そのものに反してしまう
なのでロックは基本使わず最後の手段ってわけ
この辺りは(やや古い本だが)Microsoft Pressのプログラミング.NET Franework第4版やEffectiveシリーズでも解説されてることだね
どちらも良書なので脱初心者を目指しているだろう君達は是非とも読むべきだ

712:デフォルトの名無しさん
19/05/05 14:08:00.64 kZz1htUnM.net
その通り
極端な話、並列処理なんてそれぞれ別のサーバーで実行させりゃいいんだよ
それがレイテンシやコストなどの問題で無理なら代わりにプロセスを分ければいい
そもダメならリクエストやワーカー単位でスレッドを分け、といった具合に、共有するリソースを最小限にすることを優先する

713:デフォルトの名無しさん
19/05/05 17:40:50.25 Q2loWuJOM.net
ジジイだから能力低いだけだろ

714:デフォルトの名無しさん
19/05/05 18:00:00.04 1Pm7tIcB0.net
非同期処理全盛の時代にこれじゃ、世の中やばいコード(or非同期処理のつもりが同期処理されてるコード)だらけだろうな
Qiitaとか見ててもやばい奴だらけだ

715:デフォルトの名無しさん
19/05/05 18:04:40.39 IBoHsNppa.net
>>705
今時lockだもんな、笑えない深刻さ
お前のコード、めちゃくちゃブロックされてんだけど、って同僚の誰かが教えてやればいいのに見て見ぬ振りは可哀想だ

716:デフォルトの名無しさん
19/05/05 18:09:44.07 1Pm7tIcB0.net
そもそも、世のサンプルプログラムの多くが欠陥品なのが諸悪の根幹なのかもな
劣化コピーしちゃうQiita屋とかコピペプログラマが全部危険なコードを書いてしまう

717:デフォルトの名無しさん
19/05/05 18:19:48.84 Q2loWuJOM.net
一番パフォーマンスの良いMutexを使ってる人がどれだけいるやら

718:デフォルトの名無しさん
19/05/05 18:23:53.97 IBoHsNppa.net
>>708
よくねえよw
OSリソース消費する処理に速度を期待するな

719:デフォルトの名無しさん
19/05/05 18:27:02.59 Q2loWuJOM.net
他人に迷惑をかける基地外はシネ

720:デフォルトの名無しさん
19/05/05 18:33:04.85 Q2loWuJOM.net
webサーバでスレッド一個で処理を完結するようにはなっていないだろ

721:デフォルトの名無しさん
19/05/05 18:33:17.95 IBoHsNppa.net
Mutexは相変わらずスレッドをブロックするうえにMonitorよりも消費リソースが大きい
その代わりプロセスを超えて待機処理を実装できるというものだ
よーするにlockよりもっと遅いんだよ

722:デフォルトの名無しさん
19/05/05 18:34:49.31 Q2loWuJOM.net
>>712
実務で使ったことないんだろ
黙っとけや
自分だけの小さなアプリしか作ったことないんだろ

723:デフォルトの名無しさん
19/05/05 18:37:30.50 IBoHsNppa.net
>>713
もう無理だよ笑わせないでw
もっともパフォーマンスの良いミューテックスwwwwwww
実務で使ったことないだろwww
学生さんですかwwww

724:デフォルトの名無しさん
19/05/05 18:38:33.24 Q2loWuJOM.net
5分で確認できることをできない老害

725:デフォルトの名無しさん
19/05/05 18:41:05.51 1Pm7tIcB0.net
Mutexはロックがいらないスレッド同士でもロックしちゃうのが使いづらいな
回避できるのかはしらんが

726:デフォルトの名無しさん
19/05/05 18:41:10.65 Q2loWuJOM.net
そもそもスレッドがとまると言ってるけどCPUのスレッドと.netのスレッド混同してそう

727:デフォルトの名無しさん
19/05/05 18:41:50.97 Q2loWuJOM.net
> でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう
これ笑う所?

728:デフォルトの名無しさん
19/05/05 18:45:15.15 Q2loWuJOM.net
ロックしちゃうと問答無用でCPUが何もせずに止まっちゃうわけないだろw

729:デフォルトの名無しさん
19/05/05 18:47:01.12 uudMW5nw0.net
え?lock中にアクセスしようとしたらどうなるの?

730:デフォルトの名無しさん
19/05/05 18:48:17.37 1Pm7tIcB0.net
ロックが取得できないだけ

731:デフォルトの名無しさん
19/05/05 18:48:31.54 Q2loWuJOM.net
お前のPCは8スレッドぐらい動かしたら止まるの?

732:デフォルトの名無しさん
19/05/05 18:51:01.09 IBoHsNppa.net
>>719
うるせーなスマホで長文書くとミスるんだよ
スレッドが


733:ブロックされるってことだ



734:デフォルトの名無しさん
19/05/05 18:51:41.98 Q2loWuJOM.net
>>723
ググってきたのかよ低能さん

735:デフォルトの名無しさん
19/05/05 18:52:07.51 uudMW5nw0.net
>>721
そんときのコードってどう書くの?

736:デフォルトの名無しさん
19/05/05 18:53:42.23 IBoHsNppa.net
>>724
調子のんなよ重箱の隅つつきマン

737:デフォルトの名無しさん
19/05/05 18:55:47.24 Q2loWuJOM.net
>>726
lockとMutexのパフォーマンスのベンチ比較して
結果を出せよ
それまで書き込みするな

738:デフォルトの名無しさん
19/05/05 19:00:35.89 IBoHsNppa.net
>>727
はぁ?
言い出しっぺのてめーがパフォーマンス一番良いミューテックスのベンチ出せや
一番ってんならロックと比較なんてケチくせえこと言わんで他の排他制御機構とも比較しろよ?

739:デフォルトの名無しさん
19/05/05 19:00:46.75 Q2loWuJOM.net
どう見ても間違っている内容で煽られると人はどう思うのか
どう考えても仕組み上Mutexのほうが遅い

740:デフォルトの名無しさん
19/05/05 19:07:06.98 1Pm7tIcB0.net
>>725
普通に取得できるのを待ってるな
まあ、ロックが取得できるまで制御を戻したりはしておらんわ

741:デフォルトの名無しさん
19/05/05 19:12:25.48 uudMW5nw0.net
>>730
だよね
ちょっと調べてるけど
普通の排他処理組んでおきたくて
lock
ReaderWriterLockSlim
UpgradeableReadLock
なんか普通の排他処理したいだけなのに
たくさん出てきちゃったぞ
これ全部使っても
ん?排他処理できてんのか?
って疑問が晴れない
この言語非同期処理の対応手薄なんだよねまだ
時期尚早として触らんことにしたw

742:デフォルトの名無しさん
19/05/05 19:21:47.99 1Pm7tIcB0.net
LockやMutexは初心者本の範囲内だからしらんのはまずいよ

743:デフォルトの名無しさん
19/05/05 19:45:53.31 VmrJwxHQM.net
非同期のチートシートないの?

744:デフォルトの名無しさん
19/05/05 19:57:32.38 LYwUBfu90.net
URLリンク(qiita.com)
測った人によると
nterlocked > lock > SemaphoreSlim > Semaphore > Mutexだってさ

745:デフォルトの名無しさん
19/05/06 02:20:35.00 wkmj+bF20.net
並列処理なら.netなんだからF#でSTM使え。
何で関数型言語が注目されたんだよ。
並列処理に有利だからだろ。

746:デフォルトの名無しさん
19/05/06 04:59:30.75 wr9bFPpT0.net
マルチスレッドなんか無理!
だから、Ruby の人は、Elixir を使う
作るのに何百年も掛かる、人類の成果、Erlang VM + Ruby = Elixir。
ErlangVMを、Rubyでラップしたもの
Elixirの小プロセスなら、10万プロセスも余裕!
パイプラインと同じ
関数型だから状態を持たない。
ただ、データを変換していく関数をつなげていくだけ!

747:デフォルトの名無しさん
19/05/06 07:40:48.06 WDjCowqB0.net
>>736
Rubyにマルチスレッドは、無理!
RubyはいわゆるGILといって、同時に複数のスレッドが走らないような排他制御がVMレベルでかかっている
これはVM自体がスレッドセーフでないクソ実装であることに起因する制約である
もちろんC#にはそんなものはないし、ベンチマークだとErlangより速い

748:デフォルトの名無しさん
19/05/06 12:19:36.88 zGa1jTsu0.net
Windows8.1/10の令和対応アップデートでWinFormsの画面レイアウトが崩れるらしいね

749:デフォルトの名無しさん
19/05/06 12:48:42.80 w2Z6VwVJ0.net
お前んとこのWinformsいつもレイアウト崩れてんな

750:デフォルトの名無しさん
19/05/06 12:59:34.99 rtkPFZMSd.net
>>738
俺のとこも昨日発生した
AutoScaleModeをNoneにして対応できたから令和のせいではないと思う

751:デフォルトの名無しさん
19/05/06 13:02:49.51 4h7Vjk7HM.net
>>739
は?崩れてねーし
OKボタンが画面外にいって押せないだ


752:けだ



753:デフォルトの名無しさん
19/05/06 21:06:24.34 Gi+4ls7q0.net
画面レイアウトがクソみたいに崩れたぞ死ねや

754:デフォルトの名無しさん
19/05/06 21:19:39.33 Gi+4ls7q0.net
>>740
どうやってやるのそれ?
visual studio開いた時点ですでに崩れてて手動で戻すしかなさそうなんだが。
【警鐘】[改元][Windows][.NET] 「令和」対応パッチで画面が横に伸びる、文字が見切れる ― Windows Update 手動更新はちょっと待った方がいい
URLリンク(qiita.com)

755:デフォルトの名無しさん
19/05/06 21:32:21.57 lj/6a9HB0.net
>>743
デザイナ表示壊れてんのなら.Designer.csの中身書き換えるしかないんじゃね
AutoScaleMode.FontをAutoScaleMode.Noneに全部置換したらいい

756:デフォルトの名無しさん
19/05/06 21:39:51.78 Gi+4ls7q0.net
>>744
ありがとう
form1.csのデザインのAutoScaleModeをNoneにしたけど何も起こらなかったからあきらめてたけど、そっちを修正したら解決したわ。

757:デフォルトの名無しさん
19/05/07 00:11:46.09 HkLoI6gC0.net
>>740
令和を1文字で表すやつのために、フォントをいじったんだが、そのときに既存の文字の幅が変わったらしい
なのでまあ、令和対応のせいだと言えばそうなんじゃね
つか明日からどれだけ影響出てるか考えると鬱だわ

758:デフォルトの名無しさん
19/05/07 01:24:56.82 A2KlUElc0.net
納期直前でGW返上してる最中にこの不具合対応しなきゃいけなくなってかなりイラッとした

759:デフォルトの名無しさん
19/05/07 08:16:44.51 h85TWq9Qa.net
URLリンク(devblogs.microsoft.com)
.NET Framework 終了のお知らせ
Coreへ移行できないドカタは永遠に4.xに取り残されることが決定したようだ

760:デフォルトの名無しさん
19/05/07 08:55:31.55 H2EGG+st0.net
>>748
すげーな。20年以降毎年バージョン上がる予定か
2020 .net5
2021 .net6
2022 .net7
2023 .net8
.net4で停滞した10年とは一体

761:デフォルトの名無しさん
19/05/07 08:58:10.52 Q8AOfbVkd.net
Java interoperabilityって何なんだよ…

762:デフォルトの名無しさん
19/05/07 09:30:59.37 n4vre8LhM.net
>>748
出来損ないは過去に葬った方が世の中のためだぁ

763:デフォルトの名無しさん
19/05/07 10:21:58.95 vw5zJnlq0.net
バージョンを頻繁に上げるのは、
成熟していないってことでは?

764:デフォルトの名無しさん
19/05/07 11:33:46.06 4Mlb2ms50.net
FrameworkからCoreに移行できないのはどういう場合ですか?

765:デフォルトの名無しさん
19/05/07 11:59:10.66 25JpTCOf0.net
え、winformはどうなるの??

766:デフォルトの名無しさん
19/05/07 12:06:04.60 b+Ix+FO0a.net
最近のmicrosoftかなり攻めてるな

767:デフォルトの名無しさん
19/05/07 13:10:26.59 eYh/lhy30.net
.net frameworkからcoreなんてどこかちょろっといじったらいいだけじゃないの?
VB6からVB.netほどの変化はないんだろ?

768:デフォルトの名無しさん
19/05/07 13:37:50.62 9iRY6hHtM.net
>>753
そんなワケのわからんもん使こて何かあったらどないすんねん!責任取れるんかい!
わりとこれ

769:デフォルトの名無しさん
19/05/07 13:46:35.16 9CwYXDcE0.net
別に移行しなくてもいいですけど保守には特別料金いただきまっせ

770:デフォルトの名無しさん
19/05/07 13:47:55.21 Q8AOfbVkd.net
>>756
Web FormsはほぼUI作り直し

771:デフォルトの名無しさん
19/05/07 13:50:03.67 9iRY6hHtM.net
あと技術的な最大の障害はWebFormsだろう
WebFormsは.NET Coreではサポートされてないし、される気配もない
既存資産の移行もさることながら、.NETドカタはWebForms頼りで標準的なWeb開発のスキルを持たない奴も多い
彼らはWebアプリケーションの開発が不可能になり、路頭に迷うことになる

772:デフォルトの名無しさん
19/05/07 17:00:19.52 1tK/VkfG0.net
すまんが、Stream型って前の方だけメモリを解放するとか器用なことは出来ないの?

773:デフォルトの名無しさん
19/05/07 19:17:09.01 9iRY6hHtM.net
>>761
意味不明
お前の考えはどうでもいいから具体的に何が問題になっているのか、もしくは何が気になっているのか書け

774:デフォルトの名無しさん
19/05/07 19:23:08.04 VnMa5nf90.net
Stream型ってなんか確保してんの?

775:デフォルトの名無しさん
19/05/07 19:29:05.20 n4vre8LhM.net
Streamの実装によるだろ

776:デフォルトの名無しさん
19/05/07 21:03:30.48 FJj2rymy0.net
>>761
Streamクラスは抽象クラスだけど、MemoryStreamクラスを想定してるのかな。
何となくMemoryMappedFileクラスが要望に合ってるような気がする。

777:デフォルトの名無しさん
19/05/08 21:27:25.44 4kxgmlsqa.net
C#でwindowsPCのマイク音量設定を設けたアプリを作りたいんですが情報がいまいち出てきません
今現在どのような方法が推奨として使われているのでしょうか

778:デフォルトの名無しさん
19/05/08 21:33:29.28 UPhx/0uCM.net
おとなしくNAudioと言うのを使いなさい

779:デフォルトの名無しさん
19/05/09 20:00:37.76 25KQckNoa.net
>>767
ありがとうございます
調べてみます!

780:デフォルトの名無しさん
19/05/10 07:09:33.41 8h0VP8xa0.net
RPgエディタみたいなタイルマップを配置する機能を作る場合、画像を配置するフォームは何が適切でしょうか?
前にも聞いた気がするんですが、レスを忘れてしまって、、、

781:デフォルトの名無しさん
19/05/10 07:45:25.60 guXEw79XM.net
モデリングソフトに決まってんじゃん
2Dでもプラグインあるからプロならモデリングソフト
個人製作ならエクセルで代用しとけ
ってスレ違うやん

782:デフォルトの名無しさん
19/05/10 07:46:35.31 guXEw79XM.net
いや、すまん、質問内容取り違えてたw
ピクチャーボックスで

783:デフォルトの名無しさん
19/05/10 08:14:45.00 uov0WiW1d.net
>>769
Panelを継承したカスタムコントロールのOnPaint内で描画する事だな

784:デフォルトの名無しさん
19/05/10 12:26:08.70 8h0VP8xa0.net
>>771
ピクチャボックスですね
毎回忘れちゃうです

785:デフォルトの名無しさん
19/05/10 17:41:55.34 ZtjlRqB/0.net
質問するだけで自分でやらないから忘れるんだよ
>>772
継承させる意味が分からないしOnPaintならPanelでなくてもいい

786:デフォルトの名無しさん
19/05/10 18:53:28.94 8h0VP8xa0.net
visual studioのhddへのアクセスは制限できますか?
激重です
SSDにしろって話ですけどね

787:デフォルトの名無しさん
19/05/10 19:04:05.18 8h0VP8xa0.net
>>774
picturebox自体を何個も並べるんですか?
picturebox1つの中に複数の画像を並べるですか?

788:デフォルトの名無しさん
19/05/10 19:28:03.03 tfYAY6pzM.net
>>776
どっちでもいいよ
どのみち今の君のレベルで作ってもまともに使い物になるようなものにはならないから、うだうだ考えるより手の届く範囲で経験値を積んだ方がいい
行き詰まる頃にはだいぶレベルが上がってるはずだから、また作り直す
三周目くらいになればまともに作れるようになってるよ

789:デフォルトの名無しさん
19/05/10 19:30:30.41 uRQk/IXU0.net
3週でいけるのだろうか?

790:デフォルトの名無しさん
19/05/11 12:14:17.95 kDrnBD/r0.net
低レベルな質問で申し訳ないのですが、循環バッファって凄い便利だから
全ての配列は循環バッファで実装すればいいと思うのですが、デメリットはあるんでしょうか?
Delete
Insert
Add
が全てO(1)で出来るって凄くないですか?

791:デフォルトの名無しさん
19/05/11 12:25:39.14 E3skkYkSM.net
>>779
俺は必要になったことないよ
どんなときにいいの?

792:デフォルトの名無しさん
19/05/11 12:30:42.30 qR2J3ArJM.net
下手の考えなんとかつってなー
高レベルになってから言ってくれ

793:デフォルトの名無しさん
19/05/11 12:39:31.51 td9YBJ3L0.net
>>779
>***全ての配列は***循環バッファで実装
配列のままの方が良い場合もあるが
そうしたいならそうすればいい
ただし配列以外の構造が必要になるケースでは使えないぞ

794:デフォルトの名無しさん
19/05/11 12:56:33.31 4CcYolMU0.net
>>779
トークンリングとイーサネットの
違いを理解してから再度質問を

795:デフォルトの名無しさん
19/05/11 12:59:31.48 aDjFJI/sa.net
>>779
Addは、reallocationを考慮しても償却定数時間で出来そうだが
Delete, InsertがO(1)だというソースをくれ、「末尾」という指定がない以上任意位置だよな?
途中要素をDelete,Insertしたら要素の詰め直しが必要でO(N)になると思うんだが
O(N)になるならList<T>で十分という話になる

796:デフォルトの名無しさん
19/05/11 13:05:46.01 DR+jkhoz0.net
続きはこちらでどうぞ
【O(n)】計算量の評価方法について【O(log n)】
スレリンク(tech板)

797:デフォルトの名無しさん
19/05/11 13:06:24.02 aDjFJI/sa.net
考え直したらQueueやStackのことを言っている気がしてきた
それらのデータ構造がもうあるんだからそれ使えば良いんじゃね

798:デフォルトの名無しさん
19/05/11 15:39:49.17 8cYUuN//0.net
すべての配列は~というのが考え方が
そもそも乱暴で
目的に合わせてデータ構造を選ぶものじゃ

799:デフォルトの名無しさん
19/05/11 16:14:40.10 MBpEq5nf0.net
Visual C#で電卓を作ってます。
ある数字ボタンをクリックしたとき、(Button)sender).TextでTextran欄の文字を取得できますが
クリックではなく、キーボード入力で同様にしたいのですが、どうすればできますか?

800:デフォルトの名無しさん
19/05/11 16:26:29.83 VR7g318H0.net
>>788
KeyPressやKeyDownなどのイベント
ただし該当するコントロールにFocusされてないと反応しないのでフォームで全部受けるようにするとはかどる
URLリンク(dobon.net)

801:デフォルトの名無しさん
19/05/11 17:24:06.36 qy13k0f30.net
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\Users\◎◎\Desktop\volly.gif");
this.pictureBox1.Image = bmp;
パスについてなのですが、相対パスは使えないということがあるんでしょうか。相対パスだとパラメータが違うというエラーが出ます。
フォームアプリケーションなので、form1.csにコードを書いています
form1.cs
img(フォルダ)
└volly.gif
という構造になっています
しかし、img\volly.gif
だとエラーになります
何が悪いでしょうか。

802:デフォルトの名無しさん
19/05/11 17:26:35.03 Q2bK8ZXg0.net
>>790
.\img\volly.gifじゃね?

803:デフォルトの名無しさん
19/05/11 17:31:33.00 vfaLavs00.net
実行時のカレントフォルダーが合ってないと思う

804:デフォルトの名無しさん
19/05/11 17:56:52.10 lpN0Lm9o0.net
デバッガでブレイクしてイミディエイトウィンドウとかで
Environment.CurrentDirectory確認すると良いよ

805:デフォルトの名無しさん
19/05/11 18:25:33.06 dxU2Wm5sa.net
>>790
相対パスとかの以前の問題
実際の環境にimgフォルダが作られているか?
*.exeと言った実行ファイルのある場所を見てみたらいい
多分作られてないしその�


806:�にgifファイルも作られてない



807:デフォルトの名無しさん
19/05/11 18:56:38.28 VR7g318H0.net
>>790
>>794を参考にするべきだけどパスの位置を確認したいのなら読み込む前のところで
MessageBox.Show(System.IO.Path.GetFullPath(@"img\volly.gif"));//指定しようとしているパスを入れる
とでも入れとけばその相対パスがどこを指しているのか絶対パスが表示される
相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる

808:デフォルトの名無しさん
19/05/11 19:09:02.07 vfaLavs00.net
>>795
> 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる
これは正しくないよ。その時のカレントフォルダが基準。
何もしていなければ多くの場合は実行ファイルの場所と一致するから、結果としてそうなることが多いけど。

809:デフォルトの名無しさん
19/05/11 19:52:49.57 VR7g318H0.net
>>796
それならexeと同じディレクトリのところから使うには
System.IO.Path.GetDirectoryName(Application.ExecutablePath)とか使って必ず絶対パスに直さないと危ないってことか

810:デフォルトの名無しさん
19/05/12 10:29:51.59 zQc98Y8H0.net
Console.WriteLine(System.Environment.CurrentDirectory);
としても出力には何も出てこないのですか?
出てこないです
作業フォルダっていうのはform1.csとは別のファイルのことなんですね

811:デフォルトの名無しさん
19/05/12 10:48:00.86 NzWVi3Qm0.net
console覗くか
traceあたりに出力しないとでは

812:デフォルトの名無しさん
19/05/12 10:52:27.58 zQc98Y8H0.net
おっ いけました
'2d_engine.exe' (CLR v4.0.30319: 2d_engine.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
これで正しいのかわからないですが、なんで実行ファイルがこんな場所にあるんでしょうか。プロジェクト内にあるのかと思ってましたが

813:デフォルトの名無しさん
19/05/12 10:53:02.25 M17KJIhd0.net
>>798
WinFormsアプリはそのままではConsoleを使用できない
Consoleを自分で準備すれば使えるが、通常は使わないかな
フォルダ(≒ディレクトリ)とファイルは違うぞ

814:デフォルトの名無しさん
19/05/12 11:02:52.23 NzWVi3Qm0.net
謎は解けた

815:デフォルトの名無しさん
19/05/12 11:03:02.94 PIRDu/CH0.net
>>800
その絶対パスは実行ファイルじゃない
その表示されているところにConsole.WriteLineで書き込んだ内容出てくるはず

816:デフォルトの名無しさん
19/05/12 11:04:19.53 JwWGS0EoM.net
空のコンソールアプリ作ってそこで実行して

817:デフォルトの名無しさん
19/05/12 11:06:21.31 JwWGS0EoM.net
そのgifファイルは実行ファイルが作られた場所に自動でコピーされてないので
コピーされるようにgifファイルの設定帰るしかない

818:デフォルトの名無しさん
19/05/12 11:08:55.17 M17KJIhd0.net
>>800
勘違いしてる。Console使わず、
MessageBox.Show( System.Environment.CurrentDirectory );
ってやってみてよ。

819:デフォルトの名無しさん
19/05/12 11:35:01.56 1UlYWsgm0.net
>>800
カレントディレクトリはexeのあるディレクトリとは別物だからです
System.AppDomain.CurrentDomain.BaseDirectory
を使ってください

820:デフォルトの名無しさん
19/05/12 11:42:27.50 Zs5BDDrj0.net
AllocConsole() してみなされ

821:デフォルトの名無しさん
19/05/12 11:46:33.54 7nn+3/Jt0.net
>>800
プログラムの実行ファイルがある場所とは別に、プログラムの実行時に「どのフォルダでプログラムを実行するか」という概念があるのは分かる?

822:デフォルトの名無しさん
19/05/12 11:49:29.62 PIRDu/CH0.net
先生多すぎて混乱してそうw

823:デフォルトの名無しさん
19/05/12 13:55:38.46 zQc98Y8H0.net
混乱してるんで一度整理します

824:デフォルトの名無しさん
19/05/12 14:13:47.11 PIRDu/CH0.net
そもそもカレントディレクトリを表示させる必要があるのか?
画像をPictureBoxに表示するのが目的じゃなかったのか

825:デフォルトの名無しさん
19/05/12 15:18:28.27 zQc98Y8H0.net
そうなんですが、そのために相対パスを設定したいんです
絶対パスでも別に不自由しないですが、ソフトを作るときは相対パスも使う�


826:ニ思うので



827:デフォルトの名無しさん
19/05/12 15:40:46.00 Q+XtJRAz0.net
>>790
VisualStudioでF5実行やデバッグをすると(何も設定を変えてなければ)ビルド出力先がカレントディレクトリになる
相対パスでエラーになる原因はビルド出力先にimg\volly.gifが存在しないから
なのでimg\volly.gifをビルド出力先にコピーしてやれば相対パスで読み込めるようになる
プロジェクトエクスプローラーでimg\volly.gifを右クリックしてプロパティを開いて
「ビルド時のアクション」を「なし」に変更
「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更
これでビルドすると出力先フォルダにimg\volly.gifがコピーされるようになる

828:デフォルトの名無しさん
19/05/12 15:41:40.00 CayLEbz10.net
>>813
実は業務ではカレントディレクトリをあてにした動作はさせない
なぜなら制御できないから
なので相対パスをプログラムで取得したら
自分が基準とするディレクトリパスと自力で連結させて絶対パスにして使う

829:デフォルトの名無しさん
19/05/12 15:43:12.88 Q+XtJRAz0.net
画像ファイルがたくさんあって1こ1こ設定するのがめんどくさい場合は
imgフォルダを右クリックして同じようにコピーの設定をする
そうすれば1つの設定でフォルダごとまるごとコピーしてくれる

830:デフォルトの名無しさん
19/05/12 15:54:06.76 0iYfvooEa.net
まあ、そもそも特に理由がなければ画像ファイルはリソースに突っ込むべきだね。
どうしても生の画像ファイルを使いたいならソリューションエクスプローラーからプロジェクトに追加して
プロパティウィンドウの「出力ディレクトリにコピー」の値を「常にコピーする」にすれば
ビルトすると自動的に実行ファイルと同じディレクトリにコピーされるようになる。
ディレクトリの階層を作りたいならソリューションエクスプローラ上で階層を作れば
それがそのまま反映されてコピーされる。
実行ファイルのディレクトリはこれで
URLリンク(docs.microsoft.com)

831:デフォルトの名無しさん
19/05/12 16:00:55.91 xH15WcK+a.net
OpenFileDialogなどを使うだけでカレントディレクトリは変わるし
EXEのショートカット経由で起動する場合は任意のカレントディレクトリ位置に出来るし
他プロセスからWorkingDirectory設定無しで起動される場合も考えたりすると
プログラム中で内部的に相対パスを保持するのは構わないけど
IO系APIを呼び出す時は、AppDomain.BaseDirectoryなどと結合して絶対パスにしてから渡したほうがいい

832:デフォルトの名無しさん
19/05/12 16:17:07.77 zQc98Y8H0.net
なるほど
自分で絶対パスを1つ決めて、そこを起点にすると

833:デフォルトの名無しさん
19/05/12 17:07:03.34 zQc98Y8H0.net
関係ないんですけど、コードってどこに保存してますか?
普通にテキストエディタに保存してますけど

834:デフォルトの名無しさん
19/05/12 17:15:13.31 Zs5BDDrj0.net
大事な物は心の中に

835:デフォルトの名無しさん
19/05/12 17:22:08.37 O1RPDIWFM.net
>>820
一般的にはGitを使ってGitHubで管理する
だけど今の君のレベルではそんなのは必要ない
今の君のレベルで書いたコードなんて一ヶ月後にはゴミであり、大切に保存する価値などない
一ヶ月後のレベルの上がった君から見ればゴミだという意味であり、決して悪い意味じゃないから勘違いするなよ

836:デフォルトの名無しさん
19/05/12 17:25:13.38 zQc98Y8H0.net
自分の環境の場合、プロジェクトフォルダ\bin\debug\hoge.exe
という場所に実行ファイルが作られるようです
Cフォルダの直下あたりに作られるという説明がされちえますが、何か間違ってますかね
//カレントディレクトリの取得
MessageBox.Show(System.IO.Directory.GetCurrentDirectory());
場所ってのは自動的に決まる感じですか

837:デフォルトの名無しさん
19/05/12 18:06:37.88 hmzYcUWua.net
>>823
日本語で
何を言ってるのかさっぱり分からんよマジで

838:デフォルトの名無しさん
19/05/12 18:42:19.48 Mxa5Iz6jd.net
>>822
gitサーバーはいろいろ使われてるのにGitHubが一般的は言いすぎだろw

839:デフォルトの名無しさん
19/05/12 18:49:55.29 JwWGS0EoM.net
この人はソースをテキストエディタに保存していると言ってるから
iOS使いなんだろうなと思う

840:デフォルトの名無しさん
19/05/12 19:28:54.08 eC5ErjVyd.net
壮大な計画立てて時間だけがかかって何も完成させられない典型的な例

841:デフォルトの名無しさん
19/05/12 19:36:30.99 zQc98Y8H0.net
すみません
がんばります

842:デフォルトの名無しさん
19/05/12 22:05:40.63 TmkC4DiT0.net
LINQ勉強しててよくわかんないんですけど範囲変数ってあれ事前に宣言しなくていいんですか?
マイクロソフトのサンプルとか見ても例えばselect score in scoresとか出てきてscoreどこから出てきたってなるんですけど
全体的な印象ですけど、SQLはちょろっとかじったので列名無いのにSQLっぽく書いてるLINQってなんかしっくりこないんですよね……

843:デフォルトの名無しさん
19/05/12 22:31:12.34 RcOwQ/d80.net
>>829
Linqはクエリ式よりメソッド構文の方がとっつきやすい。
クエリ式はSQLに似てるけど、C#の文法に照らすと異質だしな
scores.Select(score => ・・・);
scoreはどこから出てきたの?ってことならまずはラムダ式からじゃないかな

844:デフォルトの名無しさん
19/05/12 22:31:33.06 5S2KiOuR0.net
まずLINQとクエリ構文は別物だぞ
> select score in scores
select句はクエリ構文の最後に抽出するものを指定するんだからこんなのはあり得ない
select句じゃなくてfrom句だろう
scoreはそのクエリ構文内で使うローカル変数的なものなんだからクエリ構文内で出てくるのが当たり前
列名が無いってのは単に数値の配列とか相手にしてるからじゃね
SQLは二次元相手にしか使わないがLINQ/クエリ構文は1次元相手にも使えるからな
scoresがclass Score { public string Name; public int Value; }の配列とかなら
from score in scores
select score.Value
みたいに「列名」が出てくる
あと重要なことだが、クエリ構文は使いどころがあんまり無い
基本的にLINQには拡張メソッドを使う

845:デフォルトの名無しさん
19/05/12 22:32:12.36 tDx5/mlf0.net
>>829
メソッド式使えよ

846:デフォルトの名無しさん
19/05/12 22:33:30.63 tDx5/mlf0.net
SQLでもテーブルの別名使ったりするやろ

847:入門者
19/05/13 07:59:49.56 W1wujo120.net
URLリンク(ideone.com)
独習C#のコードなんですが170行目のshapes[i].Nameは何故実行出来てるのでしょうか?
Nameプロパティには何も記述がないのですが・・

848:デフォルトの名無しさん
19/05/13 08:25:11.57 mnyzhKg9a.net
>>834
URLリンク(docs.microsoft.com)

849:デフォルトの名無しさん
19/05/13 08:29:59.30 V/EVdZRD0.net
>>834
それを学ぶのがその章の目的じゃないの?
Nameプロパティの定義は71行目
163行目のshapes[0].Nameは引数で指定された"right"がセットされる。
164行目のshapes[1].Nameは省略時引数により139行目のコンストラクタを経由して"rectangle"がセットされる。
165行目のshapes[2].Nameは省略時引数により134行目のコンストラクタを経由して"rectangle"がセットされる。
166行目のshapes[3].Nameは省略時引数により106行目のコンストラクタを経由して"trizngle"がセットされる。

850:入門者
19/05/13 08:34:33.58 W1wujo120.net
>>836
そうなのですが
でもvalueで代入してないのに何故Nameプロパティが機能してるのか分からなくて…
setとgetの中身を記述しなくてもプロパティは機能するのですか?

851:デフォルトの名無しさん
19/05/13 08:52:41.32 VAfV6Qs50.net
public string Hoge { get; set; }

private string _Hoge;
public string Hoge { get { return this._Hoge; } set { this._Hoge = value; } }
の省略構文みたいな感じになる
(実際にはこの_HogeはC#からアクセスできない名前にコンパイルされる)

852:デフォルトの名無しさん
19/05/13 08:57:28.04 WhpQbL/L0.net
>>837
string Hoge { get; set; } は自動実装プロパティと呼ばれるもので、
内容は>>838の通り。

853:デフォルトの名無しさん
19/05/13 10:05:53.21 yzhNtOt8H.net
ありがとうございました
>>831
URLリンク(docs.microsoft.com)
そうですねfromの間違いでした失礼しました
「scoreはそのクエリ構文内で使うローカル変数的なもの」ってのは割としっくり来ました
「LINQ/クエリ構文は1次元相手にも使える」SQLとは全くの別物と考えて頭からっぽにして勉強しなおしたほうがよさそうですね

854:デフォルトの名無しさん
19/05/13 15:49:43.81 d2gOVbtC0.net
vsを軽くするセッティングはないでしょうか?
重くなる原因はhddへのアクセスが100になってしまうからです
SSDはないです

855:デフォルトの名無しさん
19/05/13 16:02:30.23 UKQBojaO0.net
object 型の変数 x に int 型にキャストできる型(short 型や byte 型など)の値が代入されているときに
その値を int 型にキャストしたいのですが、(int)x とすると InvalidCastException が投げられてしまいます。
x に代入されている値が例えば short 型だと分かっているなら (int)(short)x でうまくいくのですが、
この方法だといちいち値の型を調べる必要があるのでもっとスマートな方法があれば教えていただきたいです。
一応自分でも考えてみたところ int.Parse(x.ToString()) なら x の型によらずうまくいったのですが、
値の変換をするだけなのに文字列を経由するのはすごく無駄なことをしているような気がします。
よろしくお願いいたします。

856:デフォルトの名無しさん
19/05/13 16:05:08.31 d2gOVbtC0.net
private void Form1_Load(object sender, EventArgs e)
{
var but = new System.Windows.Forms.Button();
but.Name = "button1";
but.Text = "押せ";
but.Location = new Point(0, 0);
but.Size = new System.Drawing.Size(80, 20);
Controls.Add(but);
}
コードでコントロールを追加したいのですが、ボタンは追加されませんでした
エラーでも出てくれればいいんですが、エラーは出ません
エラーは出ないけど、思い通りに動かない場合、何をヒントにしたらいいでしょうか

857:デフォルトの名無しさん
19/05/13 16:07:12.88 XGLfyuuud.net
ググりゃいくらでも記事出てくるやんけ
そいつらは試したの?
自身の環境も書かない、何を試したかも書かない、知識不足なのに勝手に要因を決めつける
初めて質問するならまだしも散々してきといてそれ?

858:デフォルトの名無しさん
19/05/13 16:08:41.09 XGLfyuuud.net
>>844
841に対して

859:デフォルトの名無しさん
19/05/13 16:14:20.97 d2gOVbtC0.net
出てきました
場所が悪かったようです
ごめんなさい

860:デフォルトの名無しさん
19/05/13 16:14:45.92 UKQBojaO0.net
>>843
そのコードをコピペして試してみたら私の方では問題なく表示されました。
そちらでうまくいかない原因は
・Form1_Load が呼び出されていない
・追加したボタンの上に別のコントロールが重なってしまっている
あたりではないでしょうか。
とりあえず Form1_Load が呼び出されているかどうかを確認するために
Form1_Load の最後に
MessageBox.Show("呼び出されてるよ"); を追加してみて、
メッセージボックスが表示されるかどうかを確認されてみてはいかがでしょうか。

861:デフォルトの名無しさん
19/05/13 16:15:55.94 d2gOVbtC0.net
>>844
問題はhddへのアクセスです
これは公式のサイトでは、SSDへの交換を推奨しています
それ以外の手段はないかなと思って質問しました

862:デフォルトの名無しさん
19/05/13 16:16:41.14 d2gOVbtC0.net
>>847
ありがとうございます
位置が0 0だと左側に隠れてしまうようでした

863:デフォルトの名無しさん
19/05/13 16:23:36.93 UKQBojaO0.net
>>849
解決したようでよかったです。
私も勉強中の身なのでお互い頑張りましょう。

864:デフォルトの名無しさん
19/05/13 16:31:17.78 fb9Hu3lu0.net
ついでに聞きたいんだけど、このボタンの描画ってUIスレッドで実行されることは保証されてるの?

865:デフォルトの名無しさん
19/05/13 16:34:35.11 VAfV6Qs50.net
>>842
Convert.ToInt32
>>851
それがUIスレッドの仕事なんだけど、何を心配してるの?

866:デフォルトの名無しさん
19/05/13 16:51:55.46 UKQBojaO0.net
>>852
まさに探していたものです!
最悪の場合、型ごとに場合分けしてキャストするメソッドでも
作ろうかと思っていたのですが、実にスッキリ解決できました。
どうもありがとうございました。

867:デフォルトの名無しさん
19/05/13 17:46:32.42 W1wujo120.net
>>838-839
詳しくありがとうございます。
前の章にも書いてありました。自分の勉強不足でした…

868:デフォルトの名無しさん
19/05/13 18:45:40.09 cAHvDA7yF.net
PCからのサウンド出力をイヤホンが刺さっている刺さっていないに関わらず、内部スピーカーかイヤホンか選択して出すにはどうしたらいいでしょう
NAudioを使っていろいろ試してるんですがうまくいきません
OS Windows10
サウンドデバイスがSpeakers/Headphones Realtek
だとサウンドデバイスがスピーカーとヘッドホンに分かれていませんが、これだと無理なのでしょうか

869:デフォルトの名無しさん
19/05/13 19:00:08.34 rRpVq2UzM.net
それは間違った機能だから出来たとしても実装するな
イヤホンが刺さってたら絶対イヤホンで出せ

870:デフォルトの名無しさん
19/05/13 20:12:51.62 d2gOVbtC0.net
public Form1()
{
MessageBox.Show("form1");
}
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("form2");
}
フォームアプリについてなんですが、この2つ関数の違いはなんですか?
タイミング的にはform1関数が先なんですが、どう使い分けるんでしょうか?

871:デフォルトの名無しさん
19/05/13 20:22:07.84 zDycstDZa.net
>>857
先に言語の入門本やサイトなどを読むべき
そうすればクラス名と同一名のメソッドには特別な意味があることが分かるし
そのキーワードと一緒にイベント名で検索すれば関連する話題も出てくる

872:デフォルトの名無しさん
19/05/13 20:29:22.69 XGLfyuuud.net
何度も何度も基礎からやれって言われてもずっとやらんのだからもう無理だと思う
こういうのが才能とかセンスみたいなもんなのかね

873:デフォルトの名無しさん
19/05/13 20:29:39.44 d2gOVbtC0.net
調べた限りでは
フォームが作られるときと、作られて読み込まれたとき
という差でしょうか

874:デフォルトの名無しさん
19/05/13 20:38:07.48 jADcqpCya.net
>>855
普通は物理的に切り替えている(ジャックにプラグを差し込むとSP出力が物理的に切断される)から無理でしょうww
恐らくソフトウェアでそれをやってるマシンはないと思うよ

875:デフォルトの名無しさん
19/05/13 20:47:37.18 XlJDR9UI0.net
>>855
その機器のドライバにAPIでも無ければ少なくともC#では無理
ハードウェアの方から調べることでここで質問して答えられるようなものではないと思う
>>860
URLリンク(bbs.wankuma.com)
コンストラクタはクラスで必ずはじめに実行されるもの
イベントメソッドと分けて考えないと

876:デフォルトの名無しさん
19/05/13 21:05:00.08 0/Wah16u0.net
>>857
だから入門用の本を読めと何度も言ってんだろうが

877:デフォルトの名無しさん
19/05/13 21:38:52.34 ZJ4TG7EAa.net
>>856>>861>>862
ありがとうございます
無理ですか。。
Audio Switcherなるものがあるのでソフトウェアからの制御もなんとか出来るかと思ったのですが

878:デフォルトの名無しさん
19/05/13 22:32:05.56 jADcqpCya.net
>>864
ハードウェア的にスプリッターを使ってライン出力かヘッドフォン出力を
二股で取り出せるようにする方が賢明でしょうね
100均で売ってるよ

879:デフォルトの名無しさん
19/05/13 22:38:16.41 lwKqLD9e0.net
>>864
いや昔やったこと有るからできるんだが、昔過ぎてやり方思い出せんわ
Vistaからマスターオーディオの制御ができるAPIがWindows標準になっていて
当時見たソースの跡地だけ発見したわ
URLリンク(www.codeproject.com)

880:デフォルトの名無しさん
19/05/13 22:41:01.01 lwKqLD9e0.net
>>864
ググったらそれらしきもの在ったから、あとは自分で頑張ってくれ
URLリンク(mikeo410.minim.ne.jp)

881:デフォルトの名無しさん
19/05/13 23:02:15.55 jADcqpCya.net
いやいやいやw
URLリンク(ja.wikipedia.org)
↑に説明付きの画像が出てるけど、要するにプラグが差し込まれると物理的にSP出力がオープンになる
構造に普通はなってるんで無理ですw
その辺テレビとかと何も違わないよ

882:デフォルトの名無しさん
19/05/13 23:05:51.31 0pB96hJZ0.net
プラグが刺されるとオープンになるジャック使ってるのは、プラグが刺されたらスピーカーから音が鳴らなくて良いものだけだろ。
テレビでも最近のはそんなジャック使ってないわw
ジャックにプラグ刺されてるか判定してるだけ。
お前はどんなラジカセで書き込みしてるんだ?

883:デフォルトの名無しさん
19/05/13 23:08:05.97 jADcqpCya.net
>>869
確認してから書いた方がいいよ。
特殊な業務用とかフィリップスみたいなところが作ってる超高級品は知らんけど、
大概のTVはそんなもったいぶったことしてないの。する意味がないでしょ

884:デフォルトの名無しさん
19/05/13 23:16:14.24 lwKqLD9e0.net
>>870
WindowsだとUSB経由とかS/PDIDとか有るし、そこに必ずSPが繋がっているとも限らないから
音声の切り替えはソフトでやっているのよ
イヤフォンの切り替え機能って俺の記憶だとWindows10 が最初だよ

885:デフォルトの名無しさん
19/05/13 23:26:37.35 lwKqLD9e0.net
>>870
あと、Windowsの機能で切り替えるのは標準の出力先だけだが、当然APIで標準以外の出力先に音声流すことも可能だ

886:デフォルトの名無しさん
19/05/13 23:28:52.35 jADcqpCya.net
>>871
それはオーディオデバイスが複数ある時にどれを有効にするかって話と違うの?
あと、高級品のサウンドカードだと複数系統の出力があってそれぞれボリュームコントロールが
ついていたりするかもしれないが、そういうの使ってるならこんな質問してないと思うよ。
普通に考えてオンボードのサウンドしかついてない普通のPC前提の質問じゃないの?

887:デフォルトの名無しさん
19/05/13 23:31:41.38 jADcqpCya.net
なんかググるとM/BによってヘッドホンとSP(ライン出力)が排他になってるのと
そうでないのがあるみたいだけど、質問者みたいに排他になってる場合は普通は
物理的に切り替えてるはずなんで、ソフトじゃどうにもならんと思うよ

888:デフォルトの名無しさん
19/05/13 23:32:56.12 lwKqLD9e0.net
>>873
普通のパソコンだってUSBのデコーダー付けられるだろ
それがどうやって物理的に切り替えられるのか考えてくれよ
それと俺は音楽プレーヤーソフト作ったこと有るから、恐らくあんたよりは詳しい

889:デフォルトの名無しさん
19/05/13 23:38:00.03 jADcqpCya.net
>>875
USB接続のオーディオデバイスを使ったら
M/Bのヘッドホンからはそもそも音が出ないと思うんだけどね普通は
複数のオーディオデバイスを同時に有効にして同じ音を出す、
なんて芸当できるんだっけ?

890:デフォルトの名無しさん
19/05/13 23:40:11.66 jADcqpCya.net
光出力が付いてる場合は排他にできるわけないね確かに。
でも質問者がそういう環境ならこんな質問してないわな

891:デフォルトの名無しさん
19/05/13 23:41:57.51 lwKqLD9e0.net
>>876
Windows10は普通にイアフォンとその他が切り替わるように仕様変更されている
勿論それがHDMI経由だろうがSP端子だろうが光出力だろうが

892:デフォルトの名無しさん
19/05/13 23:43:53.50 lwKqLD9e0.net
>>877
つかWindows95の頃から、音声出力はソフトで切り替えるのが常識だよ
ハード的に変えるほうが寧ろ珍しい

893:デフォルトの名無しさん
19/05/13 23:51:07.37 jADcqpCya.net
>>878
いやちょっと何を言ってるのか分からないんだけど、
ハードウェアがそうなってなきゃソフトがいくら頑張っても手も足も出ないのよ
質問者の環境はSP出力とヘッドフォン出力が排他的になってる環境で、
その切り替えは普通はメカ接点で物理的に行われるものだから、ソフトじゃどうしようもないよ

894:デフォルトの名無しさん
19/05/13 23:55:36.69 lwKqLD9e0.net
>>880
少なくとも今はHDMI経由でテレビから音声流す機能は標準搭載されているから
年代物のパソコンを除けばデジタル音声出力機能は標準搭載だよ
それをどうやってイヤフォンと物理的に切り替えるのか考えたら無理だと判るでしょ
Windows10から自動切り替えはできるようになっているけど、当然ソフトで制御しているし
それをVista以降はAPIとしてプログラマーが簡単に触れるようになっている

895:デフォルトの名無しさん
19/05/13 23:55:59.16 ec7a7a6ia.net
いやちょっと何を言ってるのか分からないんだけど、
メカ接点で物理的に行われるが、
SP出力とヘッドフォン出力が排他的になってるのは今時はソフトの設定でしょ?

896:デフォルトの名無しさん
19/05/13 23:58:20.52 jADcqpCya.net
>>881
だーから、その場合は普通はM/Bのヘッドホンからは音出ませんよ。
M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってるだから
>>882
今時も糞もないってだからw
M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってて、メカスイッチでそれを
ライン出力(スピーカー)と切り替えてるだけなので

897:デフォルトの名無しさん
19/05/14 00:00:01.39 /tIovtjDa.net
Mixer使えって話でしょ

898:デフォルトの名無しさん
19/05/14 00:04:48.16 vkfPDW5o0.net
>>882
サウンドミキサーってのがWindows95には既に付いていて、それで音声の切り替えとかマスターボリュームを制御していたから
XPまでのソフトでは大本の切り替えとか不可能だった
しかしVISTAから全てソフトから見えるようになって、ソフトごとにどの出力から出すなどの指定ができるようになった
同じパソコンでイヤフォンとスピーカーから違う曲を流すことさえやろうと思えばできるんだよ

899:デフォルトの名無しさん
19/05/14 00:06:27.49 vkfPDW5o0.net
>>884
Mixerを制御するAPIがVISTA以降に公開されたんだよ
C#から制御したことも有るし

900:デフォルトの名無しさん
19/05/14 00:14:28.54 94a7CpYNa.net
>>885
えーっとですねえ、だからそんな芸当はHWが対応してなきゃできないんだってw
標準的なPCのオンボードのオーディオデバイスはオーディオ出力が一つしかないので、
そんな芸当は逆立ちしても不可能ですw
物理的な出力端子の数 = オーディオ出力の数
ではないのよ。

901:デフォルトの名無しさん
19/05/14 00:14:35.14 KlvEEe7u0.net
win32apiスレにでも行ってくれ

902:デフォルトの名無しさん
19/05/14 00:15:52.53 vkfPDW5o0.net
UWPのMediaPlayerでもオーディオ出力先は好きなように変えることができる
URLリンク(docs.microsoft.com)
このページ内の「特定のオーディオ エンドポイントへの出力」ってのがピンポイントでは有るが、これはUWPのモジュールで最近WinFormsから使えるようになったが
まだ未完成な部分もあって割と面倒
ただ、同じことはAPIつかって地道に作ることもできるよ

903:デフォルトの名無しさん
19/05/14 00:20:22.84 vkfPDW5o0.net
>>>887
Windows10なら右下のスピーカーマーク押して「サウンド」ってのを選択すると出てくるダイアログで
「再生」ってタブを押せば、そのパソコンで使える音声出力先が出てくるが
出力が1つしか無いなんて化石のようなパソコンは見たことないわ
最低限スピーカーとイヤフォンとHDMIぐらいは付いている

904:デフォルトの名無しさん
19/05/14 00:22:45.62 94a7CpYNa.net
>>889
まあどっちにしろそれは質問してる人が聞きたいことと違うと思うよ。
質問者はアプリごとに別々のチャンネルに音を出したいって言ってるんじゃないからね。

905:デフォルトの名無しさん
19/05/14 00:25:02.63 94a7CpYNa.net
>>890
だから何度も同じことを言わせないで。
既定のオーディオデバイスは一つしか選択できない
だからHDMIのモニターから音を出すと普通は同じ音をM/Bのヘッドホン端子から
出力することはできないの

906:デフォルトの名無しさん
19/05/14 00:25:05.36 vkfPDW5o0.net
>>891
いや、889はイヤフォンが繋がっていてもスピーカーから音声を流す機能そのものだ
何も読んでいないだろ

907:デフォルトの名無しさん
19/05/14 00:26:26.04 vkfPDW5o0.net
>>892
HDIMIとパソコンのイヤフォン端子をどうやって物理的に切り替えるんだよ
普通にソフトで切り替える機能が標準でついているんだよ

908:デフォルトの名無しさん
19/05/14 00:27:34.01 94a7CpYNa.net
>>893
どこをどう読んだらそうなるのw
だから、何度も言うけどHW的に排他的になってたらソフトじゃどうにもならないってw

909:デフォルトの名無しさん
19/05/14 00:29:20.12 94a7CpYNa.net
>>894
ソフトで切り替える?
何を言ってるのか分からないよ。
単純な質問だ。
君のPCではHDMIのモニタを既定のサウンドデバイスに選択している時に、
同じ音をM/Bのヘッドフォン端子からも聞くことができるのかい?
できないってw
今まで知らなかったのか

910:デフォルトの名無しさん
19/05/14 00:30:46.74 vkfPDW5o0.net
>>895
string audioSelector = MediaDevice.GetAudioRenderSelector();
var outputDevices = await DeviceInformation.FindAllAsync(audioSelector);
foreach (var device in outputDevices)
{
var deviceItem = new ComboBoxItem();
deviceItem.Content = device.Name;
deviceItem.Tag = device;
_audioDeviceComboBox.Items.Add(deviceItem);
}
コンボボックスで指定した出力先に音声を切り替えているだろ
頭弱いねぇ

911:デフォルトの名無しさん
19/05/14 00:30:55.58 94a7CpYNa.net
もう寝るんで消えますおやすみ

912:デフォルトの名無しさん
19/05/14 00:32:36.55 94a7CpYNa.net
>>897
何を言ってるんだこの人。
その出力先っていうのはオーディオ出力のことであって
物理的な出力端子じゃないんだってば
どんだけメカ音痴なのマジで

913:デフォルトの名無しさん
19/05/14 00:33:11.08 vkfPDW5o0.net
>>896
それは質問と違うこと言っているよね
音声出力を標準以外からソフト制御で切り替えられるんだよ
VISTAからね

914:デフォルトの名無しさん
19/05/14 00:34:46.05 94a7CpYNa.net
もうボケ老人の繰り言だけど、だから普通のPCのオーディオ出力端子っていうのは
ヘッドホンとライン出力と2系統あるように見えるけど、実態は1つなんだよw
2つの別々のADCに繋がってるわけじゃないの。同じものをアナログ的に分配してるだけなの

915:デフォルトの名無しさん
19/05/14 00:35:23.50 94a7CpYNa.net
>>900
だからね、質問者はそんなこと聞いてないのよ

916:Hルトの名無しさん
19/05/14 00:35:25.68 vkfPDW5o0.net
>>899
そこのdevice.Nameってのが「ヘッドフォン」だったり「HDMI」だったりするんだよ
あんたが知らないだけで10年前からソフトで切り替えられる

917:デフォルトの名無しさん
19/05/14 00:36:25.52 ++GJZRWf0.net
Realtekのオーディオデバイスならイヤホン端子とスピーカー端子はH/Wで排他になってないわな
設定で排他にするか切り替えられたはず

918:デフォルトの名無しさん
19/05/14 00:41:10.69 KlvEEe7u0.net
話し合ってるレイヤーが違うんだよ
いい加減気付いて質問者のためになるレスをしてくれ
質問内容が不明瞭なら明確になる質問を返せ
想像で質問内容を決めつけて延々と罵り合ってるだけで肝心の質問は何一つ進展してないぞ

919:デフォルトの名無しさん
19/05/14 00:41:44.61 94a7CpYNa.net
>>903
もうダメだなこの人。
だから何度も言うけど、それはHWが対応してないとできないのよ。
何度も言うけど、普通のPCのスピーカーとヘッドホン端子は同一のオーディオ出力に繋がってるの。
別々のオーディオ出力に繋がってるんじゃないの。わかる?
次いでいうと、これも何度も書いてるが、それ質問者の質問と全然関係ないの。
質問者さんの質問はスピーカーとヘッドホンが排他的に切り替わるのが気に入らないから
ソフトで何とかできないか、だから。
何度もいうけど、普通のPCではHWで物理的に切り替えてるので不可能です

920:デフォルトの名無しさん
19/05/14 00:47:57.18 vkfPDW5o0.net
>>906
パソコンにHDMIは最低限付いているから、音声出力が1系統しか無いパソコンなど滅多にお目にかかれません
しかもUSBとかBluetoothとか音声を出す場所はいくらでもあるんだから、


921:最低限ソフトでオフに出来ないと問題になる つか1系統でイヤフォンとスピーカーが物理的に切り替わるだけしか出来ないパソコンって存在するのか? 例えば何ていうパソコンのことか具体的に名前出してくれ



922:デフォルトの名無しさん
19/05/14 00:49:56.17 BJB1D/ui0.net
落ち着け。どっちも正しい。
イヤホンジャックの接続を確認して他のサウンドデバイスを黙らせるハードウェアも有る。
時々出力先間違えるドライバが有るな。
再生デバイスの先でイヤホンジャックが物理的にスピーカー出力を切る装置も有る。
後者はソフトではどうしようも無い。

923:デフォルトの名無しさん
19/05/14 00:52:31.92 94a7CpYNa.net
>>907
何がいいたいの?
まったく意味が分からん
質問者さんが何を聞いてるか、もう一度落ち着いてよく考えてよ

924:デフォルトの名無しさん
19/05/14 00:58:48.14 vkfPDW5o0.net
>>909
イヤフォンつなげたままスピーカーから音声を流すAPIは存在するってことね
SPとHPが共有だったとしても、他に出力する先は色々有る
何故物理的に不可能だと言い切っちまうの?APIが存在するのにさ

925:デフォルトの名無しさん
19/05/14 01:06:05.42 94a7CpYNa.net
>>910
意味が分からないよ。
だから、誰も最初からそんな話してないって
何で一人で「アプリごとに個別の出力先に音声出力が可能か?」なんて
誰も問題にしてない話をしてるのよ

926:デフォルトの名無しさん
19/05/14 01:06:49.56 94a7CpYNa.net
どっからそんな話が出てくるのマジでw
ほんと意味わからんよ

927:デフォルトの名無しさん
19/05/14 01:18:14.50 AtdtzVQx0.net
読解力がないってパターン?

928:デフォルトの名無しさん
19/05/14 02:01:08.24 mmoBBtY10.net
ワロ

929:デフォルトの名無しさん
19/05/14 05:43:28.06 fttRH1Ml0.net
>>862
関数とは言わないんですね

930:デフォルトの名無しさん
19/05/14 07:21:30.35 es4OQUhe0.net
>>870
たいがいのテレビもそうなってるよ。
確認してみた?自分ちのテレビ。

931:デフォルトの名無しさん
19/05/14 07:23:05.19 es4OQUhe0.net
>>876
それをやるのがオーディオミキサーじゃん?
昔ならsndvol32とか。

932:デフォルトの名無しさん
19/05/14 12:22:39.22 HKF8AKPGa.net
>>916
なってないよ。
そういや思い出したけど、大昔のテレビはイヤホンジャックが2つあったんだよな
で一つはSPの音を消さない仕様になっていた
普通に考えてその方が単純明快で親切だ
ヘッドをンを差し込んでも音を消さないためには、何とかボタン押して設定画面出して
この項目のアレを....
なんてまどろっこしいしヲタしか使えないしソフトもハードもコストがかかる
>>917
何か根本的に勘違いしてるんじゃないの?
それは同一のオーディオデバイスの複数の音源のボリュームを調整するんだよ。
複数のオーディオデバイスの音量を調整するんじゃないの。わかる?
他の人も書いてたと思うけど、ウィンドウズは複数のオーディオデバイスを持てるが、
既定のデバイスに設定できるのは一つだけだ(当たり前だけど)

933:デフォルトの名無しさん
19/05/14 13:04:21.56 sprIIWlUd.net
>>918
そんな安物使ってるのか。
普通はジャックの状態で選択してるだけで、物理的に切断はよほどローテクな機械しかやらんよ。
スマホにイヤホン刺してもスピーカーからも音鳴るっしょ。
PCでもそうなってるよ。普通は。
刺したら切り替わるだけ。排他ではない。
URLリンク(pcrepair.w-pickup.com)
とか、
逆に、両方から鳴って困る事のQAもある。
URLリンク(www.fmworld.net)
sndvol32はそのとおりだな、間違ってた、すまん。
出力デバイスを選ばにゃならんが、直接叩くなら別個に出力できたと思うけど。
具体的にはKernel Streamingで。

934:デフォルトの名無しさん
19/05/14 13:29:10.73 HHew+yI/0.net
>>918
それイヤホンジャックじゃなくてLINE出力のことだろ?

935:デフォルトの名無しさん
19/05/14 14:01:03.60 xGjK1aQt0.net
こんなところまでLINEが進出してるとは、韓国もやるな

936:デフォルトの名無しさん
19/05/14 15:22:49.71 HKF8AKPGa.net
>>919
TVはどうだか知らんけど、なるほどPCではソフトでヘッドフォン接続を検出して
SP出力を制御してるタイプもあるんだな。
これは素直に知らなかった。
自作用M/Bだとリアパネルの端子の接続をソフトで検出するタイプは昔から結構あったけど。
質問した人のPCがこういうタイプならドライバのユーティリティーで設定変えたら解決するね。
ノート含めメーカー製のPCの大半はこういうタイプじゃないと思うけど

937:デフォルトの名無しさん
19/05/14 18:33:42.83 fttRH1Ml0.net
wpfとwinformどちらがいいのですか?
C#で検索するとほとんどはwinform向けのコードのような気がします
大部分は同じですけども

938:デフォルトの名無しさん
19/05/14 18:50:04.03 gmflVafJ0.net
>>855です
色々と議論頂いて申し訳ないでした
しかしとても参考になりました
ありがとうございました
まさに>>919がやりたいことなんですが、自分がサウンドデバイスとAPIの関係性がいまいち理解不足な気がしますのでもう一度しっかり見直してみたいと思います

939:デフォルトの名無しさん
19/05/14 18:50:39.47 rq13d1wo0.net
>>923
絶対winform
wpfは資料なさすぎて辛いよ

940:デフォルトの名無しさん
19/05/14 18:51:24.71 xTv9RSlG0.net
>>923
どっちでもいいけどまあとっつきやすいのはWinFormじゃない

941:デフォルトの名無しさん
19/05/14 18:56:25.88 zLBAV05La.net
>>923
シンプルな画面ならwinformsかwpfどっちでもいい
複雑な画面ならwpf一択

942:デフォルトの名無しさん
19/05/14 19:02:22.19 gEF4/DH4M.net
>>923
デスクトップアプリ自体が時代遅れだから、基本的にはどちらもお勧めはできない。
しかしちょっとしたツールなんかで便利なことはあるから、覚えておいて損はないだろう。
その意味では断然WinFormsがお勧めだ。
WPFは習得コストが高く、デスクトップアプリという死んだ技術に対しては割に合わない。

943:デフォルトの名無しさん
19/05/14 19:04:08.39 fttRH1Ml0.net
確かに調べた限りではwinformのほうがサンプルが圧倒的に多いですね
wpfは初学者にはきついかも、、
>>928
デスクトップアプリが時代遅れとはなんのことでしょうか
毎日使ってますが

944:デフォルトの名無しさん
19/05/14 21:07:11.88 0h207dTD0.net
横で申し訳ないのだけど、WinFormsが枯れて次に学習すべきは何がおすすめ?
とりあえず簡単な業務用アプリくらいは作ってますが(データベースと連携あり)
ASP.NETとかWebアプリに進むと、セキュリティの面でまた何かと面倒なのかなと躊躇しちゃう

945:デフォルトの名無しさん
19/05/14 21:23:53.52 0tHpu3UbM.net
時代はデータサイエンティストを求めてる

946:デフォルトの名無しさん
19/05/14 22:43:21.70 ++GJZRWf0.net
>>924
Realtek HDオーディオマネージャーでやってるのは、
おそらくOSのAPIではなく
Realtekのドライバーの独自機能を直接呼び出してると思う

947:デフォルトの名無しさん
19/05/15 00:23:39.11 HTdksHae0.net
C#関係ないな

948:デフォルトの名無しさん
19/05/15 16:32:56.09 VEpWlxZJ0.net
wpf始めたんですが、画像の表示について教えてください
コントロールに紐付ける方法がわかりません
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var bt = new BitmapImage();
bt.BeginInit();
bt.UriSource = new Uri(@"C:\Users\◎◎\Desktop\programing\vs_project\0_practice_project\tilemap_wpf\tilemap_wpf\img\1.png");
bt.EndInit();
}
ここまでは調べられたんですが、コントロールに紐付ける方法がわかりません
コントロールの種類はimageで名前はimage_mです。
資料少なめですね

949:デフォルトの名無しさん
19/05/15 17:07:43.75 VEpWlxZJ0.net
できたです
ごめんなさい

950:デフォルトの名無しさん
19/05/15 17:14:40.06 VEpWlxZJ0.net
>>934
このbegininitで初期化をコントロールの初期化をするという説明がされていますが、なぜこの作業が必要なんですか?
winformにはなかった手順なので、存在する意味がわかりません

951:デフォルトの名無しさん
19/05/15 17:39:10.29 tK1Lgxrc0.net
自己解決したなら解決手法を書きましょう
winformとwpfは異なるものなので手順も異なります

952:デフォルトの名無しさん
19/05/15 17:58:43.55 WnxQfHPj0.net
忠告されているのにわざと自分から沼にはまって助けを求める人

953:デフォルトの名無しさん
19/05/15 18:44:30.38 SVWj/8FLM.net
自分が描いた迷路で迷うのもまた人生さ

954:デフォルトの名無しさん
19/05/15 19:13:20.58 le9v9LR70.net
>>934
URL指定するだけで良いならnew BitmapImage(URL);でいいよ
ロード前に色々プロパティ設定したいならBeginInit使う
固定の画像ならXAMLで<Image Source="URL"/>だけでもいい

955:デフォルトの名無しさん
19/05/15 19:58:30.74 I+StC2Kj0.net
>>932
ありがとうございます
引き続き色々と調べてますが未だ出来ていません
NAudioを使ってオーディオデバイスの取得をしていて、自分のイメージでは
オーディオデバイスをスピーカーとヘッドホンのそれぞれで取得して、どちらかを既定のデバイスとして設定してあげれば出来るのかな?と考えてたんですが
デバイスがSpeakers/Headphonesの一つしか取得できないのでPC側の出力状態になっているものしか制御できないのです
この辺りがHWの制約によるものなのかドライバの設定でなんとかなるのかを現在調査中です

956:デフォルトの名無しさん
19/05/15 21:08:20.12 VEpWlxZJ0.net
>>940
引数 1: は 'string' から 'System.Uri' へ変換することはできません。
new BitmapImage(url)
で指定するとこのエラーが出ますが、参考ページありますか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch