C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
全過去ログを検索
ヒット / 8件
(1-8 を表示)
<<
0
>>
■1712
Re[1]: WebClientインスタンスのプーリングについて
□投稿者/ 渋木宏明(ひどり) -
(2007/03/03(Sat) 21:42:15)
>
■
No1704
(Hirotow さん) に返信
> 同時にひとつしかダウンロードを行えない
WebClient.DownloadXXXAsync() を使えば、同時並行に複数のダウンロードを実行することが出来ます。
記事No.1704 のレス /過去ログ10より /
関連記事表示
削除チェック/
■9035
Re[3]: リストボックスの全アイテムをテーブルと差分を取り更新
□投稿者/ Jitta on the way -
(2007/10/17(Wed) 07:22:46)
うーん、そう思うから、なのか...
DataSetは、簡易データベースと考えてください。簡易データベースに対して行った変更は、そのままバックエンドのデータベースに対して行われます。
とりあえず、ADO.NETについて調べてみてください。MSDN ライブラリにも、「ADO.NET での開発」のようなトピックがあります。
記事No.8996 のレス /過去ログ21より /
関連記事表示
削除チェック/
■9036
Re[2]: HRESULT からの例外 0x8007007E
□投稿者/ カエデ -
(2007/10/17(Wed) 07:29:34)
mあさん、よねKENさん、ありがとうございます。
過去ログに書いてあった
>>そのDLLが必要とする別のDLLが実行環境に存在しないんじゃないでしょうか
については、調べたのですが、特に他に必要なDLLはありませんでした。
と、思っていたのですが、
>>C++のDLL内部で使っているMFCがあれば、それらが参照しているDLLも見えてないとまずい
と、いうことだったんですね。
要約ありがとうございます。
本日試したいと思います。
記事No.9023 のレス /過去ログ22より /
関連記事表示
削除チェック/
■92573
Re[1]: rgbによるbackcolorの表示
□投稿者/ 魔界の仮面弁士 -
(2019/10/08(Tue) 15:40:33)
■
No92572
(C#初心者 さん) に返信
> C#でのアプリケーション作成でtextboxのBackColorを
背景色だけでなく、文字色も考慮した方がよいかと。
> グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。
画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
処理中(ビジー状態)は直ちに反映されません。
100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。
> Thread.Sleep(100);
画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。
記事No.92572 のレス /過去ログ160より /
関連記事表示
削除チェック/
■92577
Re[2]: rgbによるbackcolorの表示
□投稿者/ 大谷刑部 -
(2019/10/08(Tue) 16:35:24)
■
No92573
(魔界の仮面弁士 さん) に返信
> ■
No92572
(C#初心者 さん) に返信
>>グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。
>
> 画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
> 処理中(ビジー状態)は直ちに反映されません。
なので、sleepとプロパティーの設定だけだと肉眼で確認する前に次の色に変わっているという現象になっていると想像されます。
> 100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
> Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
> Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。
こっちのやり方の方が結果的に書くコードはシンプルになるのかもしれませんね。
ただまあ、この程度の処理(白⇔黒)であれば、メモリ負荷とかにそれほどクリティカルな影響はないのforループでもいいんじゃないでしょうか?
3原色分全部ループ(255の3重ループ)とかなら明らかにやめた方がいいとは思いますが。
>>Thread.Sleep(100);
>
> 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
win7 32bitの環境で試した(refleshで肉眼確認)限りでは、
1000MS(1秒)では変化は細かいが若干間延びしてイライラする、10MSだと変化が速すぎてわかりずらい感じを受けるので
どういう手段をとるかは別として間隔は100MSで妥当な気はします。
ただし、マシンスペック、OSが32bitか64bitで見える印象は結構変わると思いますので、質問者さん自身で試して妥当な線を決めた方がいいと思います。
> また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。
クリックイベントならそこまでクリティカルに考えなくてもよいような(あくまで主観ですが)
Form_Load、XX_Activateなど画面全体の描画に絡むイベントでは絶対やらない方がいいですね。
グリッドにデータ反映とかでも行数多すぎるとたまに描画に絡むエラーになったりしますからね。
記事No.92572 のレス /過去ログ160より /
関連記事表示
削除チェック/
■92575
Re[2]: rgbによるbackcolorの表示
□投稿者/ C#初心者 -
(2019/10/08(Tue) 16:24:14)
■
No92573
(魔界の仮面弁士 さん) に返信
> ■
No92572
(C#初心者 さん) に返信
>>C#でのアプリケーション作成でtextboxのBackColorを
>
> 背景色だけでなく、文字色も考慮した方がよいかと。
>
>
>>グラデーション形式で黒から白、白から黒に変更するものを作成したいのですが、途中の表示がうまくいきません。
>
> 画面描画は「イベント処理を抜けた後」のアイドル時に行われるためです。
> 処理中(ビジー状態)は直ちに反映されません。
>
>
> 100 ミリ秒ごとに背景色を変えたいのであれば、ループ処理で実行するのではなく、
> Timer を画面に貼り、Interval を 100ミリ秒程度にした上で、
> Tick イベントが発生するたびに、BackColor を変更するようにしてみてください。
>
>
>>Thread.Sleep(100);
>
> 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
> また、Click イベントに長時間(数秒以上)の長い処理を行わせるのも避けましょう。
ご返信ありがとうございます。
先ほどtimerを使用したやり方を試したところ無事に表示することができました。
迅速に回答いただき本当にありがとうございます。
記事No.92572 のレス /過去ログ160より /
関連記事表示
削除チェック/
■92593
Re[3]: rgbによるbackcolorの表示
□投稿者/ 魔界の仮面弁士 -
(2019/10/09(Wed) 12:04:12)
2019/10/09(Wed) 16:47:18 編集(投稿者)
■
No92584
(大谷刑部 さん) に返信
> 問題はおっしゃるような厳密性がこのケースで必要かどうかです。
> 質問者もタイマーイベントで解決とおっしゃっているので、
理屈までいきなり説明しても追いきれないでしょうし、初心者向けには、
『Form 上で Sleep を呼んではいけない』と伝えるようにしています。
>>> 画面上 (UI スレッド)から Thread.Sleep を呼び出してはいけません。
この原則を守ることで問題になることは無いと思いますよ。
そのための代替案としては、
案1: Thread.Sleep(t) の代わりに await Task.Delay(t) を使ってもらう
案2: ループ処理を分割して、Timer でのイベント呼び出しに置き換えてもらう
案3: Sleep 処理を BackgroundWorker 内に押し込んで、BeginInvoke で BackColor を変更させる
などが思い当たります。
No92573
の提案は案2 でしたが
No92578
で案1 にも少しだけ言及しています。
=== 以下蛇足 ===
>>背景色が実際に変わるのは、
>>イベントを抜けた後(のアイドル時)になります。
> そんなことはないでしょう、refleshで見た目は変わりましたよ。
大文字小文字もスペルも間違っているようですが、それはさておき。
メッセージさえ処理されればよいので、Application.DoEvents(); や
textBox1.Update(); や textBox1.Refresh(); などを呼び出せば、
イベントを抜ける前であっても再描画処理が行われます。
それが先の回答の
>> Click イベントの最中に強制的に再描画させたいのであれば、
>> BackColor の変更後に Update メソッドを呼ぶなどの処置が必要です。
という箇所に当たります。この点については、Sleep を呼んでいるかどうかは影響しません。
一方、元質問者である C#初心者 さんのコードでは、Refresh や Update 等の
呼び出しが行われていたわけではありませんので、
>> イベントを抜けた後(のアイドル時)になります。
という説明にさせていただきました。
実際に、先の実験コードを使って確認してもいますが、
イベント脱出後でないと WndProc が処理されないことを確認しています。
ループ中で Update や Refresh した場合は、即時処理されるのですけれどね。
Refresh は Invalidate + Update を呼び出したのと同義となりますが、
今回のケースでは、BackColor の変更が発生しているわけなので、
Update だけでも事足りると思います。
とはいえ、Update や Refresh によって処理されるメッセージは描画関係に限定されます。
Label ならまだしも、今回の対象は TextBox ですから、
その他の処理(ユーザー入力等)も阻害されてしまうのはまずいので、
どちらにせよ Sleep の出番は無さそうです。
> 人の感覚次第かもしれませんが、質問者さんは色の移り変わりを見たいのでしょ?
> であれば25秒はさほど長いとは思いません。
> 仮に、お客さんに納品するPGとしても、そうそう、数秒でイラつくお客さんばっかりじゃないでしょう。
何か長い処理をしている間、次の処理が行えないとか、
砂時計カーソルになるとか、キャンセルできないといった話をしているなら、
それは別に構わないと思います。(それは単にアプリの仕様というだけの話)
背景色が変化していくアニメーション効果として、
25 秒間かけて変化させることもまったく問題ありません。問題なのは
25 秒間応答不能になってしまう点のみであり、「長い処理の間」も
メッセージループを回すような仕組みにさえなっていれば OK です。
(たとえば HWND_BROADCAST 向けのメッセージを止めてしまうと、
自アプリは良くても、他アプリに迷惑がかかります)
記事No.92572 のレス / END /過去ログ160より /
関連記事表示
削除チェック/
■97986
メッセージボックスの位置を設定する
□投稿者/ サーファー -
(2021/08/18(Wed) 12:29:35)
分類:[.NET 全般]
VB.NETを使用しております。
メッセージボックスの位置をウインドウの中央にしたいと考えています。
'
https://qiita.com/Apeworks/items/263645a599f3ed73567e
'
https://www.ipentec.com/document/csharp-show-message-box-in-center-of-owner-window
この辺りのコードを参考にして、
うまくウインドウ中心に表示させることはできました。
しかし、毎回ではなく、まれにですが、
CallbackOnCollectedDelegate が発生しました。
Message: マネージ デバッグ アシスタント 'CallbackOnCollectedDelegate' が 'D:\xxx.exe' で問題を検出しました。
追加情報:コールバックが、型 'xxx.MsgBoxSetPosition+Win32Native+HOOKPROC::Invoke' のガベージ コレクションされたデリゲートで行われました。これは、アプリケーションのクラッシュ、破損、およびデータの損失を発生させる可能性があります。デリゲートをアンマネージ コードに渡すとき、デリゲートは 2 度と呼び出されないことが確実になるまでマネージ アプリケーションによって維持されなければなりません。
というエラーが発生し、プログラムがクラッシュしてしまいます。
大体、プログラム起動後の一回目のメッセージボックスの表示でエラーが出ます。
http://answersweb.azurewebsites.net/MVC/Post/Thread/0c25dc53-b137-4146-88cf-61869670a128?category=csharpgeneralja
このページなどによると
GCによりProcが破棄されてしまうことが原因、というようなことが書かれてあります。
どのようにすれば、エラーが出ないようにできますか?
親記事 /過去ログ170より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-