ふらっと C#,C♯,C#(初心者用) Part145
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980 を踏んだ人は新スレを建てて下さい。>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part144 https://mevius.5ch.net/test/read.cgi/tech/1563258983/ ■関連スレ 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 >>132 1から勉強しなおしになるでしょうか? Visual StudioでもC#を使えると思っていました >>133 社内のライセンスとセキュリティの関係でExpressしかダメと言われてしまいました >>134 質問の内容が変わっているよね VBAで作ったものはVB.Netに手直し程度で動かせるようになるものができる場合もあるけどC#は書き方も完全に別物 ここで聞くより自分のPCで動かしてみたほうが早い >>135 そこはVisual Studio Codeやろ… >>134 C#を使えないなんて言ってないよw VBAとC#は完全に別の言語だと言ってるだけ VBAの知識はC#を覚える上でほとんど役に立たないよと 用語と名付けルールについていくつか教えてください まず、class Asdf{}の入れた物(Asdf asdf; でいうasdf)は、何と呼べばいいんですか?変数でいいのでしょうか? また、Asdfの入ったものを自動プロパティで宣言したい場合、一文字めを大文字にすべきなのでしょうか? Asdf Asdf{get; set;}なのか、Asdf asdf{get; set;}なのかどちらが正しいのでしょうか >>139 Asdf asdf; のasdfは変数名でいい プロパティ名はCamelCase(先頭大文字)にするのが慣習、自動実装プロパティかどうかは無関係 >>136 失礼しました まずは色々と触ってみます >>138 早とちりしてしまいました 基本から勉強してみます ありがとうございます >>140 ありがとうございます 大文字かどうかは、クラス名とプロパティ名が一緒になってしまっていいのか結構疑問に思っていたのでスッキリしました Pythonでは文字列をコマンドとして実行するのにevalとexecの2つあるみたいですが C#で文字列をコマンドとして実行するには、eval以外の関数はありますか? subprocess.popen subprocess.call subprocess.call_hogehoge もっとあるぞ フォーム間でのデータの受け渡しを行うクールな方法を教えて下さい。 今は以下の2通りの方法ででやっています。 @互いの公開プロパティ(public get / private set)を参照しあう。 (互いに相手フォームへの参照を通じて取得するので疎結合になり切れていない) Aデータ保持用クラスを作って、そのインスタンスを参照する。 (データ保持用クラスが増えまくって、だんだん管理困難になりそう) WpfやUWPなどではDIコンテナってものを使うのが流行りだが、WindowsFormsでも存在するそうだ こっちは使ったことがないからお薦めはわからんがググって探してみるといい まあクールってことならWindowsForms捨てるのも一つだね >>149 WPFやUWP自体がほぼ全くと言っていいほど使われていないのに流行りも何も DIコンテナは主にWebで利用されるもので、デスクトップアプリではあまり使われないよ アプリの起動を遅くする原因になりやすいし、エンドユーザーにバイナリを直接配布するタイプのアプリではそもそも実装を差し替えたいというニーズ自体が稀だからね DIコンテナはこの場合関係ないのでは? 結局素直にAでやるのがいいと思う >>146 クールな方法というか堅実・定石な方法 フォーム間のデータのやり取りならA 相手のフォームに依存するとテスト時や改修時に困るでしょ 原則として相手の画面やクラスの事は知らないに越したことは無い その設計でもデータ保持用クラスの管理が大変になることは無い 管理が大変になる場合は設計がおかしい 画面遷移の組合せ数分クラス作るとかアホなことすれば大変だろうけど wpfのCheckBoxについてですが、Contentに文字を設定するとその文字の表示範囲もチェックオンオフの感知範囲になってしまいます これを無効にして純粋にチェックボックスの□のみをクリック範囲にすることはできないのでしょうか? CheckBoxのContentに文字を設定するのではなく、横にTextBlockを置くなどしないと無理でしょうか? >>154 手段としてはその通りだと思う。 しかし、あのちっさいチェックボックスに正確にマウスを当てないと反応しないってのは、 使い勝手からするとどうかと思う。誤クリックが多いというなら、そもそもの配置場所が悪い >>154 PreviewMouseDownイベントを追加して e.OriginalSourceからVisualTreeHelper.GetParent()でVisualTreeを親方向にたどっていき 途中に"checkBoxBorder"というNameのBorderがあればe.Handled=true;で無効化出来るかもしれない 出来るかもしれないが一般的にCheckBoxはテキスト部分をクリックしてもオンオフ出来るものだから その一般的な挙動を逸脱するよっぽどの理由がなければ止めておいたほうがいい >>156 >157 ありがとうございます 具体的にはListBox内にCheckBoxを配置しており、チェックとは別にListBoxから選択時に多少のインフォメーションを表示するといった形にしたいためContentも含めると誤クリックが発生してしまいます とりあえずは文字とCheckBoxは分離する方向でやってみたいと思います 先日C#を始めたものです Hello Worldを記述出来ました エクセル等のオフィスソフトに対応している初心者向けのサイトは無いでしょうか? よろしくお願いします >>161 epplusが手軽だと個人的には思う サイトはいくつかあるからググって プロパティで、StringをDateTimeのようにnull許容できるようにしたいのですが、可能でしょうか? public DateTime? test1 { get; set; } ← 可 public String? test2 { get; set; } ← 不可 DapperでDB操作してるのですが、DBゆえにnullがあるのでどうしたものかと C#8.0の新しい文法を使う意図だったら「#nullable enable」のディレクティブをつけないとnull許容参照型にならないよ そうでなければ、stringは参照型だから?をつけずとも普通にnull許容 >>162 帳票作成でC#使うなんてよくある話だろ >>168 Stringはそもそもnull許容なのですね Dapperでデータ取れないのは別の事情がありそうなので調査してみます ありがとうございます >>171 帳票作成でC#を使うこととC#でExcelを操作することはかなり違うけどな >>174 日本語が理解できないのか? > こういう意図でC#を使う人は少ないと思うからそういうサイトもあまりないのでは >>162 はその少ないサイトって話だろ… データを取得したんですが 第三正規系までできません。 こちらのデータを第三正規系にお願いします。 第一正規系はやりました。 https://i.imgur.com/RruyoYQ.png おすし名,おすしID,店舗ID,価格,データ取得日時,店舗名,おすし説明,色,分類,大きさ まぐろ赤身,MGR-0000,KRA,120,2019/10/18,くら寿司,さっぱりうまい。上出来,鮮やか,赤身,小さい まぐろ赤身,MGR-0001,SSR,110,2019/10/18,スシロー,こってりうまい。おすすめ,濃い,赤身,大きい まぐろ赤身,MGR-0002,HMZ,90,2019/10/18,はま寿司,まずい。食えたもんじゃない,汚い,赤身,小さい まぐろ赤身(漬け),MGRZ-0000,KRA,140,2019/10/18,くら寿司,漬け。さっぱりうまい。上出来,鮮やか,漬け,大きい まぐろ赤身(漬け),MGRZ-0001,SSR,130,2019/10/18,スシロー,漬け。こってりうまい。おすすめ,濃い,漬け,大きい まぐろ赤身(漬け),MGRZ-0001,HMZ,100,2019/10/18,はま寿司,漬け。まずい。食えたもんじゃない,汚い,漬け,小さい >>175 日本語理解できてないのはそっちやろ… >>174 は「帳票作成でC#を使うこととC#でExcelを操作することはかなり違う」に対する反論 >>176 このスレのタイトルを3回声に出して読んでみようか >>177 頭大丈夫? それとも > 帳票作成でC#使うなんてよくある話だろ をごまかしたくて必死なの?w >>182 鸚鵡返ししかできないならROMってりゃいいのに…w >>184 夜中までレスしてる>>182 に言ってやれよw どこもかしこもマウントレスバトルばかり なぜひとはあらそってしまうのか…sigh… しかも、内容が思いっきりくだらない マウントを取るためだけにレスをしたとしか思えないくだらなさ C#は見かけ上は一見C++に似たような顔で欺いたVBだな。 すまんが、インターフェイスとオートプロパティーとがよくわから人だけどさあ interface IPerson{string Name();} class Person : IPerson {public string Name{get=>"Taro";}} これじゃなんでIPerson.Name();を実装したことにならないの?正しくはどうすればよかんべえ? 自分で気づいて今インターフェイスをstring Name{get;}にしてみたらできた すまん、191のは無視してくれ・・・・ インターフェイスがメソッドで実装がクラスだからダメ ListViewをLargeImageListとして使って、かつ画像は非同期的に読み込んで反映させていきたいんだけど、 ImageListを変更しても画像が差し変わらない。アイテムを選択したりすると変わる。 差し替え後に強制的に反映させるにはListViewをRefleshするしかない? ListViewItemのVMにINotifyPropertyChanged実装しとらんのか? RichTextBox.Textプロパティに数MBの文字列をセットすると 5秒くらいフォームがフリーズするので Task/async/await的なコードを試したのですが 別スレッドからコントロールにはアクセスできないと怒られ それではとInvokeメソッドを使ってみるも 今度はアクセスで怒られない代わりにまたフリーズ。 上手いこと非同期でTextプロパティにセットする 方法はありますかね。 >>197 数MBの文字列程度でフリーズした経験はないけど、その環境でフリーズするのなら非同期にしても解決はしないよ Invoke使おうがその文字列の処理にそれだけかかるのだからどうしようもない 非同期にするのは処理中にキャンセルするとか他のGUIからの入力処理をする目的じゃないと ありがとうございます そういう回答がいただけただけでも助かります 違った角度からの解決策を考えます 事情が許されるなら、俺ならRTFをHTML変換してブラウザコントロールで表示させるけどね 試してなくて妄想だけけど、SuspendLayout/ResumeLayoutとか? UIスレッド自体が輻輳してるんだからそんなことしても無意味w 別のプロセスか別のUIスレッドで動作させるか、 あるいは小分けにしてちょっとずつ更新するしかないと思うよ。 クラス継承の意義がイマイチ分かりません 継承したいクラスをフィールドに持たせ、共通して呼び出したいものはインターフェースとして定義するではダメなのでしょうか? 単にその両者をいっぺんにやるためにあるという理解で良いんでしょうか? >>205 それで正しいよ 現代のオブジェクト指向においては継承は基本的に悪であって、極力使うべきではない アポロ13って映画に「何のために作られたかではなく、何に使えるかが重要」って台詞が出てくるけど、 意義とか考えるのは(重要だとは思うけど)後回しにして、どういう使い方ができるかに 注視した方がいいよw あと、オブジェクト指向関係で教条主義的なことを言う奴の話は眉に唾して聞いた方がいいw これほんと >>209 悪の帝国Microsoft製だししょうがないなw Windows上でVisual Studioを立ち上げて.Netアプリ開発をする以上 お前も悪の帝国の軍門に下って生きるしかないのだ >>205 例えばフレームワークが用意してるControllerクラスを継承して20個くらい個別のコントローラーを作る場合と 個別のコントローラーにControllerクラスを持たせて呼び出しを委譲できるようにする場合 前者はカスタマイズしたい部分だけ書けばいいけど 後者はControllerの機能を呼び出すためにはすべてのクラスに委譲メソッドを用意する必要がある Controllerのメソッドを20個呼び出したいなら20x20で400個委譲メソッド定義をしないといけないしテストもしないといけない 自動生成することも可能だけどそれを考慮しても必要になる労力とコンポジションで得られる柔軟性が見合わない それぞれメリット・デメリットあるからそれを判断して使い分けるのが良いと思う 正しいと思うけど、継承のメリットを論じている段階でその例はたぶん通じない。ちんぷんかんぷんだと思うよ そういえばc#になってから継承なんて使った覚えがないな 継承を使うとしても、KeyedCollectionみたいな用意されたabstractクラスの具象を書くくらいかな クラシックなWinForms/WebFormsと格闘するなら継承ありきなんだろうけど List型からカンマ区切りの文字列にしたいのですが、先頭や最後にカンマがくっついて欲しくありません こう言う場合ってどう書くのですか? string s = ""; int i = 0; foreach(var l in data){ if(i == 0) i = 1; else s += ","; s += l.ToString(); } 自分なりにも書いてみたのですがなんか素人感が半端ないです どうか正しいかっこいい書き方を教えてください、お願いします var s = string.Join(",", data); Goは>>205 のような考えで継承廃止したんじゃなかったっけ? コーディングコスト削減メリットよりも階層複雑化によるデメリットの方が大きいから、やるならインターフェースでやれって考え方だったと思う 天下のグーグルがそう言ってるからには継承が悪という考えもあながち全否定は出来ない var s = (data.FirstOrDefault() ?? "").ToString() foreach(var l in data.Skip(1)) s += "," + l var s = "" foreach(var l in data) s += "," + l s = s.SubString(1) >>222 Rustもそうだね MSやAWSが最近推してる null許容型に属性のrangeが有効か否かを調べたいんだけど、msdnを見ても書かれてない こういうときってどうやって調べるの?? Rangeということは「最小値と最大値」の範囲内かどうかなわけで nullが範囲外なのは自明だからそもそも意味がなくね? nullは特別に範囲内ってのなら「最小値と最大値」であるRangeじゃなくて他の方法で表現せざるを得ないよね >>226 単純にnull許容型にrangeの属性を付与できるか否かってだけが知りたい それを調べようとしてもmsdnに記載が見つからないって話 これはtestが0-100になるように有効だろうけど [range(0,100)] int test このrangeは有効なのか?って話 int?にはrangeは無効で101とか入れれますよーとかはないよねって調べたい [range(0,100)] int? test >>227 range属性自体はstringに対してだろうが付与出来るし、変数への代入を阻止するものじゃない それが有効かどうかはrange属性を使って検証する側の問題 ASPについて質問です MVCにできてWebFormsじゃできないことってどんなのがありますか? >>229 できる出来ないの基準は? 既存コントロール使わないで全部時前で処理するなら、出来ないことが重い浮かばない 原理的に出来ないことは無いが大変さが違う それこそMVCで組みづらいとか EFとの相性とか WebAPI作りたいとか 他言語や環境と混ぜづらいとか つぶしが効かないとか まあ新規でWebFormsはやめとけと >>229 WebFormsは.NET Coreおよび.NET 5以降ではサポートされない 今から新規に使ってはいけない ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる