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

■ このスレッドは過去ログ倉庫に格納されています
2021/12/13(月) 22:53:21.18ID:dhjmiKBp0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part152
http://mevius.5ch.net/test/read.cgi/tech/1629888256/
■関連スレ
C#, C♯, C#相談室 Part94
http://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://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/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries/
https://referencesource.microsoft.com/
https://source.dot.net/
・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
2022/01/17(月) 12:44:47.10ID:DKJy6PH50
>>704
25ミリバールって気圧かよw
2022/01/17(月) 13:14:05.94ID:U4FphVWG0
ミリビットだろ、この板なんだから
707デフォルトの名無しさん (ラクッペペ MM66-Dw/N)
垢版 |
2022/01/17(月) 13:15:12.00ID:XdTy16+8M
ミリバールって昭和かよ
2022/01/17(月) 13:45:40.07ID:McAG9Ljja
マネージドな世界で閉じている限り、Disposeの実装ミスや呼び出しの忘れは
リークの原因には普通はならないと思うけどね。
単にリソースの解放が逐次的でなくなるだけ。
2022/01/17(月) 13:52:14.45ID:NIAK/ICvM
>>708
Disposeが呼ばれたらstaticなイベントからハンドラを削除するような実装は低品質なライブラリなんかだとたまに見かける
2022/01/17(月) 14:02:14.57ID:s/zLKX0LM
>>708
> GDIなどのシステムリソースの解放忘れとか
の話の流れで
> マネージドな世界で閉じている限り
とか頭おかしいのか?
2022/01/17(月) 14:05:18.68ID:McAG9Ljja
>>710
頭がおかしいのは君の方

普通のプログラマはマネージドなライブラリを挟んで
間接的にGDIのリソースを利用するんであって直接使ったりしないの

だからライブラリのコードにバグがない限りGDIを間接的に
利用しているからといってリークの原因にはならないんだよ
712デフォルトの名無しさん (アウアウウー Sa05-76Y4)
垢版 |
2022/01/17(月) 14:10:54.78ID:McAG9Ljja
ついでに言えば、俺は別に>>702に反論したわけじゃないw
すごい被害妄想だよねw
ネトウヨさんじゃねえのw
2022/01/17(月) 14:26:56.43ID:ly062VWjM
普通のプログラマw
無能の言い訳に多用されてて笑う
2022/01/17(月) 14:40:41.16ID:IUPVmsWca
理想のマネージドだったらdisposeなんて関係ないし、メモリリークなんて起きない
でもc#は理想のマネージドじゃないんだよ・・・
2022/01/17(月) 15:20:30.64ID:C2NpqJUJM
ゲロみたいな話題で盛り上がってんなあ
2022/01/17(月) 17:33:38.89ID:0pf4TYua0
っぱRustよ
2022/01/17(月) 19:32:54.18ID:rqpdgGXW0
mb ミリビットもジワるwww
718デフォルトの名無しさん (ワッチョイ 6e46-76Y4)
垢版 |
2022/01/18(火) 09:23:03.79ID:HVobsaMl0
低レベルな質問で恐縮です。VisualStudioを使っています。
やりたいことは、定期的に更新されるcsvからデータを取得しDataGridViewに表示させたいです。
(つまり、DataGridViewでリアルタイムに更新されているように見せたい)
取得・更新することはできたのですが、更新時にソート状態が解除されて困っています。
DataTable・DataSet・DataSource・データバインドなどのキーワードを見つけて調べているのですが、理解力が乏しく解決できていません。
こんな方法があるよと、ヒントになる助言をいただけたらありがたいです。
よろしくお願いします。
2022/01/18(火) 10:13:54.13ID:Tap2eyJjM
>>718
DataGridViewのSort順を復元するだけでは?
2022/01/18(火) 10:18:04.98ID:jhcMMPao0
・DataGridViewにどうデータをセットしているか、どう更新しているか
・どうソートさせているか
・ソート状態が解除というのは結局どういう状況になっているのか
を具体的に
2022/01/18(火) 11:36:28.39ID:HVobsaMl0
反応ありがとうございます。
>>719
更新前にソートされている列を取得して、更新後に強制ソートする
という感じですね。試してみます。

>>720
>DataGridViewにどうデータをセットしているか
 今の状態は、あるサイトにのっていたコードをコピペして試しています。
//フォームデザイン
//csvデータ:person_read.csv
//button4のソース
 ソースコードはこちら ttps://dotnetfiddle.net/i89pR3
///////////////////////////////////
2022/01/18(火) 11:37:01.32ID:HVobsaMl0
>・どう更新しているか
 button4を押すたびにcsvからデータを更新しています(実現したらtimerで自動更新に変更予定)
>・どうソートさせているか
>・ソート状態が解除というのは結局どういう状況になっているのか
 button4クリック→初期状態(csv並び順)
 GUIのdataGridViewの任意の列(例えば年齢)をクリックしソート
  1,山田,25
  3,鈴木,28
  2,佐藤,30
  4,山田,46
 csvに 5,田中,37 が追加される
 button4クリックで更新
 csvの並びに戻る(希望はこの順で表示させたい)
  1,山田,25 → (1,山田,25)
  2,佐藤,30 → (3,鈴木,28)
  3,鈴木,28 → (2,佐藤,30)
  4,山田,46 → (5,田中,37)
  5,田中,37 → (4,山田,46)
以上です。
2022/01/18(火) 11:43:01.00ID:HVobsaMl0
リンクが404になっていたので貼り直しします。
これで大丈夫か心配ですが。
https://dotnetfiddle.net/ulZ3M9
2022/01/18(火) 13:08:53.17ID:jhcMMPao0
DataTableの場合ソート順は
dataTable.DefaultView.Sort
に文字列で格納されるからこれを使えばいい
725デフォルトの名無しさん (ワッチョイ a1d3-T4Xm)
垢版 |
2022/01/18(火) 13:20:14.01ID:k1mhP8XB0
C#で正規表現のperlでの「tr」と同じ事をしたいのですが、
Regexクラスにそれっぽいのがありません。
何か方法はありませんでしょうか?
2022/01/18(火) 13:29:49.03ID:pQS/rHaxa
trは置換なのか?だったらc# regex 置換とかでぐぐりゃ方法出るだろ
痴漢じゃないなら知らない
727デフォルトの名無しさん (ワッチョイ a1d3-T4Xm)
垢版 |
2022/01/18(火) 13:41:14.96ID:k1mhP8XB0
置換ではあるのですが、
pattern [a-z]
replacement [a-z]
とすると半角英字が全角英字に変換されるといった感じです
2022/01/18(火) 13:52:43.16ID:pQS/rHaxa
正規表現でマッチした位置とマッチした文字列を取り出すのはできる
正規表現関係なく文字列を全部変換するってならできる
これを組み合わせて自分でやるしかないんじゃない?
729デフォルトの名無しさん (ワッチョイ f901-JESV)
垢版 |
2022/01/18(火) 13:54:14.42ID:9szJ9jA+0
Regex.Replace(mojiretsu, "[a-zA-Z]", p => ((char)(p.Value[0] - 'a' + 'a')).ToString());
動確はしてない。
730デフォルトの名無しさん (ワッチョイ a1d3-T4Xm)
垢版 |
2022/01/18(火) 14:04:35.01ID:k1mhP8XB0
なるほど、やはりないですか
ありがとうございました
2022/01/18(火) 18:17:30.27ID:UqX3jEvG0
全角半角ならVB.NetのStrConv使えばいいじゃね
2022/01/18(火) 18:27:21.22ID:80llBYJsr
c#って全角半角変換でまともなメソッド用意してないよな
2022/01/18(火) 18:49:27.58ID:HVobsaMl0
>>718です。
.SortedColumn で現在のソート選択列を取得
ListSortDirection で昇順・降順の状態を取得
データ更新後、.Sort で更新前のソート状態を復元することができました。

>>719さん>>724さんヒントをありがとうございます。
>>720さん、気にかけていただいてありがとうございます。
また何かあればよろしくお願いします。
734デフォルトの名無しさん (ワッチョイ 6e8e-SRyr)
垢版 |
2022/01/18(火) 19:17:27.38ID:DZmAMHWt0
>>732
C#の言語仕様にそんなのあるわけないだろうが
頭がおかしいのかな?
2022/01/18(火) 19:30:02.02ID:uGAsykz90
.NETのことだろ。
あれ本当に不便。
2022/01/18(火) 19:44:39.78ID:g9d5Z42+a
全角無視した比較はあるんだから変換もあればいいのにな
.net6はいたるとこでCultureInfo受け取れるようになってるから、オリジナルCultureInfo作ってやればtolowerなんかはできそう
2022/01/19(水) 04:15:15.58ID:4BL/bkWB0
nuget辺りに.net言語で使える漢字処理モジュールみたいのないの
738デフォルトの名無しさん (ワッチョイ eebb-76Y4)
垢版 |
2022/01/19(水) 13:57:55.37ID:b1tRS/0c0
あの、Asp.netMVCでサイトを作ったんですが、
robots.txtって
Global.asaxと同じ場所もしくはViews\Layout.cshtmlと同じ場所
のどっちに置けばいいんでしょうか?
739デフォルトの名無しさん (ワッチョイ 495f-Nrkm)
垢版 |
2022/01/19(水) 22:04:21.46ID:67zDZ4RH0
WebProgという板があるからそっち言ってみれば?
2022/01/20(木) 08:59:26.49ID:fgAfnzipM
>>738
デプロイしてみればわかる話を、何故聞いてしまうのか?
2022/01/20(木) 10:11:03.18ID:8HL1zORE0
めんどいじゃん
ネットでクダ巻いてるゴミが代わりに試して教えてくれれば儲けもんだろう?
2022/01/20(木) 12:57:10.80ID:MJ6I7RR7r
おっ、そうだな
2022/01/20(木) 14:46:47.86ID:n7chvAG30
>>741
うそを教えられるという可能性は考えないのか?
2022/01/20(木) 18:34:05.33ID:NL1fx3HA0
すでにサイト作ってる段階なら、掲示板で聞くより自分で試すほうが早いと思うんだがなぁ
2022/01/21(金) 00:57:35.59ID:yyC8EMRk0
共変と反変という言葉がよく分かりません
アップキャスト/ダウンキャストと何が違うんでしょうか?
2022/01/21(金) 02:01:57.32ID:r2dC59Vr0
class B{}
class C:B{}
class D:C{}
static D Function(B b){ return new D();}

Func<C,C> fp = Function;

Functionの返り値DはCの派生クラスだから返り値CのFunc扱いしても大丈夫だよねってのが共変
Functionの引数BはCのベースクラスだから引数CのFunc扱いしても大丈夫だよねってのが反変

両方ともアップキャスト(asがいらない)が約束されてるから許される
2022/01/21(金) 04:17:33.74ID:9FYmM/Q0a
ハロウィンの子供にチョコレートを渡せることが反変で
チョコレート工場をお菓子工場とみなせることが共変ってことか
2022/01/21(金) 08:32:03.92ID:kufT2hajr
よく理解できるね
これを理解したとしても他人がコードを読むの大変だよね
コメントに書いておくものなの?
2022/01/21(金) 10:57:27.37ID:r8LIAXWEM
c#自体にそういう機能があるので楽だねって感じ
うまくいかない場合は何か思い違いしてる
2022/01/21(金) 22:48:46.71ID:0wwLw+zrM
>>746-747
めちゃくちゃ分かりやすいです
ありがとうございました
2022/01/21(金) 22:52:58.30ID:DQ1OUxKV0
なにこれ
もしかしてnullになるかもしれんやつは片っ端から?つけなきゃいけなくなったの??
2022/01/21(金) 23:17:35.13ID:Yoc43dCB0
そうだぞ
2022/01/21(金) 23:37:35.61ID:DQ1OUxKV0
なんか俺かっぺになった気分だべ・・・
2022/01/22(土) 01:35:08.87ID:xgyvtLBZ0
nullチェックをコンパイラが管理するやつだから慣れれば神機能
2022/01/22(土) 06:49:46.16ID:sQZaaq50M
参照前に必ずnullチェックというコーディング規約から解放される?
2022/01/22(土) 07:48:24.01ID:dpfIrrzB0
なわきゃあない
2022/01/22(土) 08:36:39.06ID:odBVOzqN0
on/offを行単位で切り替えられるから混乱すると思う
2022/01/22(土) 09:30:40.13ID:AMYiKIMXM
行単位でそんな事する奴はすでに混乱してるだろw
2022/01/22(土) 09:57:57.24ID:dGbyTm5r0
何が利点なんだろうネ?(笑)
2022/01/22(土) 10:16:46.92ID:z2LDxi9+M
まあ利点がわからないなら君は今のままでいいんじゃね?
761デフォルトの名無しさん (ワッチョイ 4666-T4Xm)
垢版 |
2022/01/22(土) 10:35:14.93ID:tP9M/cw30
5年ぶりに.Netで作ることになったんだけど、.Net Frameworkってオワコンなの?
Coreとか出てきてさらに.Netに統合されるとか混沌としてて何が今の最適解なのか解らない。
どうせ作るなら今の最適で作りたいからお聞かせ願いたい。
つかWPFって普及前に死んだ感じ?
2022/01/22(土) 10:40:46.17ID:om6KWGu40
.NET FrameworkはオワコンだけどWindowsに標準で入ってるのでWindowsユーザー視点だと一番有難い
WPFもWinFormsのWindowsであれば現役
2022/01/22(土) 11:13:26.21ID:dGbyTm5r0
.netもオワコンだが
WPFもオワコンなので
代わりがない状態
他のはもっと過疎ってて
.netやWPFより更に消えやすい感じ
なので何もオススメできない状態
2022/01/22(土) 11:41:22.99ID:cBfIrJY2a
オワコンっても単なる流行の話だからな中身はオワコンでもない

.NET Framework 4.8
.NET6
今選ぶならこのどちらか。どっちも長期サポートになってるはず
表面的にはどっち選んでも同じ。昔の記憶が残ってるなら4.8使った方がスムーズに扱える

UIは色々増えてるけどwinだけならWinFormsが無難
765デフォルトの名無しさん (ワッチョイ 4666-T4Xm)
垢版 |
2022/01/22(土) 11:45:58.45ID:tP9M/cw30
>なので何もオススメできない状態
調べる限り、今はコレってのが無いんだよね。
WPFも生き腐れしてるみたいなので、
無難なWindowFormsと.Net Framework4.6.Xで良いやって思ってます。
ぬるぬるUIによる快感性はiOSに任せようと。
766デフォルトの名無しさん (ワッチョイ 4666-T4Xm)
垢版 |
2022/01/22(土) 11:49:15.98ID:tP9M/cw30
>.NET Framework 4.8
ユーザーのコンピュータには.NET Framework 4.6が入ってるので
5年程度を稼働を目安にすると.NET Framework 4.6のが導入のハードルが
低くて良いなと思うのですが、.NET Framework 4.8のが何か優れてるんですかね?
純粋にサポートの長さかな。
2022/01/22(土) 12:08:19.50ID:cBfIrJY2a
4.6だと今年でサポート終了かな
サポート気にしないなら・・4.xの差で機能的にはほとんど変わってないから何使っても同じ
ただちょこちょこソースコードの書き方が追加されてる(変更じゃなくて追加だから昔の書き方で問題起きない)
ぐぐってソースコードコピペしたときに新しい書式のソースコードだと思わぬエラーがでて困るかもしれないって程度
わざわざ古いの選ぶ意味もないけど、新しいの入れるのが面倒なら古いままでもいいんじゃないって程度だよ
2022/01/22(土) 12:11:29.47ID:63g4vstfM
基本的には.NET6を選べばいい
既存システムのメンテナンス・マイグレーションなら資産状況次第だけどFW48の方が低リスクで間違いない
ランタイムのサポート期間は意外にもFW48の方が長い
でも開発環境のサポート期間はわからない
2022/01/22(土) 13:06:27.03ID:MOxbGC/+0
最近は4Kとか高解像度ディスプレイ対応(スケーリング対応)が必要になって来たせいか
WPFを使ってる所が前よりは増えた印象
他に良いのが無いから消去法で採用って感じ何だろうけど
2022/01/22(土) 13:10:19.88ID:MOxbGC/+0
>>766
スケーリング対応は4.8の方が改良されてる
もっと言えば.NET6の方が進んでるけど
2022/01/22(土) 13:16:37.15ID:+eWEN8w/0
WPFでもMVVMを考えなくてもWinFormsと同じように使えるし、スケーリング対応が楽なのはいいよね

あと最近のWindows10は標準で4.8が入ってなかったっけ?
2022/01/22(土) 13:25:41.09ID:i+EsaIAtd
サポート期間を気にするなら.NET6は問題外だよ
なんと2024年にサポート切れ
2022/01/22(土) 13:36:54.52ID:63g4vstfM
十分だよ
.NETは互換性が高いから.NET8への移行も苦労はせんだろう
他の言語と比べたら天国だ
2022/01/22(土) 14:04:30.15ID:MOxbGC/+0
>>771
WinFormsの*.Designer.csと*.resxから解放されるのも大きいね
差分を見たりマージするのに問題あり過ぎた

Windows10はMay 2019 Update(1903)から標準で4.8が入ってる
現在サポート中のバージョンは全部4.8が入ってるね
775デフォルトの名無しさん (ワッチョイ 495f-sNUe)
垢版 |
2022/01/22(土) 14:08:40.62ID:gJEoCqwv0
今の最適で作りたいなら.NET 6/WPFだな
2022/01/22(土) 14:33:41.83ID:KL4k8E210
.NET Frameworkは最終版の4.8でもC#7.3までの対応
C#8.0は.NET Core 3
C#9.0は.NET 5
C#10.0は.NET 6

C#のバージョンを上げるなら.NETも移行せざるを得ない
2022/01/22(土) 14:35:53.77ID:nTnTl9DUr
わかりました、Mauiで頑張る
2022/01/22(土) 14:44:13.78ID:Ii2fD9R0a
WPFの方が高DPI(高「解像度」では必ずしもないよね)対応が優れているっていうのは
DPIが異なる複数のディスプレイ間をウィンドウが行ったり来たりするような状況を想定した話?
2022/01/22(土) 14:49:58.72ID:ARjVXSY1M
WPFってWebみたいに解像度に合わせて画像切り替えるとか標準じゃできないだろ?
HDPI対応が優れているとか片腹痛い
2022/01/22(土) 15:19:51.12ID:EyuzyEvM0
俺社環だと2012R2なんで4.5.1なんだよな
サポート外だからさっさと4.6移行に切り替えたいけど、不具合出てないから誰もやりたくないという
2022/01/22(土) 16:54:28.58ID:1FaTcT0G0
>>779
そんなもん解像度は取得できるしなんとでもやりようあるやろ

つうデスクトップGUIアプリに求めることかそれ?
どんなシチュエーションで必要なのかわからん
2022/01/22(土) 18:01:32.84ID:dpfIrrzB0
想像力が無いだけだなあ
2022/01/22(土) 18:55:07.04ID:Hnp3kh2k0
>>780
誰もやりたがらないけど、OS のサポート切れが迫ってきて対応中。w
いまさらその上で動いてるオレ様ソフトのインストールの手順とか覚えてないんだけどなあ。
2022/01/22(土) 19:41:02.79ID:DSkywrpw0
ドキュメントは残しておけよw
2022/01/22(土) 19:49:34.26ID:vcUHcBQYM
昔自分用に作った(家で自分の時間を使って)アプリがあって退職時に無理やり引き継ぎさせられて勝手に使われてる
PC壊れたときに連絡あってアプリを送った思い出…
2022/01/22(土) 19:51:39.05ID:vcUHcBQYM
毎日使うものなので劇的に工数が減った
あくまでも自分用

それを恨みこそすれ感謝してない元会社がタダでずっと使ってる
2022/01/22(土) 21:17:29.45ID:9EvEVFCn0
Main内
Test t = new Test();
t.Num = 1;
t.Add(10);
Console.Write(t.Num);

class Test
{
 public int Num {get; set;}
 public int Add(int p)
 {
  return Num + p;
 }
}

これで出力が1になるのは何故なのでしょう?11になると思うのですが…
2022/01/22(土) 21:22:02.32ID:vcUHcBQYM
return Num + p;
これは足したものを返してるだけで
Num自体に変更をかけていないからな

Num = Num + p;
return Num;
ならわかる
2022/01/22(土) 21:37:34.36ID:9EvEVFCn0
あ、、、確かに。納得しました。
ありがとうございました
2022/01/22(土) 23:20:32.09ID:mmM8IstB0
いえいえ
2022/01/23(日) 14:44:30.58ID:is+XSiL/0
すみません、初心者で何からしたら良いのか、何をすべきなのか分からなくて助けてください。

計算アプリを作らなければならず、調べてなんとかボタン配置とかはできたのですが、プログラミングが何をどういった順番でするのか分からなくて…

計算は
固定数字÷ボタン入力した数字(+必要に応じて選択した数字)×ドロップダウンで選択した数字

これを出来るようにしたいのですが、やるべきことは
@ボタンとドロップダウンの紐付け?認識?
A入力した数字の表示
B()の条件付け
C計算結果の表示
これで大丈夫でしょうか?

うまく質問できず、申し訳ありません。
今までプログラミングに触れたことが無く、必要情報が不足していましたら追加致します。
2022/01/23(日) 15:13:55.20ID:XkFSmW1wd
今期の単位は諦めましょう
2022/01/23(日) 15:15:05.76ID:Wu5qqWWYa
ボタン押したらボタンに対応した値を表示する(固定値で割らなくておk)
それができたら、次は固定値で割った結果を表示するように修正
それができたら、次はドロップダウンの選択が変わったことを知る方法と選択された値を取得する方法調べる
それがわかったら、ドロップダウンの値を掛けた結果を表示できるように修正
それができたら、どんな条件でこういう計算するって条件別け
かな?
794デフォルトの名無しさん (ラクッペペ MM8f-DS0X)
垢版 |
2022/01/23(日) 15:16:44.75ID:CCpFlBt8M
それを決めたら他の人がコードを書いてくれるのか?

それならマルナゲをオススメ
2022/01/23(日) 15:20:46.99ID:is+XSiL/0
>>793
ありがとうございます!

直ぐにやってみます。
やるべきことを分かりやすく教えて頂き、本当にありがとうございます。
2022/01/23(日) 15:30:22.12ID:is+XSiL/0
>>794
いえ、コードも私が書かなければなりません。
丸投げする相手が居ないです…
2022/01/23(日) 19:04:59.40ID:nwzKJ0xW0
ひっでえ課題
そんなもんが何の足しになるんや
2022/01/23(日) 19:47:07.31ID:is+XSiL/0
やっと、数字の表示ができました……
何故か一桁しか表示されなくて、次の数字押したら上書きされるけど、表示はできました…


何のたしになるかは分からないです…

曰く『コロナ禍だけど、この機会に家で出来きることをしよう!』って事らしいです。
2022/01/23(日) 19:48:24.39ID:is+XSiL/0
投稿が重複してしまいました、誠に申し訳ありません。
2022/01/23(日) 23:26:33.12ID:pR5ferbX0
メンバー'hoge' はインスタンスデータにアクセスしないため、static にマークできます
2022/01/24(月) 12:21:02.64ID:bXxRLmwJ0
四角をグラフィックに描画する場合の座標について
g.DrawRectangle(pen, 始点x座標,始点y座標,幅,高さ);
このようにあります

ならば幅が2,2の場合
g.DrawRectangle(pen, 16, 16, 2, 2);
これで(16,16)-(17,17)で2ドットだけの中抜きがないものを想像するのですが
実際は
(16,16)-(18,18)の中央に穴がある状態の四角が描画されるようです
これは3,3指定なら理解できるんですが
幅指定なのになぜこのようになってしまうのでしょうか?
2022/01/24(月) 12:39:27.95ID:zeqExr0Ka
g.DrawRectangle(pen, 16, 16, 1, 1);
g.DrawRectangle(pen, 16, 16, 0, 0);
こいつらはどういう挙動をするべきかを考えたら?
2022/01/24(月) 13:27:00.02ID:VRumLvNTM
GDIは終点は描画領域に「含まない」
だから、幅として成立する。

FORTRAN由来とかで「含む」系
もあるので注意だ
2022/01/24(月) 14:09:38.84ID:97kNTb42a
>>801
まあこうは言える。

まずユークリッド幾何学的な数学的に抽象化された世界で考えるべき。
その世界では、1対の平行線の距離がペンの幅より大きければ必ず平行線の間に「隙間」が出来る。

GDI+の描画はこういう抽象化された世界をピクセルの世界に写像してるだけ
2022/01/24(月) 18:54:49.46ID:97kNTb42a
まあたぶんこんな感じだね

(1) 論理座標の原点は(0, 0)のピクセルの中心に設定されている。つまり論理座標とピクセル座標は
0.5ずれている(少なくともペンの幅が奇数ピクセルの時は)

(2) DrawRectangleは論理的な矩形の辺がペンの中心になるように描画する

(3) だから描画された矩形はペンの幅の1/2 * 2だけ指定したサイズより大きくなる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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