X



ふらっと C#,C♯,C#(初心者用) Part147
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (エムゾネ FF9f-HF0o)
垢版 |
2020/02/19(水) 17:25:41.55ID:IsrGexiaF
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part146
https://mevius.5ch.net/test/read.cgi/tech/1576069931/
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0776デフォルトの名無しさん (ワッチョイ 5b84-57Gp)
垢版 |
2020/05/19(火) 17:49:11.24ID:+0P+K8Fq0
>>772
STAスレッド(Formのスレッド?)で処理していたらUIの更新が行えないので
正しい動作かな
ClipboardクラスはSTAでしか動かないってなっているので、asyncメソッドでtaskを
実行してdelegate経由のinvokeで呼び出すんじゃないかな
0777デフォルトの名無しさん (ワッチョイ 4d1d-ucyj)
垢版 |
2020/05/19(火) 18:20:34.86ID:8HY/3oGP0
SIer業界がブラックな理由を解説する。エンジニアは自社開発をしているWeb業界がオススメ!
https://www.youtube.com/watch?v=iy4nnAI9og4
エンジニアの仕事が稼げる理由とは?プログラミングスキルと
仕事の需要は比例しないので、実は技術力が低くても稼ぐことができる!
https://www.youtube.com/watch?v=82Bs-NH8jAM
通勤時間が長い人ほど無能説。家賃節約とか言っている暇があったら、
会社の近くに引っ越して浮いた時間に副業したほうがお金も貯まるし強くなれる。
https://www.youtube.com/watch?v=mt6K1RJnk6I
プログラミングに英語は必要か?に対する明確な答え
https://www.youtube.com/watch?v=WWULJbVECKU
私がヤフーを辞めた理由
https://www.youtube.com/watch?v=-G-7Hc3rJw8
【業界研究】IT業界でひと括りにするのは危険。SIer、Web制作、
アプリ開発で仕事内容が全く違います。【就活・転職】
https://www.youtube.com/watch?v=_IJQ2iBkf4w
0778デフォルトの名無しさん (ワッチョイ ebfd-4TjA)
垢版 |
2020/05/19(火) 18:32:12.04ID:mepgGg800
vb.netとc#の大きな違いってなんでしょうか
仕事で後者を触らないといけないんですが
0779デフォルトの名無しさん (アウアウエー Sa93-ahgx)
垢版 |
2020/05/19(火) 18:34:15.56ID:h69Ba80Ra
vb.net うれしくない
C# どちらでもない
0780デフォルトの名無しさん (ワッチョイ 17f1-8kLo)
垢版 |
2020/05/19(火) 18:49:46.90ID:DkycvRhf0
>>777
ハゲとるやないか
0785デフォルトの名無しさん (アウアウウー Sa31-L7FI)
垢版 |
2020/05/19(火) 20:48:48.06ID:Hcak2SNoa
>>782
あんまり意味のある質問に思えないんだけどw
0786デフォルトの名無しさん (アウアウウー Saaf-Wcp/)
垢版 |
2020/05/19(火) 20:49:42.54ID:jcXcpHtca
>>782
言語仕様はほぼ一緒なんだけど使い手のレベルとか文化とかに雲泥の差が
控えめに言ってVBしかできないような人は20世紀から取り残されたゴミみたいな開発者が大半
BASICの歴史的な経緯からくる負の遺産、いままでに蓄積されたクソコードもてんこ盛り
VBに関わるとダメプログラマに転落するぞ

といいつつC#でも下手するとVS2005〜2008位で時間が止まったままの案件も結構あるけどな
そういう現場にどっぷり漬かるとVBでもC#でもダメエンジニアへの道まっしぐらだ
0787デフォルトの名無しさん (ブーイモ MM81-DBEz)
垢版 |
2020/05/19(火) 20:55:05.94ID:1ZWHWWZ0M
っていうか言語で出来ることが変わるとか制限あるのがおかしい
日本語の「ツンデレ」を訳せる言語が無いとかそういうレベルと違う
0788デフォルトの名無しさん (ワッチョイ 3fac-5iCk)
垢版 |
2020/05/19(火) 20:57:59.68ID:HSamcFUd0
VBはちょっと。。
言語もだけど、書く人の頭が古いからコードまで至るところで古さを感じる
多重for、ifとかそんなレベルで
VB現役でやってる人でもすごい人はいるんだろうけど、稀有やろなあ
0792デフォルトの名無しさん (ワッチョイ d390-6tiU)
垢版 |
2020/05/19(火) 22:18:57.18ID:KmzCw2hp0
数年前に作られたVB.NETのWebシステム知ってる
オフショアで作らせたら動く粗大ゴミが誕生したと聞いた
詳しくは知らんが
0795デフォルトの名無しさん (アウアウウー Sac7-tPY3)
垢版 |
2020/05/20(水) 07:05:09.78ID:QEwx4hM4a
C#で書いてると、たまにVB使うとエンターキーの違いでイラっとくるわ
0797デフォルトの名無しさん (ワッチョイ 5bf1-D4L3)
垢版 |
2020/05/20(水) 10:16:35.82ID:qjNDk5Cx0
エンターキーの違いとは?
0798デフォルトの名無しさん (ワッチョイ c74e-no6W)
垢版 |
2020/05/20(水) 12:59:08.46ID:nNq7q5wW0
public Class MyCustomForm : Form
という自作の拡張Formクラスを作り、コンストラクタで色やいくつかのコントロールを配置したものをメインのForm1で継承させ、コンパイルも上手くいき実際の動作も希望通りではあるのですが、
上記のMyCustomFormのコンストラクタ内で追加したコントロールがデザイナで編集することができません。
まるで背景画像かのように選択すら出来ないものや、選択こそ出来てもAutoSizeやLocationなどの項目が灰色掛かって編集不可能になっていたりします。

InitializeComponent()以外で追加したコントロールをデザイナ上で操作することは不可能なのでしょうか?
0803デフォルトの名無しさん (ワッチョイ 8b01-oW4g)
垢版 |
2020/05/20(水) 16:24:15.65ID:wnqJe1lz0
プロジェクト・リュニオン!
ゴー!リュニオン!
0805デフォルトの名無しさん (アウアウウー Sac7-lIs9)
垢版 |
2020/05/20(水) 18:05:51.93ID:e2MEnn77a
要するに5年ぐらい前に言ってたはずの「Win32を全廃してUWPで一本化する」計画は
諦めたってこと?

まああの話も一瞬出ただけでその後まったく聞かなくなってたけど

>>798
アクセスレベルがprivateになってるとかではなくて?
っていうか、もしコントロールをユーザーコードで追加している場合だけ起こる(デザイナで追加した場合は起こらない)
問題だと分かっているなら変なこだわりを捨てればよいだけなのでは?


まあバグでプロパティがいじれないコントロールも一部あるらしい
https://teratail.com/questions/236012
0807デフォルトの名無しさん (ワッチョイ 9763-xLuj)
垢版 |
2020/05/20(水) 19:08:47.13ID:2OJQAkVy0
リユニオンとか真っ黒になりそう
0808デフォルトの名無しさん (ワッチョイ 8b01-oW4g)
垢版 |
2020/05/20(水) 20:43:28.09ID:wnqJe1lz0
トレイン変形!ゴー!リュニオン!
0809デフォルトの名無しさん (ワッチョイ 9a01-hY51)
垢版 |
2020/05/21(木) 04:25:59.16ID:ShhpHDma0
winフォームアプリなのですが、Form1上のtextBox1に他クラスからアクセスしたい時って
Form1.Designer.csの下の方にあるフィールドをpublicに変えるのはよくない例ですか?

Form1のコンストラクタで自分自身を当該他クラスに引き渡す処理は済んでいます

Form1で、textBox1.TEXTをプロパティにして
他クラスからアクセスする方法も考えたんですけど、
じゃ、テキストボックスじゃなくてリストビューとかだとどうするんだとか考えたら
めんどくさいからもうpublicでいいんじゃないかとか思っちゃうんですけど
ベテランの皆さんはどうしてるんでしょうか
0816デフォルトの名無しさん (アウアウウー Sac7-lIs9)
垢版 |
2020/05/21(木) 11:45:51.28ID:LNx85Gx+a
>>811
頑張って考えるまでもない。
XがFormを参照するんじゃなくて、FormがXを参照するように変えるだけ。

なぜUIの更新なんていう猿仕事を他のクラスにやらせようとするの?
それはUI自身の仕事だよ。
0817デフォルトの名無しさん (ワッチョイ 9a01-hY51)
垢版 |
2020/05/21(木) 14:57:27.90ID:ShhpHDma0
>>812
誘惑にかられますわ
>>813-815
カスタムコントロールとかですか?
ググっていろいろ調べたんですけど面白そうですねこれ
今回の用途にどう使うのかについてはまだ理解できてないですけど
継承ってこういうことに使うんですね
>>816
つまり、他クラスからForm1のtextBox1に書き込む仕様自体がおかしいってことですか
Form1から他クラスに仕事させて、結果をForm1で受けとってForm1からtextBox1に書き込むべきという理解でよいですか
確かにそうですね
他クラスから書き込むとForm1のコードがスッキリするので気に入ってたんですけどよくないってことですね
他クラスの汎用性を奪っているとも言えますね
0818デフォルトの名無しさん (ワッチョイ 9a01-hY51)
垢版 |
2020/05/21(木) 15:28:29.26ID:ShhpHDma0
>>813-815
なんとなく分かりました

public partial class CustomTextBox1 : TextBox

こうやって定義してから、このクラスに処理のためのメソッドをおくとともに
自分自身のTextプロパティに書き込むようにしておく
で、このメソッドをForm1から呼んで処理させればボックスに書き込むことができるっていうことですね

あー勉強になりました
0820デフォルトの名無しさん (ワッチョイ 0e84-BCZG)
垢版 |
2020/05/21(木) 17:41:35.31ID:66n7MLhy0
>>809
やり方は人それぞれなので何が良いとかないと思うけど、デザイナで操作できる
ところはデザイナで操作したほうが良いと思うよ
Designer.csをいじっても結果は同じなんだけど、おかしなコードを書くとデザイナの
挙動がおかしくなったりしてイランことに時間がかかったりするから
0821デフォルトの名無しさん (スッップ Sdba-6rFm)
垢版 |
2020/05/21(木) 17:47:51.10ID:LaJH1wCvd
見掛けは同じように見えても、改行コードのせいでエラー吐いてたプロジェクトをなんとかしてくれと依頼されたことがある
0825デフォルトの名無しさん (ワッチョイ 9a01-hY51)
垢版 |
2020/05/21(木) 19:27:16.30ID:ShhpHDma0
>>820
>>822
コントロールのアクセス修飾子をデザイナから変更できることをさっき知りました
そうすべきでした

元々の質問内容は、直接Designer.csを編集してもよいかどうかではなく、
publicにすること自体いいのか悪いのか、でした。
0826デフォルトの名無しさん (アウアウウー Sac7-vdj3)
垢版 |
2020/05/21(木) 22:44:16.71ID:y7fmuH5Aa
TextBox自体をpublicにするのはやっぱり微妙かなあ
自分だったらForm1クラスにpublic(or internal)なメソッドを作って、
メソッド名をTextBoxにアクセスする目的を明確に表す名前にする

たとえば、
 void set合計金額Text(int price, Color textColor) { }
 string get現在のその他欄入力値()
とか言った感じで
0827デフォルトの名無しさん (アウアウウー Sac7-vdj3)
垢版 |
2020/05/21(木) 22:49:45.68ID:y7fmuH5Aa
あ、小文字始まりでJavaのsetter/getterみたいにしちゃったけどC#なら当然大文字始まり

受け取りたい項目が複数、例えポップアップ表示ダイアログの各項目の入力値を取り出すなら、
入力値を詰め込むInputValuesクラスとかを定義したうえで、
 InputValues GetInputValues() { }
みたいなメソッドを作って入力値をオブジェクトで扱いやすくして返すようにする
0829デフォルトの名無しさん (ワッチョイ 33a7-2bic)
垢版 |
2020/05/21(木) 23:13:48.54ID:iIzHpd9H0
>>826
やめろやめろ
そんなバカなことなれて
コントロールが300個とかあるときどうするんだ
〜するべきとかそもそも元の造りがそんなふうになってないことのが多いのに
無駄なラッピングなんてするべきじゃない
想定するならそれが1000個あるときそれをやってられるかどうかを想定しろ
そもそも少数ならアクセス方法なんてどうだっていいだろ?
想定してるのは大量にある時なんだよね?
0830デフォルトの名無しさん (ワッチョイ ba52-NhWw)
垢版 |
2020/05/21(木) 23:54:34.06ID:VEFS25bE0
>>829
何で勝手に膨大な数のコントロールがある前提なんだ?
質問者はそんなこと全く言ってないし、読んだ限りでは初心者が小規模なプログラムを作ってる可能性の方が高そうだ。
そういう相手に実務上の仕方なくやる汚いやり方を教えるより、場合によっては理想論になるかもしれないが基本的に良いとされる考え方をまず教えた方がいいだろう。
0831デフォルトの名無しさん (アウアウウー Sac7-vdj3)
垢版 |
2020/05/22(金) 00:00:35.63ID:2K6mKaTxa
???
おおもとの>>809では対象はtextBox1の一つだけみたいだけど
でこれがTextBoxからListViewに変わったときとかの話はあるけど
対象項目が大量なんて前提はどこから湧いてきたんだっけ?

というか1画面にコントロールが300個とか1000個とか配置されてて、
全部publicフィールドになってて、法則性もなくあらゆるコントロールに無尽蔵にアクセスする
なんて、その時点でソースから腐臭が漂ってるよ
そこまで酷い状態になってるなら諦めて全部publicにするしかないでしょう
後日メンテナンスしなきゃならないときの影響調査で死ぬだろうけど
0833デフォルトの名無しさん (アウアウウー Sac7-lIs9)
垢版 |
2020/05/22(金) 01:10:19.16ID:mKnPmupma
>>826のラッピングが無意味で有害無益なのは>>829の言う通りで、
問題点をはっきりさせるために大量のコントロールがあるケースを想定するのも間違ってない。
だからと言って>>812にあるようにコントロールをpublicにするのもダメ

OOP的な考え方もカプセル化の意味も分かってない人がこうも大量にいるのは困っちゃうねw
0835デフォルトの名無しさん (ワッチョイ 97de-2bic)
垢版 |
2020/05/22(金) 01:29:28.72ID:tRHrER1d0
>>830
良くないじゃん
だってお前のやり方は数が増えたら手間ばっかり増えて何のメリットもないし
数が少なければ見通しが効くからラッピングなんかいらないわけで
この世に必要ないことしてんだよ
0836デフォルトの名無しさん (アウアウウー Sac7-lIs9)
垢版 |
2020/05/22(金) 01:35:16.74ID:mKnPmupma
>>834
何の理由?
つーかこのレベルの話が分からん人は回答する側に回ったらダメだろうさすがにw
0838デフォルトの名無しさん (アウアウウー Sac7-lIs9)
垢版 |
2020/05/22(金) 01:47:55.06ID:mKnPmupma
>>837
だから、それって「どうしてカプセル化なんて必要なの?」って聞いてるのと同じだよw
カプセル化が重要なのは人間の脳が複雑性に対して脆弱だから。
だから必要な物だけ見せてそうでないものは見せないことによって複雑性を減らす必要がある。

例外はあるが、基本的にはUIはメンバーを外部に公開する必要がない。
表示を更新するのも、ユーザー入力をモデルに伝達するのも全部それはUIの仕事。
それを他人にやらせようとする発想が根本的に間違っている
0844デフォルトの名無しさん (ワッチョイ 3761-crVl)
垢版 |
2020/05/22(金) 10:09:40.93ID:ImtqKYD30
コントロールに直接アクセスを許すんじゃなくて根っこにあるデータへのアクセスを許すようにしとけばいいんじゃね?
コントロールとデータはBindingしてんだからそれでいいだろ
0847デフォルトの名無しさん (アウアウウー Sac7-8pht)
垢版 |
2020/05/22(金) 10:32:58.69ID:I4qPJ3i7a
>>841
それはフォームにメンバを追加してラップしたところで解決にならん
フォーム自身がコントロールとして元々持っている大量のメンバはどうするんだ?
もしスレッドセーフにしたいのならフォーム自体も公開してはいけない
0848デフォルトの名無しさん (アウアウウー Sac7-lIs9)
垢版 |
2020/05/22(金) 12:22:25.06ID:/6UQkCjLa
>>846
そんな大げさな話?
コントロールへのアクセスはFormの仕事だから他人にやらせようとせずにForm自身にやらせろと言っている。
これのどこがそんな難しい話?

ファミレスで客が厨房に乗り込んで注文出さないのと同じことだよ
注文を受けるのはウェイトレスの仕事
パスタの担当が厨房の佐藤さんであることを客が知ってないとナポリタンの注文を
出せなようなファミレスにあんた行きたいか?w
0850デフォルトの名無しさん (ブーイモ MM26-NLVI)
垢版 |
2020/05/22(金) 13:06:32.78ID:Yx9iiiQWM
ぶっちゃけアーキテクチャパターンと規模次第

MVVM、MVU、MVCの場合はVの機能をV以外に公開することは滅多にない
MVPでは逆にVの基本的な機能をインターフェースで抽象化して積極的にPに公開してコントロールを委ねる

Formの主力アーキテクチャはどうなっているかというとMVPのVPが結合した怠惰なアーキテクチャになってる場合が非常に多い
丁寧に作るならPに書くべきコードが手抜きされてVのFormイベントに書かれてしまっている状態

VPが結合してるからprivateなコントロールを抽象化しなくてもアクセスすることはできる
しかしそれでは規模が大きくなるほどメンテナンスしにくくなる
VPが結合していても基本的な機能を抽象化しておくと後々のメンテナンスが楽になる

このような自クラス内部に向けて抽象化された安全なインターフェースを提供する開発手法を自己カプセル化と言う
0852デフォルトの名無しさん (テテンテンテン MMb6-8pht)
垢版 |
2020/05/22(金) 13:22:07.31ID:jD2+szsjM
>>849
そういう問題じゃない
注文相手がウェイトレスだろうと厨房にいる店主のオッサンだろうと、客がすることは「注文を店の人に伝える」だ
その注文を受けて店がどうするかという実装の詳細は知ったことではない
ケースバイケースで判断するべきは、そのフォーム同士のやり取りが客と店の間で行われるのか、それとも店の中で行われるのか、という点
後者なら例えばウェイトレスが厨房の設備のレイアウト等を知っていることを前提としてコックへ依頼をすることは店の規模次第では許されるし、そうしたほうが手っ取り早いケースは多いだろう
これは突き詰めると責任分界の問題で、フォームの役割や開発チームの構成等によって最適解は変わってくる
0855デフォルトの名無しさん (ワッチョイ ba52-NhWw)
垢版 |
2020/05/22(金) 14:44:15.74ID:YTFb7Y3X0
>>853
初心者のうちに気づける失敗はどんどん経験させた方がいいと思うけど、今回の話みたいに、規模が小さいうちは悪手でも問題なくてそれに気づかず変な癖をつけてしまって、後になって大きな規模で問題に直面することもあるからちゃんと説明するのは大事だと思う。
0870デフォルトの名無しさん (ワッチョイ 032d-ze6u)
垢版 |
2020/05/23(土) 11:45:11.67ID:USRRjb5n0
withってコンストラクタは呼ばれるのかな?
0872デフォルトの名無しさん (ワッチョイ a3ad-T1cz)
垢版 |
2020/05/23(土) 12:58:29.38ID:MMWDLofe0
何気にトップレベルで直接プログラムが開始できるの嬉しいな。
小さいスクリプト的な使い方で便利になるかもしれん。
dotnet run xxxx.csみたいに出来ると言うことないな。
0873デフォルトの名無しさん (ドコグロ MM92-zJk2)
垢版 |
2020/05/23(土) 14:33:05.59ID:N5u382BOM
>>872
個人的にはやり過ぎだと思うわ
コンパイルが不要になるわけじゃないしちょっと複雑なことしようと思ったら変数宣言も要るからあんまりメリットに思えない
スクリプトならPowerShellでお腹いっぱい
0875デフォルトの名無しさん (テテンテンテン MMb6-8pht)
垢版 |
2020/05/23(土) 14:50:01.02ID:rR3WkHU8M
今時のWeb開発だとマイクロサービス指向で小物を沢山作ることが多くなってて、
振る舞いを色々備えててカプセル化とかもきっちりやったリッチなモデルよりも、単にデータクラスを関数で弄るだけみたいなスタイルが主流になりつつあるんだよ
Main省略もその文脈で言えば自然
最近のC#周りは完全にアメリカで主流な内製開発に迎合していて、日本のドカタには理解されにくいね
0876デフォルトの名無しさん (ワッチョイ a3ad-T1cz)
垢版 |
2020/05/23(土) 15:00:31.21ID:MMWDLofe0
>>873
コンパイルがまるで不要かのように振る舞わせたいんだと思うよ。
replできたり、dotnetコマンド見てると。
確かに、csxはどうしたいんだろうな。
個人的にはPowerShellは抵抗感あるかもしれん。
■ このスレッドは過去ログ倉庫に格納されています

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