!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
ふらっと C#,C♯,C#(初心者用) Part147
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (エムゾネ FF9f-HF0o)
2020/02/19(水) 17:25:41.55ID:IsrGexiaF751デフォルトの名無しさん (ワッチョイ 7701-tC+g)
2020/05/18(月) 07:21:22.24ID:ZhbDs7dG0 >>746
馬鹿は知ったかぶりすんな
馬鹿は知ったかぶりすんな
752デフォルトの名無しさん (アウアウエー Sa93-jstM)
2020/05/18(月) 09:32:08.05ID:vuzvZUyca ループ中にList<string>へAddして追加していった文字列があります
Listの中身は仮にABCD, ABCD, EFGH, IJKL, IJKL, IJKLとします
これを集計してMessageBox.Showにて下記のように出力したいのですがどのような方法がありますか?
---------------
ABCD 2件
EFGH 1件
IJKL 3件
---------------
集計部分の方法について教えていただきたいです
二重ループにてひとつずつカウントするのは思いつくのですがもっと無駄の無い方法があるのではないかと質問させていただきました
ループの回数、Addされる文字列は決まっていないためListに格納してみました
ループ1回の中で条件に合致するとListへAddします(1回のループで追加なし or 1回だけAddの必ずどちらかです)
質問の前提条件が足りませんでしたら指摘お願いします
よろしくお願いします
Listの中身は仮にABCD, ABCD, EFGH, IJKL, IJKL, IJKLとします
これを集計してMessageBox.Showにて下記のように出力したいのですがどのような方法がありますか?
---------------
ABCD 2件
EFGH 1件
IJKL 3件
---------------
集計部分の方法について教えていただきたいです
二重ループにてひとつずつカウントするのは思いつくのですがもっと無駄の無い方法があるのではないかと質問させていただきました
ループの回数、Addされる文字列は決まっていないためListに格納してみました
ループ1回の中で条件に合致するとListへAddします(1回のループで追加なし or 1回だけAddの必ずどちらかです)
質問の前提条件が足りませんでしたら指摘お願いします
よろしくお願いします
753デフォルトの名無しさん (ワッチョイ 49ea-gIXh)
2020/05/18(月) 09:37:16.62ID:pauZM8r90 Dictionary<string, int>
でよくね?
でよくね?
754デフォルトの名無しさん (ワッチョイ 2b2c-2D9n)
2020/05/18(月) 09:47:52.23ID:OpjsybgA0 Addするときについでに数えるならDictionary<stirng, int>
完成したList<string>を数えるならGroupBy()をそれぞれCount()
完成したList<string>を数えるならGroupBy()をそれぞれCount()
755デフォルトの名無しさん (アウアウウー Sa1d-/iGY)
2020/05/18(月) 10:12:42.88ID:W1RwdSEUa そういうのは集計対象データがDBに入ってるケースが殆どだから、最初からSQLでやっちゃうのが一番スマート
756デフォルトの名無しさん (アウアウエー Sa93-jstM)
2020/05/18(月) 10:54:25.11ID:vuzvZUyca >>753-755
ありがとうございます
>>753,754
Dictionaryを使う場合、stringに文字列、intに件数
追加する際にContainsKeyで重複確認
存在しなければ[ABCD, 1]で追加、存在すればintを+1
こんな感じでしょうか?
>>754
ListでGroupBy()、Count()を使用したい場合、List追加時に
{ no = 1, name = "A", grade = 3 }のような形式で追加する必要があると思っているのですが
単純なList.Add(str)でもGroupBy()等が使えるのでしょうか?
ググった中では上記の例しか見つけられずここに質問に参りました
>>755
SQLなら良かったんですが、テキストファイルをDB取込用に変換する時点のお話なんです…
ありがとうございます
>>753,754
Dictionaryを使う場合、stringに文字列、intに件数
追加する際にContainsKeyで重複確認
存在しなければ[ABCD, 1]で追加、存在すればintを+1
こんな感じでしょうか?
>>754
ListでGroupBy()、Count()を使用したい場合、List追加時に
{ no = 1, name = "A", grade = 3 }のような形式で追加する必要があると思っているのですが
単純なList.Add(str)でもGroupBy()等が使えるのでしょうか?
ググった中では上記の例しか見つけられずここに質問に参りました
>>755
SQLなら良かったんですが、テキストファイルをDB取込用に変換する時点のお話なんです…
757デフォルトの名無しさん (ワッチョイ ab33-2pxY)
2020/05/18(月) 11:32:45.53ID:JFOczdfW0 >>756
こんな感じでいけるんでね?
var result = list.GroupBy(x => x)
.Select(x => new { Name = x.Key, Count = x.Count() });
こんな感じでいけるんでね?
var result = list.GroupBy(x => x)
.Select(x => new { Name = x.Key, Count = x.Count() });
758デフォルトの名無しさん (アウアウエー Sa93-jstM)
2020/05/18(月) 12:26:33.79ID:vuzvZUyca759デフォルトの名無しさん (ワッチョイ cf61-gjhq)
2020/05/18(月) 12:47:51.68ID:p81iujaQ0 >>757
Selectいる?
Selectいる?
760デフォルトの名無しさん (ワッチョイ 7f2c-JcAG)
2020/05/18(月) 13:58:26.81ID:MslK9QoT0 Ruby なら、
ary = %w(あ 12 x 12 あ 12)
p ary.group_by( &:itself ).transform_values( &:size )
出力
{"あ"=>2, "12"=>3, "x"=>1}
ary = %w(あ 12 x 12 あ 12)
p ary.group_by( &:itself ).transform_values( &:size )
出力
{"あ"=>2, "12"=>3, "x"=>1}
761デフォルトの名無しさん (ワッチョイ ab33-2pxY)
2020/05/18(月) 14:32:21.18ID:JFOczdfW0 >>759
無しでも書けるか
var groups = list.GroupBy(x => x);
foreach (var g in groups)
{
Console.WriteLine("{0} {1}件", g.Key, g.Count());
}
無しでも書けるか
var groups = list.GroupBy(x => x);
foreach (var g in groups)
{
Console.WriteLine("{0} {1}件", g.Key, g.Count());
}
762760 (ワッチョイ 7f2c-JcAG)
2020/05/18(月) 15:54:33.15ID:MslK9QoT0 Ruby なら、x => x
などのラムダ式も、
&:itself などのメソッド名を渡すだけで良い
などのラムダ式も、
&:itself などのメソッド名を渡すだけで良い
763デフォルトの名無しさん (ワッチョイ 7b02-gIXh)
2020/05/18(月) 22:54:28.02ID:/IMIPkUF0 >>762
Sapphireならどう出る?
Sapphireならどう出る?
764デフォルトの名無しさん (ワッチョイ a72c-MWp5)
2020/05/18(月) 23:51:04.74ID:TSImRkOU0 >>761
ごめん素朴な疑問なんだけど、そのCount()の使い方だと、イテレータの評価が毎回全周するわけにはならんのん?
ごめん素朴な疑問なんだけど、そのCount()の使い方だと、イテレータの評価が毎回全周するわけにはならんのん?
765デフォルトの名無しさん (ワッチョイ 2b2c-2D9n)
2020/05/19(火) 00:00:16.03ID:QbrDO9YB0 ならないよ
GroupByでキャッシュされる
GroupByでキャッシュされる
766デフォルトの名無しさん (ワッチョイ ff01-vB/y)
2020/05/19(火) 00:32:37.22ID:1Pn0Xhkl0 キャッシュ?
767デフォルトの名無しさん (ワッチョイ 8902-aUbQ)
2020/05/19(火) 00:46:42.98ID:7LUV0pB00768デフォルトの名無しさん (ワッチョイ 2b2c-2D9n)
2020/05/19(火) 00:51:43.48ID:QbrDO9YB0 とりあえず自分はCount()のたびに
list.GetEnuemrable().GetEnumerator()が呼び出されることと受け取った
list.GetEnuemrable().GetEnumerator()が呼び出されることと受け取った
769デフォルトの名無しさん (ワッチョイ 2b2c-2D9n)
2020/05/19(火) 00:53:42.34ID:QbrDO9YB0 あ違う
Count()のたびにlist.GetEnumerator()からの列挙が、だな
Count()のたびにlist.GetEnumerator()からの列挙が、だな
770デフォルトの名無しさん (ワッチョイ ff01-vB/y)
2020/05/19(火) 01:21:07.22ID:1Pn0Xhkl0 var groups = list.GroupBy(x => x); のgroupsはIEnumerable<IGrouping<string, string>>
foreach (var g in groups) のgはIGrouping<string, string>
IGrouping<T>に対するCount()はEnumerable.Count()が呼ばれる
IGrouping<T>にICollection<T>やICollectionは実装されてないから
Enumerable.Count()が呼ばれるとGetEnumerator()使って数えるんじゃないかな
(各グループごとにグループ内の要素数分だけMoveNext()が呼ばれるイメージ)
foreach (var g in groups) のgはIGrouping<string, string>
IGrouping<T>に対するCount()はEnumerable.Count()が呼ばれる
IGrouping<T>にICollection<T>やICollectionは実装されてないから
Enumerable.Count()が呼ばれるとGetEnumerator()使って数えるんじゃないかな
(各グループごとにグループ内の要素数分だけMoveNext()が呼ばれるイメージ)
771デフォルトの名無しさん (ワッチョイ ff01-vB/y)
2020/05/19(火) 01:36:28.09ID:1Pn0Xhkl0 試してみたらg as ICollection<string>で変換できたので
Count()はGetEnumeratorされてなさそう
Count()はGetEnumeratorされてなさそう
772デフォルトの名無しさん (ワッチョイ afad-uRPb)
2020/05/19(火) 01:50:25.74ID:PNm9d/ci0 await Task.Factory.StartNew(
() => {
for (int i = 0; i < imageList.Count; i++)
{
Clipboard.SetImage(imageList[i]);
}
},
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext()
);
こんな感じで画像のリストを1つ1つクリップボードにコピーさせていくのですが
タスクでSTAスレッドで処理をするとUIのメインスレッドがフリーズするのですがフリーズ回避はどうしたらいいですか?
() => {
for (int i = 0; i < imageList.Count; i++)
{
Clipboard.SetImage(imageList[i]);
}
},
CancellationToken.None,
TaskCreationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext()
);
こんな感じで画像のリストを1つ1つクリップボードにコピーさせていくのですが
タスクでSTAスレッドで処理をするとUIのメインスレッドがフリーズするのですがフリーズ回避はどうしたらいいですか?
773デフォルトの名無しさん (テテンテンテン MM17-/iGY)
2020/05/19(火) 02:02:02.85ID:Gmm+b2VzM 単に Clipboard.SetImage(imageList.Last()) にすればいい
等価だ
等価だ
774デフォルトの名無しさん (ワッチョイ 7f2c-JcAG)
2020/05/19(火) 08:52:42.15ID:NuzKkPrj0 クリップボードみたいなユーザーよりの機能は、
バックグラウンドスレッドから、アクセスできるかな?
ひょっとしたら、UI(メイン)スレッドからしか、アクセスできないかも?
バックグラウンドスレッドから、アクセスできるかな?
ひょっとしたら、UI(メイン)スレッドからしか、アクセスできないかも?
775デフォルトの名無しさん (ワッチョイ a72c-MWp5)
2020/05/19(火) 09:39:08.13ID:uON0wt840 >>770
764だけどなるほど、ありがとう
764だけどなるほど、ありがとう
776デフォルトの名無しさん (ワッチョイ 5b84-57Gp)
2020/05/19(火) 17:49:11.24ID:+0P+K8Fq0 >>772
STAスレッド(Formのスレッド?)で処理していたらUIの更新が行えないので
正しい動作かな
ClipboardクラスはSTAでしか動かないってなっているので、asyncメソッドでtaskを
実行してdelegate経由のinvokeで呼び出すんじゃないかな
STAスレッド(Formのスレッド?)で処理していたらUIの更新が行えないので
正しい動作かな
ClipboardクラスはSTAでしか動かないってなっているので、asyncメソッドでtaskを
実行してdelegate経由のinvokeで呼び出すんじゃないかな
777デフォルトの名無しさん (ワッチョイ 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
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
778デフォルトの名無しさん (ワッチョイ ebfd-4TjA)
2020/05/19(火) 18:32:12.04ID:mepgGg800 vb.netとc#の大きな違いってなんでしょうか
仕事で後者を触らないといけないんですが
仕事で後者を触らないといけないんですが
779デフォルトの名無しさん (アウアウエー Sa93-ahgx)
2020/05/19(火) 18:34:15.56ID:h69Ba80Ra vb.net うれしくない
C# どちらでもない
C# どちらでもない
780デフォルトの名無しさん (ワッチョイ 17f1-8kLo)
2020/05/19(火) 18:49:46.90ID:DkycvRhf0 >>777
ハゲとるやないか
ハゲとるやないか
781デフォルトの名無しさん (ワッチョイ 3d01-gIXh)
2020/05/19(火) 19:07:11.03ID:klHbQUiE0 >>778
開発終了と開発続行
開発終了と開発続行
782デフォルトの名無しさん (オッペケ Sra5-4TjA)
2020/05/19(火) 19:56:29.83ID:FEuqCu/Yr そんなに大きく違いますか?
文法書見てる感じではそこまで大きな差はないなかな、と思ったりしてますが
文法書見てる感じではそこまで大きな差はないなかな、と思ったりしてますが
783デフォルトの名無しさん (ワッチョイ 6b63-S0xs)
2020/05/19(火) 20:07:13.61ID:T11FGKSX0 >>782
どっちも.NETベースだから基本は大して変わらんけどC#のほうが長続きしてるのでVB.NETにない新しい言語機能がいろいろある
どっちも.NETベースだから基本は大して変わらんけどC#のほうが長続きしてるのでVB.NETにない新しい言語機能がいろいろある
784デフォルトの名無しさん (ワッチョイ 3bad-fRvC)
2020/05/19(火) 20:40:43.92ID:a0TVrn2w0 >>782
リソースが段違い
リソースが段違い
785デフォルトの名無しさん (アウアウウー Sa31-L7FI)
2020/05/19(火) 20:48:48.06ID:Hcak2SNoa >>782
あんまり意味のある質問に思えないんだけどw
あんまり意味のある質問に思えないんだけどw
786デフォルトの名無しさん (アウアウウー Saaf-Wcp/)
2020/05/19(火) 20:49:42.54ID:jcXcpHtca >>782
言語仕様はほぼ一緒なんだけど使い手のレベルとか文化とかに雲泥の差が
控えめに言ってVBしかできないような人は20世紀から取り残されたゴミみたいな開発者が大半
BASICの歴史的な経緯からくる負の遺産、いままでに蓄積されたクソコードもてんこ盛り
VBに関わるとダメプログラマに転落するぞ
といいつつC#でも下手するとVS2005〜2008位で時間が止まったままの案件も結構あるけどな
そういう現場にどっぷり漬かるとVBでもC#でもダメエンジニアへの道まっしぐらだ
言語仕様はほぼ一緒なんだけど使い手のレベルとか文化とかに雲泥の差が
控えめに言ってVBしかできないような人は20世紀から取り残されたゴミみたいな開発者が大半
BASICの歴史的な経緯からくる負の遺産、いままでに蓄積されたクソコードもてんこ盛り
VBに関わるとダメプログラマに転落するぞ
といいつつC#でも下手するとVS2005〜2008位で時間が止まったままの案件も結構あるけどな
そういう現場にどっぷり漬かるとVBでもC#でもダメエンジニアへの道まっしぐらだ
787デフォルトの名無しさん (ブーイモ MM81-DBEz)
2020/05/19(火) 20:55:05.94ID:1ZWHWWZ0M っていうか言語で出来ることが変わるとか制限あるのがおかしい
日本語の「ツンデレ」を訳せる言語が無いとかそういうレベルと違う
日本語の「ツンデレ」を訳せる言語が無いとかそういうレベルと違う
788デフォルトの名無しさん (ワッチョイ 3fac-5iCk)
2020/05/19(火) 20:57:59.68ID:HSamcFUd0 VBはちょっと。。
言語もだけど、書く人の頭が古いからコードまで至るところで古さを感じる
多重for、ifとかそんなレベルで
VB現役でやってる人でもすごい人はいるんだろうけど、稀有やろなあ
言語もだけど、書く人の頭が古いからコードまで至るところで古さを感じる
多重for、ifとかそんなレベルで
VB現役でやってる人でもすごい人はいるんだろうけど、稀有やろなあ
789デフォルトの名無しさん (ワッチョイ 3f6a-gIXh)
2020/05/19(火) 21:07:44.17ID:+YYtOpaV0 VBの言語仕様はラムダ式とかクロージャと相性が悪い
790デフォルトの名無しさん (ワッチョイ d978-gIXh)
2020/05/19(火) 21:11:51.54ID:nVxChFQF0 C# と VB.NET、同じコード書いても IL レベルで見るとVB.NET側にゴミが付くんだよな
791デフォルトの名無しさん (ワッチョイ 55da-N57e)
2020/05/19(火) 21:23:56.06ID:u8EJQdwC0 C#とVB.NETどっちも選べる状態でVB.NET選んでる人やプロジェクトってどれくらいあるんかな?
792デフォルトの名無しさん (ワッチョイ d390-6tiU)
2020/05/19(火) 22:18:57.18ID:KmzCw2hp0 数年前に作られたVB.NETのWebシステム知ってる
オフショアで作らせたら動く粗大ゴミが誕生したと聞いた
詳しくは知らんが
オフショアで作らせたら動く粗大ゴミが誕生したと聞いた
詳しくは知らんが
793デフォルトの名無しさん (アウアウウー Sac7-RnIb)
2020/05/20(水) 06:51:50.32ID:AQWueC8Ga 自分が作ってるツールはexcel操作する場合
いつもvb.netで書いてしまうわ
いつもvb.netで書いてしまうわ
794デフォルトの名無しさん (ワッチョイ 8b01-xuiy)
2020/05/20(水) 07:03:39.27ID:lHd0Mfby0 VBはC#より稀に先進的な記述方法がある
行末に;要らないとか
つかC#もそうして欲しい
簡単だろ
行末に;要らないとか
つかC#もそうして欲しい
簡単だろ
795デフォルトの名無しさん (アウアウウー Sac7-tPY3)
2020/05/20(水) 07:05:09.78ID:QEwx4hM4a C#で書いてると、たまにVB使うとエンターキーの違いでイラっとくるわ
796デフォルトの名無しさん (ワッチョイ 8b01-xuiy)
2020/05/20(水) 07:11:31.80ID:lHd0Mfby0 VBに限っては改修業務が良い
新規でVBとか考えたくない
新規でVBとか考えたくない
797デフォルトの名無しさん (ワッチョイ 5bf1-D4L3)
2020/05/20(水) 10:16:35.82ID:qjNDk5Cx0 エンターキーの違いとは?
798デフォルトの名無しさん (ワッチョイ c74e-no6W)
2020/05/20(水) 12:59:08.46ID:nNq7q5wW0 public Class MyCustomForm : Form
という自作の拡張Formクラスを作り、コンストラクタで色やいくつかのコントロールを配置したものをメインのForm1で継承させ、コンパイルも上手くいき実際の動作も希望通りではあるのですが、
上記のMyCustomFormのコンストラクタ内で追加したコントロールがデザイナで編集することができません。
まるで背景画像かのように選択すら出来ないものや、選択こそ出来てもAutoSizeやLocationなどの項目が灰色掛かって編集不可能になっていたりします。
InitializeComponent()以外で追加したコントロールをデザイナ上で操作することは不可能なのでしょうか?
という自作の拡張Formクラスを作り、コンストラクタで色やいくつかのコントロールを配置したものをメインのForm1で継承させ、コンパイルも上手くいき実際の動作も希望通りではあるのですが、
上記のMyCustomFormのコンストラクタ内で追加したコントロールがデザイナで編集することができません。
まるで背景画像かのように選択すら出来ないものや、選択こそ出来てもAutoSizeやLocationなどの項目が灰色掛かって編集不可能になっていたりします。
InitializeComponent()以外で追加したコントロールをデザイナ上で操作することは不可能なのでしょうか?
799デフォルトの名無しさん (ワッチョイ 2702-crVl)
2020/05/20(水) 13:29:58.53ID:ABO4MomS0 VBで作ったシステムをVB.NETに移植しようとしたが
あまりも超絶スパゲッティだったのでほぐしたら
最終的にコード量が1/4になった事がある
あまりも超絶スパゲッティだったのでほぐしたら
最終的にコード量が1/4になった事がある
800デフォルトの名無しさん (ワッチョイ 3761-crVl)
2020/05/20(水) 13:51:44.57ID:AVjmh1IR0 VB6で長年熟成された秘伝のソースをぽっと出のVB.netごときで再現できるわけがない
801デフォルトの名無しさん (オッペケ Srbb-jY78)
2020/05/20(水) 14:39:55.33ID:JM16LRl0r https://pc.watch.impress.co.jp/docs/news/1253193.html
Microsoft、Win32とUWPの2つのAPIを再統合する「Project Reunion」
Microsoft、Win32とUWPの2つのAPIを再統合する「Project Reunion」
802デフォルトの名無しさん (アウアウエー Sa52-NLVI)
2020/05/20(水) 14:41:38.06ID:mXqWoGfUa VBのツールいまだに動くからリプレイスする意味ない
放置が安全
放置が安全
803デフォルトの名無しさん (ワッチョイ 8b01-oW4g)
2020/05/20(水) 16:24:15.65ID:wnqJe1lz0 プロジェクト・リュニオン!
ゴー!リュニオン!
ゴー!リュニオン!
804デフォルトの名無しさん (ワッチョイ 6301-UYz0)
2020/05/20(水) 16:27:54.60ID:kLEW4Vt90 >>801
眩暈がして来た
眩暈がして来た
805デフォルトの名無しさん (アウアウウー Sac7-lIs9)
2020/05/20(水) 18:05:51.93ID:e2MEnn77a 要するに5年ぐらい前に言ってたはずの「Win32を全廃してUWPで一本化する」計画は
諦めたってこと?
まああの話も一瞬出ただけでその後まったく聞かなくなってたけど
>>798
アクセスレベルがprivateになってるとかではなくて?
っていうか、もしコントロールをユーザーコードで追加している場合だけ起こる(デザイナで追加した場合は起こらない)
問題だと分かっているなら変なこだわりを捨てればよいだけなのでは?
まあバグでプロパティがいじれないコントロールも一部あるらしい
https://teratail.com/questions/236012
諦めたってこと?
まああの話も一瞬出ただけでその後まったく聞かなくなってたけど
>>798
アクセスレベルがprivateになってるとかではなくて?
っていうか、もしコントロールをユーザーコードで追加している場合だけ起こる(デザイナで追加した場合は起こらない)
問題だと分かっているなら変なこだわりを捨てればよいだけなのでは?
まあバグでプロパティがいじれないコントロールも一部あるらしい
https://teratail.com/questions/236012
806デフォルトの名無しさん (オッペケ Srbb-yNr9)
2020/05/20(水) 18:40:47.31ID:t37lmoTKr デザイナはわりと属性見てるので、その辺ちゃんとやっとかないとうまくいかないことがある
807デフォルトの名無しさん (ワッチョイ 9763-xLuj)
2020/05/20(水) 19:08:47.13ID:2OJQAkVy0 リユニオンとか真っ黒になりそう
808デフォルトの名無しさん (ワッチョイ 8b01-oW4g)
2020/05/20(水) 20:43:28.09ID:wnqJe1lz0 トレイン変形!ゴー!リュニオン!
809デフォルトの名無しさん (ワッチョイ 9a01-hY51)
2020/05/21(木) 04:25:59.16ID:ShhpHDma0 winフォームアプリなのですが、Form1上のtextBox1に他クラスからアクセスしたい時って
Form1.Designer.csの下の方にあるフィールドをpublicに変えるのはよくない例ですか?
Form1のコンストラクタで自分自身を当該他クラスに引き渡す処理は済んでいます
Form1で、textBox1.TEXTをプロパティにして
他クラスからアクセスする方法も考えたんですけど、
じゃ、テキストボックスじゃなくてリストビューとかだとどうするんだとか考えたら
めんどくさいからもうpublicでいいんじゃないかとか思っちゃうんですけど
ベテランの皆さんはどうしてるんでしょうか
Form1.Designer.csの下の方にあるフィールドをpublicに変えるのはよくない例ですか?
Form1のコンストラクタで自分自身を当該他クラスに引き渡す処理は済んでいます
Form1で、textBox1.TEXTをプロパティにして
他クラスからアクセスする方法も考えたんですけど、
じゃ、テキストボックスじゃなくてリストビューとかだとどうするんだとか考えたら
めんどくさいからもうpublicでいいんじゃないかとか思っちゃうんですけど
ベテランの皆さんはどうしてるんでしょうか
810デフォルトの名無しさん (ワッチョイ 1aad-cFKA)
2020/05/21(木) 04:48:51.98ID:KUTx9pVe0 だめ
811デフォルトの名無しさん (ワッチョイ 9a01-hY51)
2020/05/21(木) 04:53:08.19ID:ShhpHDma0 >>810
はい、頑張って考えてみます
はい、頑張って考えてみます
812デフォルトの名無しさん (ワッチョイ 33a7-2bic)
2020/05/21(木) 07:23:16.29ID:iIzHpd9H0813デフォルトの名無しさん (ワッチョイ 8b01-crVl)
2020/05/21(木) 07:32:49.70ID:MQs/4XZV0 ボタン継承して新しいの作れば
814デフォルトの名無しさん (ワッチョイ 8b01-crVl)
2020/05/21(木) 07:33:55.89ID:MQs/4XZV0 あっtextboxか
815デフォルトの名無しさん (アウアウウー Sac7-anYt)
2020/05/21(木) 08:59:55.50ID:9RboWam4a internal でよくね?
816デフォルトの名無しさん (アウアウウー Sac7-lIs9)
2020/05/21(木) 11:45:51.28ID:LNx85Gx+a >>811
頑張って考えるまでもない。
XがFormを参照するんじゃなくて、FormがXを参照するように変えるだけ。
なぜUIの更新なんていう猿仕事を他のクラスにやらせようとするの?
それはUI自身の仕事だよ。
頑張って考えるまでもない。
XがFormを参照するんじゃなくて、FormがXを参照するように変えるだけ。
なぜUIの更新なんていう猿仕事を他のクラスにやらせようとするの?
それはUI自身の仕事だよ。
817デフォルトの名無しさん (ワッチョイ 9a01-hY51)
2020/05/21(木) 14:57:27.90ID:ShhpHDma0 >>812
誘惑にかられますわ
>>813-815
カスタムコントロールとかですか?
ググっていろいろ調べたんですけど面白そうですねこれ
今回の用途にどう使うのかについてはまだ理解できてないですけど
継承ってこういうことに使うんですね
>>816
つまり、他クラスからForm1のtextBox1に書き込む仕様自体がおかしいってことですか
Form1から他クラスに仕事させて、結果をForm1で受けとってForm1からtextBox1に書き込むべきという理解でよいですか
確かにそうですね
他クラスから書き込むとForm1のコードがスッキリするので気に入ってたんですけどよくないってことですね
他クラスの汎用性を奪っているとも言えますね
誘惑にかられますわ
>>813-815
カスタムコントロールとかですか?
ググっていろいろ調べたんですけど面白そうですねこれ
今回の用途にどう使うのかについてはまだ理解できてないですけど
継承ってこういうことに使うんですね
>>816
つまり、他クラスからForm1のtextBox1に書き込む仕様自体がおかしいってことですか
Form1から他クラスに仕事させて、結果をForm1で受けとってForm1からtextBox1に書き込むべきという理解でよいですか
確かにそうですね
他クラスから書き込むとForm1のコードがスッキリするので気に入ってたんですけどよくないってことですね
他クラスの汎用性を奪っているとも言えますね
818デフォルトの名無しさん (ワッチョイ 9a01-hY51)
2020/05/21(木) 15:28:29.26ID:ShhpHDma0 >>813-815
なんとなく分かりました
public partial class CustomTextBox1 : TextBox
こうやって定義してから、このクラスに処理のためのメソッドをおくとともに
自分自身のTextプロパティに書き込むようにしておく
で、このメソッドをForm1から呼んで処理させればボックスに書き込むことができるっていうことですね
あー勉強になりました
なんとなく分かりました
public partial class CustomTextBox1 : TextBox
こうやって定義してから、このクラスに処理のためのメソッドをおくとともに
自分自身のTextプロパティに書き込むようにしておく
で、このメソッドをForm1から呼んで処理させればボックスに書き込むことができるっていうことですね
あー勉強になりました
819デフォルトの名無しさん (ワッチョイ 9a01-hY51)
2020/05/21(木) 15:32:59.43ID:ShhpHDma0820デフォルトの名無しさん (ワッチョイ 0e84-BCZG)
2020/05/21(木) 17:41:35.31ID:66n7MLhy0 >>809
やり方は人それぞれなので何が良いとかないと思うけど、デザイナで操作できる
ところはデザイナで操作したほうが良いと思うよ
Designer.csをいじっても結果は同じなんだけど、おかしなコードを書くとデザイナの
挙動がおかしくなったりしてイランことに時間がかかったりするから
やり方は人それぞれなので何が良いとかないと思うけど、デザイナで操作できる
ところはデザイナで操作したほうが良いと思うよ
Designer.csをいじっても結果は同じなんだけど、おかしなコードを書くとデザイナの
挙動がおかしくなったりしてイランことに時間がかかったりするから
821デフォルトの名無しさん (スッップ Sdba-6rFm)
2020/05/21(木) 17:47:51.10ID:LaJH1wCvd 見掛けは同じように見えても、改行コードのせいでエラー吐いてたプロジェクトをなんとかしてくれと依頼されたことがある
822デフォルトの名無しさん (ワッチョイ 3761-crVl)
2020/05/21(木) 18:45:11.84ID:/Pr2yAaR0823デフォルトの名無しさん (ワッチョイ 2702-crVl)
2020/05/21(木) 18:58:27.14ID:MVvwgJKT0 空っぽのイベントハンドラを一発で消去する消去する方法は無いのでしょうか?
824デフォルトの名無しさん (ワッチョイ 6301-UYz0)
2020/05/21(木) 19:17:33.27ID:n40K1Wl40 日本語でOK
825デフォルトの名無しさん (ワッチョイ 9a01-hY51)
2020/05/21(木) 19:27:16.30ID:ShhpHDma0826デフォルトの名無しさん (アウアウウー 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現在のその他欄入力値()
とか言った感じで
自分だったらForm1クラスにpublic(or internal)なメソッドを作って、
メソッド名をTextBoxにアクセスする目的を明確に表す名前にする
たとえば、
void set合計金額Text(int price, Color textColor) { }
string get現在のその他欄入力値()
とか言った感じで
827デフォルトの名無しさん (アウアウウー Sac7-vdj3)
2020/05/21(木) 22:49:45.68ID:y7fmuH5Aa あ、小文字始まりでJavaのsetter/getterみたいにしちゃったけどC#なら当然大文字始まり
受け取りたい項目が複数、例えポップアップ表示ダイアログの各項目の入力値を取り出すなら、
入力値を詰め込むInputValuesクラスとかを定義したうえで、
InputValues GetInputValues() { }
みたいなメソッドを作って入力値をオブジェクトで扱いやすくして返すようにする
受け取りたい項目が複数、例えポップアップ表示ダイアログの各項目の入力値を取り出すなら、
入力値を詰め込むInputValuesクラスとかを定義したうえで、
InputValues GetInputValues() { }
みたいなメソッドを作って入力値をオブジェクトで扱いやすくして返すようにする
828デフォルトの名無しさん (ワッチョイ 6301-UYz0)
2020/05/21(木) 22:58:08.80ID:n40K1Wl40 インデクサー作った方がスマートかな?
public var this[int i]
public var this[int i]
829デフォルトの名無しさん (ワッチョイ 33a7-2bic)
2020/05/21(木) 23:13:48.54ID:iIzHpd9H0 >>826
やめろやめろ
そんなバカなことなれて
コントロールが300個とかあるときどうするんだ
〜するべきとかそもそも元の造りがそんなふうになってないことのが多いのに
無駄なラッピングなんてするべきじゃない
想定するならそれが1000個あるときそれをやってられるかどうかを想定しろ
そもそも少数ならアクセス方法なんてどうだっていいだろ?
想定してるのは大量にある時なんだよね?
やめろやめろ
そんなバカなことなれて
コントロールが300個とかあるときどうするんだ
〜するべきとかそもそも元の造りがそんなふうになってないことのが多いのに
無駄なラッピングなんてするべきじゃない
想定するならそれが1000個あるときそれをやってられるかどうかを想定しろ
そもそも少数ならアクセス方法なんてどうだっていいだろ?
想定してるのは大量にある時なんだよね?
830デフォルトの名無しさん (ワッチョイ ba52-NhWw)
2020/05/21(木) 23:54:34.06ID:VEFS25bE0 >>829
何で勝手に膨大な数のコントロールがある前提なんだ?
質問者はそんなこと全く言ってないし、読んだ限りでは初心者が小規模なプログラムを作ってる可能性の方が高そうだ。
そういう相手に実務上の仕方なくやる汚いやり方を教えるより、場合によっては理想論になるかもしれないが基本的に良いとされる考え方をまず教えた方がいいだろう。
何で勝手に膨大な数のコントロールがある前提なんだ?
質問者はそんなこと全く言ってないし、読んだ限りでは初心者が小規模なプログラムを作ってる可能性の方が高そうだ。
そういう相手に実務上の仕方なくやる汚いやり方を教えるより、場合によっては理想論になるかもしれないが基本的に良いとされる考え方をまず教えた方がいいだろう。
831デフォルトの名無しさん (アウアウウー Sac7-vdj3)
2020/05/22(金) 00:00:35.63ID:2K6mKaTxa ???
おおもとの>>809では対象はtextBox1の一つだけみたいだけど
でこれがTextBoxからListViewに変わったときとかの話はあるけど
対象項目が大量なんて前提はどこから湧いてきたんだっけ?
というか1画面にコントロールが300個とか1000個とか配置されてて、
全部publicフィールドになってて、法則性もなくあらゆるコントロールに無尽蔵にアクセスする
なんて、その時点でソースから腐臭が漂ってるよ
そこまで酷い状態になってるなら諦めて全部publicにするしかないでしょう
後日メンテナンスしなきゃならないときの影響調査で死ぬだろうけど
おおもとの>>809では対象はtextBox1の一つだけみたいだけど
でこれがTextBoxからListViewに変わったときとかの話はあるけど
対象項目が大量なんて前提はどこから湧いてきたんだっけ?
というか1画面にコントロールが300個とか1000個とか配置されてて、
全部publicフィールドになってて、法則性もなくあらゆるコントロールに無尽蔵にアクセスする
なんて、その時点でソースから腐臭が漂ってるよ
そこまで酷い状態になってるなら諦めて全部publicにするしかないでしょう
後日メンテナンスしなきゃならないときの影響調査で死ぬだろうけど
832デフォルトの名無しさん (アウアウエー Sa52-NLVI)
2020/05/22(金) 01:09:32.35ID:xIO0+KZFa833デフォルトの名無しさん (アウアウウー Sac7-lIs9)
2020/05/22(金) 01:10:19.16ID:mKnPmupma834デフォルトの名無しさん (ワッチョイ b6de-2bic)
2020/05/22(金) 01:25:23.44ID:HA9eXiUk0835デフォルトの名無しさん (ワッチョイ 97de-2bic)
2020/05/22(金) 01:29:28.72ID:tRHrER1d0836デフォルトの名無しさん (アウアウウー Sac7-lIs9)
2020/05/22(金) 01:35:16.74ID:mKnPmupma837デフォルトの名無しさん (ワッチョイ b6de-2bic)
2020/05/22(金) 01:38:59.95ID:bg8HuHxQ0 >>836
publicにするのの何が駄目なん?
publicにするのの何が駄目なん?
838デフォルトの名無しさん (アウアウウー Sac7-lIs9)
2020/05/22(金) 01:47:55.06ID:mKnPmupma >>837
だから、それって「どうしてカプセル化なんて必要なの?」って聞いてるのと同じだよw
カプセル化が重要なのは人間の脳が複雑性に対して脆弱だから。
だから必要な物だけ見せてそうでないものは見せないことによって複雑性を減らす必要がある。
例外はあるが、基本的にはUIはメンバーを外部に公開する必要がない。
表示を更新するのも、ユーザー入力をモデルに伝達するのも全部それはUIの仕事。
それを他人にやらせようとする発想が根本的に間違っている
だから、それって「どうしてカプセル化なんて必要なの?」って聞いてるのと同じだよw
カプセル化が重要なのは人間の脳が複雑性に対して脆弱だから。
だから必要な物だけ見せてそうでないものは見せないことによって複雑性を減らす必要がある。
例外はあるが、基本的にはUIはメンバーを外部に公開する必要がない。
表示を更新するのも、ユーザー入力をモデルに伝達するのも全部それはUIの仕事。
それを他人にやらせようとする発想が根本的に間違っている
839デフォルトの名無しさん (ワッチョイ dbde-2bic)
2020/05/22(金) 01:54:29.41ID:sv4o2LUU0840デフォルトの名無しさん (アウアウウー Sac7-VIJV)
2020/05/22(金) 08:35:08.41ID:JafM55Gga841デフォルトの名無しさん (アウアウウー Sac7-anYt)
2020/05/22(金) 09:03:50.95ID:7ltZImPja UIスレッド以外のスレッドから操作されると危険だよね、単純にコントロールを公開すると。
842デフォルトの名無しさん (ワッチョイ 9a02-crVl)
2020/05/22(金) 09:10:28.54ID:VBq+8Qqi0 そう。後悔することになる。
843デフォルトの名無しさん (アウアウウー Sac7-TxaJ)
2020/05/22(金) 09:49:54.76ID:+j//r/2da 全部private readonlyにしろ
844デフォルトの名無しさん (ワッチョイ 3761-crVl)
2020/05/22(金) 10:09:40.93ID:ImtqKYD30 コントロールに直接アクセスを許すんじゃなくて根っこにあるデータへのアクセスを許すようにしとけばいいんじゃね?
コントロールとデータはBindingしてんだからそれでいいだろ
コントロールとデータはBindingしてんだからそれでいいだろ
845デフォルトの名無しさん (ワッチョイ 1b8c-crVl)
2020/05/22(金) 10:15:33.46ID:NtcwyNbz0 WinFormsだからバインディングはしてないとおもう
846デフォルトの名無しさん (ワッチョイ 0301-f9J/)
2020/05/22(金) 10:20:34.04ID:+ec+XM8b0 >>833
現実的に問題解決の方法が知りたい
現実的に問題解決の方法が知りたい
847デフォルトの名無しさん (アウアウウー Sac7-8pht)
2020/05/22(金) 10:32:58.69ID:I4qPJ3i7a >>841
それはフォームにメンバを追加してラップしたところで解決にならん
フォーム自身がコントロールとして元々持っている大量のメンバはどうするんだ?
もしスレッドセーフにしたいのならフォーム自体も公開してはいけない
それはフォームにメンバを追加してラップしたところで解決にならん
フォーム自身がコントロールとして元々持っている大量のメンバはどうするんだ?
もしスレッドセーフにしたいのならフォーム自体も公開してはいけない
848デフォルトの名無しさん (アウアウウー Sac7-lIs9)
2020/05/22(金) 12:22:25.06ID:/6UQkCjLa >>846
そんな大げさな話?
コントロールへのアクセスはFormの仕事だから他人にやらせようとせずにForm自身にやらせろと言っている。
これのどこがそんな難しい話?
ファミレスで客が厨房に乗り込んで注文出さないのと同じことだよ
注文を受けるのはウェイトレスの仕事
パスタの担当が厨房の佐藤さんであることを客が知ってないとナポリタンの注文を
出せなようなファミレスにあんた行きたいか?w
そんな大げさな話?
コントロールへのアクセスはFormの仕事だから他人にやらせようとせずにForm自身にやらせろと言っている。
これのどこがそんな難しい話?
ファミレスで客が厨房に乗り込んで注文出さないのと同じことだよ
注文を受けるのはウェイトレスの仕事
パスタの担当が厨房の佐藤さんであることを客が知ってないとナポリタンの注文を
出せなようなファミレスにあんた行きたいか?w
849デフォルトの名無しさん (アウアウウー Sac7-VIJV)
2020/05/22(金) 12:30:46.95ID:JafM55Gga850デフォルトの名無しさん (ブーイモ 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が結合していても基本的な機能を抽象化しておくと後々のメンテナンスが楽になる
このような自クラス内部に向けて抽象化された安全なインターフェースを提供する開発手法を自己カプセル化と言う
MVVM、MVU、MVCの場合はVの機能をV以外に公開することは滅多にない
MVPでは逆にVの基本的な機能をインターフェースで抽象化して積極的にPに公開してコントロールを委ねる
Formの主力アーキテクチャはどうなっているかというとMVPのVPが結合した怠惰なアーキテクチャになってる場合が非常に多い
丁寧に作るならPに書くべきコードが手抜きされてVのFormイベントに書かれてしまっている状態
VPが結合してるからprivateなコントロールを抽象化しなくてもアクセスすることはできる
しかしそれでは規模が大きくなるほどメンテナンスしにくくなる
VPが結合していても基本的な機能を抽象化しておくと後々のメンテナンスが楽になる
このような自クラス内部に向けて抽象化された安全なインターフェースを提供する開発手法を自己カプセル化と言う
851デフォルトの名無しさん (ワッチョイ 072c-QPgs)
2020/05/22(金) 13:17:57.12ID:F9tTEKoS0 規模が小さい練習用のアプリなら>>826 の言ってるように組むと思うけどな。なにが問題なんだ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★9 [BFU★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- 陸上自衛隊(ちん毛ファイヤー 薬莢拾い シゴキ♂ アットホームな職場です 日帝精神を受け継いでます)ネトウヨが入らない理由 [165981677]
- 娘の名前を「早苗」にしようと思うんだが
- やばいずっとスマホいじってても寂しいわ話そうよ
- お前らのレスが読めん
- 【ぺこ専🐰】なんG 兎田ぺこら突発配信実況スレ🏡【ホロライブ▶】
