C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Windows7/10の動作差異について

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■91346 / inTopicNo.1)  Windows7/10の動作差異について
  
□投稿者/ YUKI (1回)-(2019/06/17(Mon) 21:09:01)

分類:[VB.NET/VB2005 以降] 

お世話になります。
下記環境で作成したアプリをWin7、10でそれぞれ動かしたところ、
2点の挙動差が発生し、原因を調査しております。

■環境
 .NET Framework→4.6
 言語     →Visual Basic
 VisualStudio →2015
 OS      →Win7(32bit)、Win10(64bit)

■挙動差1
 Datagridのスクロール時、Win7は滑らかに動くがWin10はかくつく。
 ノブが先に動き、ちょっとしてから表示内容がリフレッシュされるイメージ。
 https://dobon.net/vb/dotnet/control/doublebuffered.html等を参考に
 ダブルバッファリングを有効にするとWin10も滑らかに動くことを確認済み。

■挙動差2
 form1(親)→form2(子)→form3(孫)と順にshowでモードレス起動後、
 form3からボタン押下でform1に一気に戻るために

  form3のボタンクリックイベントで「Me.owner.close()」
  →form2のFormClosingイベントで「Me.owner.show()」

 と処理すると、Win7は正常にform1を表示でき、一方Win10は真っ白な背景に
 一部コントロールのみが表示される。また、その状態でマウスを動かすと、
 カーソルの当たったボタンが追加で表示されていく。

ロジックはどちらも同じなのですが、調査が行き詰まっており・・・
追加で行うべき調査の観点や、またこれらはOS差異に起因する可能性があるか等、
ご教示いただけませんでしょうか?
引用返信 編集キー/
■91348 / inTopicNo.2)  Re[1]: Windows7/10の動作差異について
□投稿者/ KOZ (2回)-(2019/06/17(Mon) 22:08:58)
No91346 (YUKI さん) に返信
> ■挙動差1

アニメーション動作の設定の違いってことはないでしょうか?

> ■挙動差2

子から親を閉じるのはまずいと思います。
BeginInvoke で親にまかせるとうまく動きませんか?

・form3のボタンクリックイベント

Dim invoker As Action(Of Form) =
    Sub(f As Form)
        f.Close()
    End Sub
Me.Owner.BeginInvoke(invoker, Me.Owner)

・form2のFormClosingイベント

Dim invoker As Action(Of Form) =
    Sub(f As Form)
        f.Show()
    End Sub
Me.Owner.BeginInvoke(invoker, Me.Owner)


引用返信 編集キー/
■91350 / inTopicNo.3)  Re[2]: Windows7/10の動作差異について
□投稿者/ YUKI (2回)-(2019/06/18(Tue) 01:25:28)
早速のご回答感謝致します。
両方ともまだ試していない内容ですので、明日(本日)実施してみます。

ちなみに■挙動差2ですが、form3のボタンクリックで「Me.owner.close」の前に
form3からform2のownerに対しshow(Me.owner.owner.show)を指示すると正しく表示されるようでした。
(このような実装、望ましくないと思いますが既存の作りをあまり弄ってはいけない制約がありまして・・・)

showを「form2のfromClosingで呼ぶ」ではダメなのに、それより前の「form3でform2をcloseする前に呼ぶ」
ではうまくいくのが少し不思議です。

> 子から親を閉じるのはまずいと思います。
やはり本来は自画面を閉じるのは自画面であるべき、ということでしょうか?
showの場合closeでDisposeされる認識ですが、このパターンの場合、明確に子をcloseしたわけでないので、
子はちゃんとDisposeされるのか気になっています。
引用返信 編集キー/
■91364 / inTopicNo.4)  Re[3]: Windows7/10の動作差異について
□投稿者/ KOZ (3回)-(2019/06/18(Tue) 16:29:57)
No91350 (YUKI さん) に返信
> showを「form2のfromClosingで呼ぶ」ではダメなのに、それより前の「form3でform2をcloseする前に呼ぶ」
> ではうまくいくのが少し不思議です。

Show は問題ないと思います。
例としてあげたコードは処理を合わせただけです。


> やはり本来は自画面を閉じるのは自画面であるべき、ということでしょうか?

親から子を閉じたり、まったく関係ない画面を閉じるのは問題ないですよ。

子から親を閉じると子も閉じてしまいますが、子のロジックは動いているわけで、
Click イベントを抜けた後に何か処理が動いたら、そこで不都合が出てしまいます。

場合によってはイベント中に自分自身を閉じるのもまずい場合があります。

サードパーティ製のコントロールの中には、イベントのあと何か処理を行っている
ことがあるので、そういう場合には BeginInvoke で回避することができます。


引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ