「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part134
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0f9a-KsIq)
2017/11/29(水) 19:23:58.05ID:GNLsbK4F0612デフォルトの名無しさん (ワッチョイ 0b81-pCZf)
2018/01/20(土) 00:20:13.00ID:1eaJngIj0 MSがUWPの宣伝しているのを見る度に
ユニバーサルプラットフォームっていうけど
お宅の会社ってPC以外のプラットフォーム持ってましたっけ?
って煽りたくなる
ユニバーサルプラットフォームっていうけど
お宅の会社ってPC以外のプラットフォーム持ってましたっけ?
って煽りたくなる
613デフォルトの名無しさん (アウアウエー Sa93-2BHe)
2018/01/20(土) 00:23:44.04ID:2ckAjxI3a 実態はともかく構想的にはMS以外ノプラットフォームも対象なんで
その批判は当たらないかと
その批判は当たらないかと
614デフォルトの名無しさん (ワッチョイ 0306-GP+B)
2018/01/20(土) 00:26:56.64ID:j23dmrcl0 とは言え、ギョーミーなアプリ書く上で、マストなものは粗方揃ったわけだし
クライアントがWindows10で揃えられるなら選択肢として悪くない
クライアントがWindows10で揃えられるなら選択肢として悪くない
615デフォルトの名無しさん (ワッチョイ 5523-4b13)
2018/01/20(土) 01:06:06.62ID:5JusgAfv0 とはいえUWPで作れるアプリならWebで十分なんだよね
タッチパネルでの利用を想定しないのであれば、現実的にはあえて選ぶメリットはほとんど無い
タッチパネルでの利用を想定しないのであれば、現実的にはあえて選ぶメリットはほとんど無い
616デフォルトの名無しさん (ワッチョイ 630f-GP+B)
2018/01/21(日) 06:37:48.04ID:eh2o3Efy0 解像度2560×1440のモニタを使っているのですが、Formアプリの解像度が合いません。
原因はサイズを125%に拡大していることで、通常の倍率に戻すとぼやけません。
FormのAutoScaleModeをDpiに設定してみましたが改善されませんでした。
対策をご存知の方がいましたら教えてください。
原因はサイズを125%に拡大していることで、通常の倍率に戻すとぼやけません。
FormのAutoScaleModeをDpiに設定してみましたが改善されませんでした。
対策をご存知の方がいましたら教えてください。
617デフォルトの名無しさん (ワッチョイ bdd3-GP+B)
2018/01/21(日) 08:46:46.21ID:0JbPJogq0 VSの吐くWinformsのテンプレだと自分でdpiAware仕込まなあかんのじゃなかったっけ
618デフォルトの名無しさん (ワッチョイ 630f-GP+B)
2018/01/21(日) 09:07:41.53ID:eh2o3Efy0619デフォルトの名無しさん (ワッチョイ 03eb-x16F)
2018/01/21(日) 09:16:30.01ID:dyzIneF20 >>616
exeを右クリしてプロパティの中の互換設定を弄ると直る
exeを右クリしてプロパティの中の互換設定を弄ると直る
620デフォルトの名無しさん (ワッチョイ 630f-GP+B)
2018/01/21(日) 09:41:48.00ID:eh2o3Efy0621愛知人
2018/01/21(日) 12:27:01.84ID:w5iluM1L つまり他のソフトもボヤけてるんだな。
XPExplorerインストールすればいいのに。
XPExplorerインストールすればいいのに。
622デフォルトの名無しさん (ワッチョイ 630f-Qwpo)
2018/01/21(日) 19:16:00.62ID:eh2o3Efy0623デフォルトの名無しさん (ワッチョイ 630f-Qwpo)
2018/01/21(日) 19:17:14.71ID:eh2o3Efy0 早速インストールしたら好調でした
ありがとうございます!
ありがとうございます!
624デフォルトの名無しさん (ワッチョイ 630f-Qwpo)
2018/01/21(日) 19:18:01.63ID:eh2o3Efy0625デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
2018/01/22(月) 01:46:46.64ID:B9qWH8zv0626デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
2018/01/22(月) 01:47:44.83ID:B9qWH8zv0627デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
2018/01/22(月) 01:48:45.74ID:B9qWH8zv0628愛知人
2018/01/22(月) 01:49:30.11ID:f1RuTEDX うっせーよカス
629デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
2018/01/22(月) 01:50:19.37ID:B9qWH8zv0630デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
2018/01/22(月) 01:51:06.43ID:B9qWH8zv0631デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
2018/01/22(月) 01:52:13.61ID:B9qWH8zv0632デフォルトの名無しさん (ワッチョイ fde3-nVvH)
2018/01/22(月) 07:20:56.54ID:2aQrNvno0 普通にNGID
633デフォルトの名無しさん (ワッチョイ 5bd6-pQa0)
2018/01/22(月) 15:17:28.34ID:rsQqa0Zv0 public static SqlConnection connect = new SqlConnection("接続文字列");
public static SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Table", connect);
public static DataTable dt = new DataTable();
private void Form_Load(object sender, EventArgs e)
{
sda.Fill(dt);
DataGridView1.DataSource = dt;
}
private void button_publish_Click(object sender, EventArgs e)
{
connect.Open();
〜Tablesへの改変処理
connect.Close();
dt = new DataTable();
sda.Fill(dt);//★
}
Table内容をSqlDataAdapterを使い、データテーブルに入れ込んで、DataGridViewに表示させた後、
Table内容を変更後、再びDataGridViewに表示させるとき、例外がスローされます。
★の部分で、「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」が出ます。
最新のデータを同じDataGridViewで見るには、どのようにすればよいのでしょうか?
public static SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Table", connect);
public static DataTable dt = new DataTable();
private void Form_Load(object sender, EventArgs e)
{
sda.Fill(dt);
DataGridView1.DataSource = dt;
}
private void button_publish_Click(object sender, EventArgs e)
{
connect.Open();
〜Tablesへの改変処理
connect.Close();
dt = new DataTable();
sda.Fill(dt);//★
}
Table内容をSqlDataAdapterを使い、データテーブルに入れ込んで、DataGridViewに表示させた後、
Table内容を変更後、再びDataGridViewに表示させるとき、例外がスローされます。
★の部分で、「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」が出ます。
最新のデータを同じDataGridViewで見るには、どのようにすればよいのでしょうか?
634デフォルトの名無しさん (ワッチョイ 5d17-x16F)
2018/01/22(月) 15:55:14.43ID:O29q6QQC0 >connect.Close();
接続切ったらそりゃエラーになるでしょ
接続切ったらそりゃエラーになるでしょ
635633 (ワッチョイ 5bd6-pQa0)
2018/01/22(月) 16:09:10.00ID:rsQqa0Zv0 connect.Open();//★
sda.Fill(dt);
connect.Close();
としたら、★マークのところで、またエラーが出ました。
sda.Fill(dt);
connect.Close();
としたら、★マークのところで、またエラーが出ました。
636デフォルトの名無しさん (ワッチョイ 0306-GP+B)
2018/01/22(月) 16:33:20.49ID:R+95xE7/0 まずコネクション以下全てのオブジェクトはクローズしたら再度newしないと使えません
よってスタティックじゃなくて普通のインスタンスとして管理
使う度にnewで新たに作ります
よってスタティックじゃなくて普通のインスタンスとして管理
使う度にnewで新たに作ります
637633 (ワッチョイ 5bd6-pQa0)
2018/01/22(月) 16:46:28.18ID:rsQqa0Zv0 そうだったんですね、使いまわせると思ってました・・・
638633 (ワッチョイ 5bd6-pQa0)
2018/01/22(月) 17:15:57.30ID:rsQqa0Zv0 インスタンス内で、宣言したら、うまくいくようになりました。
ありがとうございます。
ありがとうございます。
639デフォルトの名無しさん (ワッチョイ 239d-pQa0)
2018/01/23(火) 08:14:55.18ID:y6LiRRs70 デバッグで完全に動作するのにインストールして動かすと、途中で落ちる。多分データベースのアクセスではないかなと
思っているんだが、インストールした実行プログラムのデバッグをやろうとしているんだがどうやるのか不明。
VS2013の「デバッグ」から「インストールされているアプリケーションパッケージのデバッグ」に入ってもリストに何もでてこない。
なにか設定があるのだろうと思うが、どこを設定すればいい?
アタッチするまでが分からない。
思っているんだが、インストールした実行プログラムのデバッグをやろうとしているんだがどうやるのか不明。
VS2013の「デバッグ」から「インストールされているアプリケーションパッケージのデバッグ」に入ってもリストに何もでてこない。
なにか設定があるのだろうと思うが、どこを設定すればいい?
アタッチするまでが分からない。
640デフォルトの名無しさん (スッップ Sd43-pJai)
2018/01/23(火) 08:58:36.28ID:Un6nXOVAd641デフォルトの名無しさん (ワッチョイ 5b7f-XKUo)
2018/01/23(火) 09:29:37.11ID:2MiHwZpp0642デフォルトの名無しさん (ワッチョイ fde3-nVvH)
2018/01/23(火) 09:36:15.82ID:XJEe+tMu0 CallerMemberNameAttribute class
643デフォルトの名無しさん (ワッチョイ fde3-nVvH)
2018/01/23(火) 09:37:24.58ID:XJEe+tMu0 っていうか
リリース版でデバッグしたいって聞いてるんでしょ?
リリース版でデバッグしたいって聞いてるんでしょ?
644デフォルトの名無しさん (ワッチョイ 5b7f-XKUo)
2018/01/23(火) 09:50:04.23ID:2MiHwZpp0 Trace出力でのデバッグはリリース版でやることが多いぞ。
ビュワー立ち上げなければ、ユーザーからは見えないし。
ビュワー立ち上げなければ、ユーザーからは見えないし。
645デフォルトの名無しさん (ワッチョイ bdb8-1VRr)
2018/01/23(火) 09:59:10.73ID:iDuW9Lrl0 mono入れたLinuxでmscでコンパイルした実行ファイルを
WindowsにもってこようとするとMicrosoft Defenderでトロイ扱いされてブロックされます
同じコードをWindowsでcscでコンパイルした場合は問題ありません
WindowsでコンパイルしたものはmonoでLinuxでもちゃんと実行できます
なんでmscでコンパイルしたものがトロイ扱いされるんでしょう?
WindowsにもってこようとするとMicrosoft Defenderでトロイ扱いされてブロックされます
同じコードをWindowsでcscでコンパイルした場合は問題ありません
WindowsでコンパイルしたものはmonoでLinuxでもちゃんと実行できます
なんでmscでコンパイルしたものがトロイ扱いされるんでしょう?
646愛知人
2018/01/23(火) 11:14:45.36ID:ZHqgRH1x どうやって受け渡してる?
zipで渡したらどうなる?
zipで渡したらどうなる?
647デフォルトの名無しさん (ワッチョイ bdb8-1VRr)
2018/01/23(火) 11:48:58.28ID:iDuW9Lrl0 >>646
scp(ssh)とhttp経由でダウンロードしましたがだめで
その後拡張子を変えたりしましたがだめでした
アーカイブは試しませんでしたが
ダウンロードできても解凍するところでアウトと思われます
軽いプログラムだったのでbase64エンコードした文字列を
Windows側でデコードして出力しようとしたのですが
ファイルに出力した時点でウイルス判定され隔離されました
scp(ssh)とhttp経由でダウンロードしましたがだめで
その後拡張子を変えたりしましたがだめでした
アーカイブは試しませんでしたが
ダウンロードできても解凍するところでアウトと思われます
軽いプログラムだったのでbase64エンコードした文字列を
Windows側でデコードして出力しようとしたのですが
ファイルに出力した時点でウイルス判定され隔離されました
648デフォルトの名無しさん (ワッチョイ 3d9e-WQmd)
2018/01/23(火) 12:35:41.92ID:IdUgpQhE0 C#アプリからCTRL+V以外のホットキーでSendMessageでWM_PASTEを送っても
ペーストできるアプリとできないアプリがあるのですが
ペーストできない原因とどうすればペーストできるのか
分かる方がおられましたらお教えいただけないでしょうか
自作C#アプリ ○
FireFox ○
ThunderBird ○
IE11 ○
Mery ○
秀丸ファイラ ○
MDIE ○
等
V2C ×
Chrome ×
Vivaldi ×
Everything ×
等
ペーストできるアプリとできないアプリがあるのですが
ペーストできない原因とどうすればペーストできるのか
分かる方がおられましたらお教えいただけないでしょうか
自作C#アプリ ○
FireFox ○
ThunderBird ○
IE11 ○
Mery ○
秀丸ファイラ ○
MDIE ○
等
V2C ×
Chrome ×
Vivaldi ×
Everything ×
等
649デフォルトの名無しさん (アウアウエー Sa93-2BHe)
2018/01/23(火) 12:43:02.47ID:+k2ngROKa いやいや、原因は普通に当該アプリがWM_PASTEを処理しないからでしょうw
泥臭いけど素直にSendKeysを使ったらよいのでは?
泥臭いけど素直にSendKeysを使ったらよいのでは?
650デフォルトの名無しさん (アウアウカー Sa21-zP08)
2018/01/23(火) 12:43:45.53ID:w7MKK31Na シリアル通信のプログラムで問い合わせ付のコマンドを送信する場合に、送信結果(bool)とレスポンス結果(string)を取得したいのですが、返り値boolでレスポンス結果をoutで返すといった感じにすればいいでしょうか
651デフォルトの名無しさん (ブーイモ MM99-4b13)
2018/01/23(火) 12:44:53.41ID:S3NIjRwTM WM_PASTEじゃなくて直接キーをハンドリングしてるんだろ
最近のメジャーなアプリは開発者がMacをメインで使ってるケースが多かったりして、
ファッキンドザのために必要以上の特殊な対応はしないというスタンスのものが増えてるよ
最近のメジャーなアプリは開発者がMacをメインで使ってるケースが多かったりして、
ファッキンドザのために必要以上の特殊な対応はしないというスタンスのものが増えてるよ
652デフォルトの名無しさん (ワッチョイ c5c9-GP+B)
2018/01/23(火) 12:50:10.67ID:X0br0i8Q0 >>650
ValueTuple
ValueTuple
653デフォルトの名無しさん (ブーイモ MMe9-VZYS)
2018/01/23(火) 13:01:37.24ID:P/8oxsShM >>650
送信結果は例外で
送信結果は例外で
654デフォルトの名無しさん (アウアウエー Sa93-2BHe)
2018/01/23(火) 13:31:40.71ID:+k2ngROKa >>650
成否だけ分かればいいなら、失敗した時はnullを返せば十分じゃない?
enum Acknowledgement {ACK,, NAK, NoResply, Offline};
みたいなのを返したいなら、
Class Response
{
public string Received{get; private set;}
public Acknowledgement Acknowledgement{get; private set;}
}
みたいなのを返すとか
成否だけ分かればいいなら、失敗した時はnullを返せば十分じゃない?
enum Acknowledgement {ACK,, NAK, NoResply, Offline};
みたいなのを返したいなら、
Class Response
{
public string Received{get; private set;}
public Acknowledgement Acknowledgement{get; private set;}
}
みたいなのを返すとか
655デフォルトの名無しさん (ワッチョイ 5dd2-k4Q3)
2018/01/23(火) 14:27:23.36ID:jwCBe9IF0 メインメニューにコピーの項目ないなら
直接ペーストするウインドウに送らんと
直接ペーストするウインドウに送らんと
656デフォルトの名無しさん (アウアウカー Sa21-zP08)
2018/01/23(火) 21:20:31.90ID:doIreqsya657デフォルトの名無しさん (ワッチョイ 25b3-pQa0)
2018/01/24(水) 22:02:38.70ID:pOW1jrho0 classをforeachで回したいのですがGetEnumeratorの書き方はこういう形が一般的なのでしょうか?
プロパティが増える度にGetEnumeratorのyield return追加しないといけないですが
うっかり追加し忘れてバグの元になるから別の書き方があるのかも?と少し気になったので
https://ideone.com/etKQWk
プロパティが増える度にGetEnumeratorのyield return追加しないといけないですが
うっかり追加し忘れてバグの元になるから別の書き方があるのかも?と少し気になったので
https://ideone.com/etKQWk
658デフォルトの名無しさん (ブーイモ MMab-4b13)
2018/01/24(水) 22:13:23.39ID:N2tfbGLJM659デフォルトの名無しさん (ワッチョイ c581-x16F)
2018/01/24(水) 22:16:06.84ID:BwYqU5Fv0660デフォルトの名無しさん (ワッチョイ 25b3-zWLY)
2018/01/24(水) 22:21:49.07ID:pOW1jrho0 >>658
すっごい単純なものだと
int id
string name
みたいなものでクラス保持してて、そこに他にも付属品が付いてるイメージです
たまにforeach使えないと不便な時があるのでその為に継承させてるのですが
DBから読み出したデータをそのままforeachで出力させたいって時とかに使います
わざわざ全部の項目を関数で読み出して表示ってのも大変な時があるので
すっごい単純なものだと
int id
string name
みたいなものでクラス保持してて、そこに他にも付属品が付いてるイメージです
たまにforeach使えないと不便な時があるのでその為に継承させてるのですが
DBから読み出したデータをそのままforeachで出力させたいって時とかに使います
わざわざ全部の項目を関数で読み出して表示ってのも大変な時があるので
661デフォルトの名無しさん (ワッチョイ 25b3-zWLY)
2018/01/24(水) 22:38:24.91ID:pOW1jrho0 >>659
Typeの使い方色々調べましたけど、指定方法がイマイチわからなかったのでもうちょい調べておきます
Typeの使い方色々調べましたけど、指定方法がイマイチわからなかったのでもうちょい調べておきます
662デフォルトの名無しさん (アウアウエー Sa93-2BHe)
2018/01/24(水) 22:51:55.14ID:V1Cqs6+da663デフォルトの名無しさん (ワッチョイ 25b3-zWLY)
2018/01/24(水) 23:04:36.97ID:pOW1jrho0664デフォルトの名無しさん (ワッチョイ 23d2-aN4H)
2018/01/24(水) 23:07:14.93ID:E4B4d2jG0665デフォルトの名無しさん (ワッチョイ 25b3-zWLY)
2018/01/24(水) 23:23:34.07ID:pOW1jrho0666デフォルトの名無しさん (オッペケ Srab-jHVE)
2018/01/25(木) 12:22:13.44ID:bvB9i9l+r >>662
質問されてるんだから屁理屈いってないで素直に答えろよw低能らしいなw
質問されてるんだから屁理屈いってないで素直に答えろよw低能らしいなw
667デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 12:32:11.99ID:867zoX3ca こうしてまた一人変態プログラマーが世に放たれた
668デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 14:20:59.96ID:uboI0CmN0 {
//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);
//画像ファイルを読み込んで、Imageオブジェクトとして取得する
Image img = Image.FromFile(@"C:\test\1.bmp");
//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
//Imageオブジェクトのリソースを解放する
img.Dispose();
//Graphicsオブジェクトのリソースを解放する
g.Dispose();
//PictureBox1に表示する
PictureBox1.Image = canvas;
}
g,imgはNEWしてないのに何でdispose()する必要があるの?
//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);
//画像ファイルを読み込んで、Imageオブジェクトとして取得する
Image img = Image.FromFile(@"C:\test\1.bmp");
//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
//Imageオブジェクトのリソースを解放する
img.Dispose();
//Graphicsオブジェクトのリソースを解放する
g.Dispose();
//PictureBox1に表示する
PictureBox1.Image = canvas;
}
g,imgはNEWしてないのに何でdispose()する必要があるの?
669デフォルトの名無しさん (アウアウエー Saf2-BM8y)
2018/01/25(木) 15:01:28.26ID:rd0qfL0Fa >>668
Graphics.FromImageもImage.FromFileも直接コンストラクタ呼んでないだけのこと。
中で非公開のコンストラクタが呼ばれてインスタンスが作られてることに変わりないじゃん
お片付けしていいタイミングが分かるのは作った人だけ。
だから作った人がお片付けする責任を負うのが合理的
Graphics.FromImageもImage.FromFileも直接コンストラクタ呼んでないだけのこと。
中で非公開のコンストラクタが呼ばれてインスタンスが作られてることに変わりないじゃん
お片付けしていいタイミングが分かるのは作った人だけ。
だから作った人がお片付けする責任を負うのが合理的
670デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 15:12:28.67ID:uboI0CmN0 そういうことなの。
Graphics g = Graphics.FromImage(canvas);
こいつが内部のコンストラクタでNewしてるかどうかなんてどうしたらわかるの? 分からんよな。
マニュアルをみると確かにこいつだけ「Creates a new Graphics from the specified Image.」と
なってるな。わかり難く紛れ込んでるんだね。
しかも
g.dispose()
PictureBox1.Image = canvas;
と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
とかできないのか?
Graphics g = Graphics.FromImage(canvas);
こいつが内部のコンストラクタでNewしてるかどうかなんてどうしたらわかるの? 分からんよな。
マニュアルをみると確かにこいつだけ「Creates a new Graphics from the specified Image.」と
なってるな。わかり難く紛れ込んでるんだね。
しかも
g.dispose()
PictureBox1.Image = canvas;
と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
とかできないのか?
671デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 15:29:46.72ID:uboI0CmN0 これはGraphicsクラスの説明にあるMSのサンプルだけどImageもulCornerもDispose()していないのは何故。
private void DrawImagePointF(PaintEventArgs e)
{
// Create image.
Image newImage = Image.FromFile("SampImag.jpg");
// Create point for upper-left corner of image.
PointF ulCorner = new PointF(100.0F, 100.0F);
// Draw image to screen.
e.Graphics.DrawImage(newImage, ulCorner);
}
private void DrawImagePointF(PaintEventArgs e)
{
// Create image.
Image newImage = Image.FromFile("SampImag.jpg");
// Create point for upper-left corner of image.
PointF ulCorner = new PointF(100.0F, 100.0F);
// Draw image to screen.
e.Graphics.DrawImage(newImage, ulCorner);
}
672デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 15:31:19.68ID:867zoX3ca 別に使い終わってもリソース気にしないなら放置でいいよ
実害は普通の使い方してる限りでない
一個二個リソースが握られただけでは問題ないけど
数千数万とかレベルだと問題がでる
でもわざわざ勘定したり場合わけしながらコード書いているのか?
だったら正しいコードを書こう
newしてるかどうかわからなくても使ってることはわかるだろ?
いつかは自動で解放されるけどタイミングが不明
コード書いてる途中にg,imagを使い終わったと判断できるのは自分だけだから
片づけた後に使うのは当たり前だな
基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ
実害は普通の使い方してる限りでない
一個二個リソースが握られただけでは問題ないけど
数千数万とかレベルだと問題がでる
でもわざわざ勘定したり場合わけしながらコード書いているのか?
だったら正しいコードを書こう
newしてるかどうかわからなくても使ってることはわかるだろ?
いつかは自動で解放されるけどタイミングが不明
コード書いてる途中にg,imagを使い終わったと判断できるのは自分だけだから
片づけた後に使うのは当たり前だな
基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ
673デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 15:35:45.15ID:867zoX3ca これは基本的にwindowsのGDIという仕組みに乗ってるだけなので
他でも使ってる
c#に文句を言うのは筋違い
でもc++スレに行くのも筋違い
30年近くさかのぼってMSの設計者に文句を言ってくればいい
どうしても嫌ならwindowsの仕組みに乗ってないものを使えばいい
他でも使ってる
c#に文句を言うのは筋違い
でもc++スレに行くのも筋違い
30年近くさかのぼってMSの設計者に文句を言ってくればいい
どうしても嫌ならwindowsの仕組みに乗ってないものを使えばいい
674デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
2018/01/25(木) 15:46:40.99ID:y1oROuxV0 こういう自分とこでインスタンス作成しといて始末しない設計ってクソだね
って話で終わりだな
って話で終わりだな
675デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 15:56:14.66ID:867zoX3ca もう少し説明
>と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
仮にgをファイル操作に置き換えたとしよう
ファイル開く
ファイル読み書き処理
ファイル閉じる
表示
これを
表示
ファイル閉じる
にした場合、表示がもし5年かかった場合、ファイルは意味もなく5年間開かれっぱなしで他から操作できない
>と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
仮にgをファイル操作に置き換えたとしよう
ファイル開く
ファイル読み書き処理
ファイル閉じる
表示
これを
表示
ファイル閉じる
にした場合、表示がもし5年かかった場合、ファイルは意味もなく5年間開かれっぱなしで他から操作できない
676デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 15:59:37.81ID:867zoX3ca さらに言えば自動でファイルを閉じる仕組みを作ったにせよ
表示が終わるまで5年間ファイルは閉じられる機会がない
これでもすべて自動でやれという意見は変わらないかな?
表示が終わるまで5年間ファイルは閉じられる機会がない
これでもすべて自動でやれという意見は変わらないかな?
677デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 16:00:10.16ID:uboI0CmN0 そういう話ではなくて意味が解らないという話だね。
例えばこれは何故当たり前なのかが不明。
>片づけた後に使うのは当たり前だな
>基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ
折角グラフィック表示するためにgを作ったのに、表示する前に解放するというのが意味不明だ。
Msのサンプルコードではまさにこのgに対してDRAWしている。これで表示が機能しているのに
この例では、PictureにCanvasを代入して表示が完了することになっている。表示する前にg
をdisposeしているから、gの役割が二つの例で意味が不明だ。
例えばこれは何故当たり前なのかが不明。
>片づけた後に使うのは当たり前だな
>基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ
折角グラフィック表示するためにgを作ったのに、表示する前に解放するというのが意味不明だ。
Msのサンプルコードではまさにこのgに対してDRAWしている。これで表示が機能しているのに
この例では、PictureにCanvasを代入して表示が完了することになっている。表示する前にg
をdisposeしているから、gの役割が二つの例で意味が不明だ。
678デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 16:04:31.21ID:867zoX3ca gは数が限られている
鉛筆みたいなもの
鉛筆が5本あってみなで共有している
使い終わったらすぐ放棄しないと絵が描けない人がでて困る
必要なくなったのに5年鉛筆を持ちっぱなしが望ましい状態だろうか?
鉛筆みたいなもの
鉛筆が5本あってみなで共有している
使い終わったらすぐ放棄しないと絵が描けない人がでて困る
必要なくなったのに5年鉛筆を持ちっぱなしが望ましい状態だろうか?
679デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 16:08:15.76ID:867zoX3ca 鉛筆5本をそれぞれが持ちっぱなしで
6個目のアプリが起動したらどうなるか?
鉛筆がないのでまともに動かない
6個目のアプリが起動したらどうなるか?
鉛筆がないのでまともに動かない
680デフォルトの名無しさん (ワッチョイ 2706-bSkF)
2018/01/25(木) 16:14:06.03ID:rPbpnmYW0 一つ勘違いがあるけど、newやコンストラクタとDispose()は直接関係ないよ
C#にdeleteは無いし、それに相当するものでもないので、インスタンスを解放する訳じゃない
Dispose()は主にガベージコレクション管理外となるアンマネージリソース等を解放するためのメソッド
そしてGraphicsはBitmapというキャンバスを弄るために用意したに過ぎない、表示するのはBitmapの中身
モノによってはDispose()すると内部バッファとかの書き出しとかもやるし、using等も使いつつ明示的にやりましょう
ちゃんとしたIDispose実装クラスならデストラクタ(ファイナライザ)でもDispose()を呼び出すコードが入ってるけど
タイミングがガベコレ次第になるし高コストなので明示的に呼ばれるとファイナライズキューから外すように設計されてる
C#にdeleteは無いし、それに相当するものでもないので、インスタンスを解放する訳じゃない
Dispose()は主にガベージコレクション管理外となるアンマネージリソース等を解放するためのメソッド
そしてGraphicsはBitmapというキャンバスを弄るために用意したに過ぎない、表示するのはBitmapの中身
モノによってはDispose()すると内部バッファとかの書き出しとかもやるし、using等も使いつつ明示的にやりましょう
ちゃんとしたIDispose実装クラスならデストラクタ(ファイナライザ)でもDispose()を呼び出すコードが入ってるけど
タイミングがガベコレ次第になるし高コストなので明示的に呼ばれるとファイナライズキューから外すように設計されてる
681デフォルトの名無しさん (アウアウエー Saf2-BM8y)
2018/01/25(木) 16:20:19.01ID:rd0qfL0Fa >>670
だから、「Disposeする必要があるのは自分がnewしたもの」という勝手な思い込みが間違ってる。
Disposeは作成したオブジェクトが必要なくなった時に呼ぶ。
オブジェクトを作成する方法はコンストラクタ呼び出しだけじゃない。
MSDNの説明にある通り、Graphics.FromImageもImage.FromFileも新しく作成されたオブジェクトを
返す。使いまわしされる共有オブジェクトを返すわけじゃない。
> どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
> とかできないのか?
usingステートメントを使う
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement
だから、「Disposeする必要があるのは自分がnewしたもの」という勝手な思い込みが間違ってる。
Disposeは作成したオブジェクトが必要なくなった時に呼ぶ。
オブジェクトを作成する方法はコンストラクタ呼び出しだけじゃない。
MSDNの説明にある通り、Graphics.FromImageもImage.FromFileも新しく作成されたオブジェクトを
返す。使いまわしされる共有オブジェクトを返すわけじゃない。
> どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
> とかできないのか?
usingステートメントを使う
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement
682デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 16:22:44.43ID:867zoX3ca C#でたころにGDIの限界までオブジェクト作ったことがあったな
画面がおかしくなって黒いところがあちこちにできる
リソースがないと怒られる
それともc++だったかないずれにせよ20年ぐらい前かな
画面がおかしくなって黒いところがあちこちにできる
リソースがないと怒られる
それともc++だったかないずれにせよ20年ぐらい前かな
683デフォルトの名無しさん (アウアウエー Saf2-BM8y)
2018/01/25(木) 16:22:53.90ID:rd0qfL0Fa あら、更新してない間にえらいレス増えてたw
684デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 16:27:14.19ID:uboI0CmN0 要するに
Canvas(これはBItmapと同じ?)
Image (これは、Bitmap以外にも多種多様な表示を扱う?)
Graphics (これは描画するための、関数群のようなもの?)
の違いが不明ってことかな。
上の例(DOBON)では
Picture.Image=Canvas
これでImageにビットマップを代入して描画が完了することになっている。
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここでgを使ってimgに描画したのでもうgはいらない。だからgはdisposeした。
ならわかるが、ここでimgをDsiposeするからわけがわからない。
Canvas(これはBItmapと同じ?)
Image (これは、Bitmap以外にも多種多様な表示を扱う?)
Graphics (これは描画するための、関数群のようなもの?)
の違いが不明ってことかな。
上の例(DOBON)では
Picture.Image=Canvas
これでImageにビットマップを代入して描画が完了することになっている。
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここでgを使ってimgに描画したのでもうgはいらない。だからgはdisposeした。
ならわかるが、ここでimgをDsiposeするからわけがわからない。
685デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 16:34:42.10ID:uboI0CmN0 あっ、コメントにちゃんと書いてあった。
//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここですでにCanvasに書いているんだな。
//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここですでにCanvasに書いているんだな。
686デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 16:37:20.54ID:867zoX3ca はい
解決したね良かったね
写真(img)を見て画用紙(canvs)に鉛筆(g)で絵を描いた
終わったので写真と鉛筆を片付けた
画用紙を額(picturebox1)に入れて飾りました
解決したね良かったね
写真(img)を見て画用紙(canvs)に鉛筆(g)で絵を描いた
終わったので写真と鉛筆を片付けた
画用紙を額(picturebox1)に入れて飾りました
687デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 16:43:44.03ID:uboI0CmN0 DOBONの例の機序
PictureBox1のサイズで空のBITMAPを作成する。
そのビットマップから描画オブジェクトのGraphics gを作成する。
ファイルからBitmapのImageを作成する。
gでそのImageをBITMAPに描画する。(BITMAPに描画したのでg、imgはいらない)
描画したBITMAPをPictureBOxにコピーする。
こういうことか。わかった。お騒がせしました。ペコリ
PictureBox1のサイズで空のBITMAPを作成する。
そのビットマップから描画オブジェクトのGraphics gを作成する。
ファイルからBitmapのImageを作成する。
gでそのImageをBITMAPに描画する。(BITMAPに描画したのでg、imgはいらない)
描画したBITMAPをPictureBOxにコピーする。
こういうことか。わかった。お騒がせしました。ペコリ
688デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
2018/01/25(木) 16:46:23.63ID:y1oROuxV0 やっぱりuingとか言ってた奴はガイジだっただろ?
689デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 16:47:36.29ID:uboI0CmN0 >gは数が限られている
それはおかしい。そんなことはどこにも書いてない。
もしそうだとしたら
Graphics g = Graphics.FromImage(canvas);
このコードが間違いってことになる。ここで数量をチェックしないといけない。
それはおかしい。そんなことはどこにも書いてない。
もしそうだとしたら
Graphics g = Graphics.FromImage(canvas);
このコードが間違いってことになる。ここで数量をチェックしないといけない。
690デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 16:48:50.78ID:867zoX3ca ガイジって言葉を使う奴のほうがどうかしてると思いますよ
691デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 16:52:18.84ID:uboI0CmN0 >C#でたころにGDIの限界までオブジェクト作ったことがあったな
>画面がおかしくなって黒いところがあちこちにできる 。リソースがないと怒られる
これはどういう意味? メモリーの限界ではなくて、GDI(ハードウエア)がもつレジスタの限界ってこと?
Graphicsって要するにGDIのリソースを確保するという意味なの?
>画面がおかしくなって黒いところがあちこちにできる 。リソースがないと怒られる
これはどういう意味? メモリーの限界ではなくて、GDI(ハードウエア)がもつレジスタの限界ってこと?
Graphicsって要するにGDIのリソースを確保するという意味なの?
692デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 16:53:13.35ID:867zoX3ca ググればいいよ思うよ
ここはチャットじゃない
ここはチャットじゃない
693デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
2018/01/25(木) 16:56:18.20ID:y1oROuxV0 ユーザフレンドリーと見せかけてウンコの代表みたいなクラスなので
真面目に考えないほうがいい
結局仕組みを理解するにはwin32の描画文化から知る必要がある
真面目に考えないほうがいい
結局仕組みを理解するにはwin32の描画文化から知る必要がある
694デフォルトの名無しさん (アウアウエー Saf2-BM8y)
2018/01/25(木) 16:56:28.77ID:rd0qfL0Fa >>689
しょうもないことに突っかかるなあw
数が限られてるって言い方が気に入らないなら高価な共有リソースって言えば分かる?
例えば巨大な配列とか、通信ポートとか、
そういった類のものを「一人」がずっと占有したら他の人が使いたい時に使えないよね?
しょうもないことに突っかかるなあw
数が限られてるって言い方が気に入らないなら高価な共有リソースって言えば分かる?
例えば巨大な配列とか、通信ポートとか、
そういった類のものを「一人」がずっと占有したら他の人が使いたい時に使えないよね?
695デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
2018/01/25(木) 16:57:30.81ID:y1oROuxV0 >>694
そんなくだらない例え話じゃなくてちゃんと現象を説明してあげればいいじゃない
そんなくだらない例え話じゃなくてちゃんと現象を説明してあげればいいじゃない
696デフォルトの名無しさん (ワッチョイ 2706-bSkF)
2018/01/25(木) 17:00:16.17ID:rPbpnmYW0 >>691
GDIはハードウェアっつーより…Windowsでの実装が気になるならReference Sourceでも読んで
メソッド内部では色々チェック入ってるし、しくじったら例外ぶん投げるようになってるから
GDIはハードウェアっつーより…Windowsでの実装が気になるならReference Sourceでも読んで
メソッド内部では色々チェック入ってるし、しくじったら例外ぶん投げるようになってるから
697デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 17:14:44.08ID:uboI0CmN0 例外ね。それならわかる。
698デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 17:19:27.46ID:uboI0CmN0 MSの説明はたったのこれだけw
■Graphics クラス
Encapsulates a GDI+ drawing surface. This class cannot be inherited.
GDI+って要するに、グラフィックコントローラを使うってことでしょ。でも鉛筆5本ってほどしょぼいことはないだろ。
■Graphics クラス
Encapsulates a GDI+ drawing surface. This class cannot be inherited.
GDI+って要するに、グラフィックコントローラを使うってことでしょ。でも鉛筆5本ってほどしょぼいことはないだろ。
699デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 17:20:48.94ID:867zoX3ca まだググってないのかよ…
700デフォルトの名無しさん (ワッチョイ 8783-fPTX)
2018/01/25(木) 18:18:42.61ID:bbltRTAq0 結局リソースリリースタイミングを制御しないといけなくなるわけで、ほんとGCって糞だよな。
701デフォルトの名無しさん (ワッチョイ 8783-fPTX)
2018/01/25(木) 18:20:51.02ID:bbltRTAq0 最近のMSのドキュメントはほんと不親切だよな。
幸運なことGDI+は不親切になる前に開発されたものだから、ググればMSも含めて大量にドキュメントが残ってる。
幸運なことGDI+は不親切になる前に開発されたものだから、ググればMSも含めて大量にドキュメントが残ってる。
702デフォルトの名無しさん (スッップ Sdda-urNB)
2018/01/25(木) 18:22:45.01ID:lTsrogoKd >>700
論理的に
論理的に
703デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 19:02:27.22ID:uboI0CmN0 ググってみた。
Application.SetCompatibleTextRenderingDefault(false);
というのが設定されるようになっていて、GDI+は糞だからGDIを使いなさいってことらしい。w
Application.SetCompatibleTextRenderingDefault(false);
というのが設定されるようになっていて、GDI+は糞だからGDIを使いなさいってことらしい。w
704デフォルトの名無しさん (ワッチョイ ae9a-fRM1)
2018/01/25(木) 19:09:48.12ID:MFAun2Gg0 >>703
文字列の描画の話だけ持ってきて何がしたい
https://dobon.net/vb/dotnet/control/setcompatibletextrenderingdefault.html
質問じゃないのならチラシの裏にでも書いてくれ
文字列の描画の話だけ持ってきて何がしたい
https://dobon.net/vb/dotnet/control/setcompatibletextrenderingdefault.html
質問じゃないのならチラシの裏にでも書いてくれ
705デフォルトの名無しさん (ワッチョイ 8783-fPTX)
2018/01/25(木) 19:23:49.81ID:bbltRTAq0 よく鉛筆5本とか言うけど、Win16ではDCは同時に使用できるのは5つまでだった。
だからDC取得したらその関数内ですぐ開放するのが当たり前だった。
だからDC取得したらその関数内ですぐ開放するのが当たり前だった。
706デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
2018/01/25(木) 20:28:49.03ID:y1oROuxV0 c#の{ }って中身が1文の場合、省略できるものとできないものってどうやって決まってるんでしょうか?
namespace、class、
for、switch、while、try、checked、fixed、unsafeなど
namespace、class、
for、switch、while、try、checked、fixed、unsafeなど
707デフォルトの名無しさん (ワッチョイ e39d-1ipv)
2018/01/25(木) 20:53:14.29ID:uboI0CmN0 省略しないこと。それが賢いプログラムスタイル。
708デフォルトの名無しさん (アウアウエー Saf2-BM8y)
2018/01/25(木) 21:11:21.97ID:LWlSA0E2a709愛知人
2018/01/25(木) 22:57:58.27 PictureBoxのMouseMoveイベントハンドラ内にInvalidate()を入れるとTimerのTickが止まります。何故ですか?
https://ideone.com/fWNMPP
https://ideone.com/fWNMPP
710デフォルトの名無しさん (アウアウウー Sa77-W10G)
2018/01/25(木) 22:59:36.29ID:867zoX3ca コード見てないけど
そんな暴れん坊見たいことはしないほうがいいと思う
そんな暴れん坊見たいことはしないほうがいいと思う
711愛知人
2018/01/25(木) 23:02:00.73 マウスの位置をフィールドに入れて間隔の短いタイマーで描画しますか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【外交】元台湾総統・馬英九氏、高市首相発言に「台湾を危険にさらす」台湾海峡の問題は「両岸の中国人が自ら話し合うべき」★2 [1ゲットロボ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★8 [ぐれ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- (´ん`)「公明党、お前だったのか。自民党から国民を守ってくれていたのは...」 [603416639]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 維新代表吉村、壊れたレコードになる「中国はカントリーリスク、中国人観光客がいなくても成り立つビジネスを目指せ」を何度も繰り返す [856698234]
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
- 死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
