トップ回答者
windows10にてVisualStudio2008 vb.netで開発したアプリでformにオートスクロールバーが表示されない

質問
-
VisualStudio2008 vb.netで開発したアプリをwindows10にインストールしました。.net3.5も一緒にインストールしたので、アプリそのものは動作するのですが、開発時にformのプロパティにてオートスクロールをtrue設定しているのもかかわらず、アプリのform画面にて、スクロールバーが表示されず、画面をスクロールすることが出来ずに困っております。また、textboxのimeコントロールを半角カタカナに指定しているのですが、全角ひらがな入力になってしまいます。このアプリをOSがwindows7のPCにインストールして確認すると、意図通りに動作します。windows10に対しての対処法等あるのでしょうか?ご指導のほど、宜しくお願い致します。
- 編集済み Fu_san 2017年3月31日 6:42
回答
-
Fu_san さん、
スクロールバーが表示されない環境は、120 DPI(96 DPI 超)ではないでしょうか?
解像度、DPI、AutoScaleMode などをお聞きした理由は次のとおりです。
自作ソフトで 96 DPI で表示すると正常でも、 120 DPI で表示すると(文字などが大きく表示され)フォームにケラレが発生することがあったためです。要するに 高DPI 対応できていなかったためでした。
VisualStudio で app.manifest を追加し、高 DPI 記述(コメント化されている)のコメントを解除し、フォームデザイナーで AutoScaleMode を Dpi にするだけで、96 DPI(100%)でも 120 DPI(125%)でも期待どおりに表示させることができました。
app.manifest の記述(変更後):<!-- コメントを解除 --> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application>
以上です。
北窓舎:芦田- 編集済み Ashidacchi 2017年4月3日 22:45
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年4月4日 4:06
- 回答としてマーク Fu_san 2017年4月12日 9:59
-
dpiAwareの設定が行われていない場合、96dpiで画面レイアウトが行われた上でディスプレイの解像度に合わせて引き延ばしが行われます。
Ashidacchiさんの提案されているdpiAwareの設定を行うと、ディスプレイの解像度で画面レイアウトが行われるように動作が変更されます。この設定で質問者さんの問題が解消される可能性は高いですが、その代わりに96dpi決めうちで座標計算等が行われているとdpiの違いにより表示がずれますが、その点は大丈夫でしょうか?
またWindows 8以降で半角カタカナの設定が効かないのは別件となります。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年4月4日 4:14
- 回答としてマーク Fu_san 2017年4月12日 9:58
-
Fu_san さん、
返答が遅くなりごめんなさい。(間に合えばいいのですが・・・)
取り急ぎ、当方の app.manifest を置いておきます。
<?xml version="1.0" encoding="utf-8"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- UAC マニフェスト オプション Windows のユーザー アカウント制御のレベルを変更するには、 requestedExecutionLevel ノードを以下のいずれかで置換します。 <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> requestedExecutionLevel 要素を指定すると、ファイルおよびレジストリの仮想化が無効にされます。 アプリケーションが下位互換性を保つためにこの仮想化を要求する場合、この要素を削除します。 --> <!-- ★ 管理者権限で実行すると D&D が効かなくなる ★ --> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> <applicationRequestMinimum> <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" /> <defaultAssemblyRequest permissionSetReference="Custom" /> </applicationRequestMinimum> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- このアプリケーションがテストされ、協働するようテストされた Windows バージョンの一覧。 適切な要素をコメント解除すると、最も互換性のある環境を Windows が自動的に選択します。--> <!-- Windows Vista --> <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> <!-- Windows 7 --> <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> <!-- Windows 8 --> <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> <!-- Windows 8.1 --> <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> <!-- Windows 10 --> <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> </application> </compatibility> <!-- アプリケーションが DPI 対応であり、それ以上の DPI で Windows によって自動的にスケーリングされないことを示します。 Windows Presentation Foundation (WPF) アプリケーションは自動的に DPI に対応し、オプトインする必要はありません。 さらに、この設定にオプトインする .NET Framework 4.6 を対象とする Windows Forms アプリケーションは、 app.config ファイルで 'EnableWindowsFormsHighDpiAutoResizing' 設定を 'true' に設定する必要があります。--> <!-- High DPI 対応のためコメントを解除 --> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application> <!-- Windows のコモン コントロールとダイアログのテーマを有効にします (Windows XP 以降) --> <!-- <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> --> </assembly>
なお、この app.manifest は Visual Studio 2015/2018 で作成したものです。手動で XML を入力したのではなく、
メニュー[プロジェクト] > [新しい項目の追加] して作りました。それに多少の修正をしています。
ご参考になれば幸いです。
___________________
北窓舎:芦田- 回答としてマーク Fu_san 2017年4月12日 9:44
すべての返信
-
-
Fu_san さん、
スクロールバーが表示されない環境は、120 DPI(96 DPI 超)ではないでしょうか?
解像度、DPI、AutoScaleMode などをお聞きした理由は次のとおりです。
自作ソフトで 96 DPI で表示すると正常でも、 120 DPI で表示すると(文字などが大きく表示され)フォームにケラレが発生することがあったためです。要するに 高DPI 対応できていなかったためでした。
VisualStudio で app.manifest を追加し、高 DPI 記述(コメント化されている)のコメントを解除し、フォームデザイナーで AutoScaleMode を Dpi にするだけで、96 DPI(100%)でも 120 DPI(125%)でも期待どおりに表示させることができました。
app.manifest の記述(変更後):<!-- コメントを解除 --> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application>
以上です。
北窓舎:芦田- 編集済み Ashidacchi 2017年4月3日 22:45
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年4月4日 4:06
- 回答としてマーク Fu_san 2017年4月12日 9:59
-
dpiAwareの設定が行われていない場合、96dpiで画面レイアウトが行われた上でディスプレイの解像度に合わせて引き延ばしが行われます。
Ashidacchiさんの提案されているdpiAwareの設定を行うと、ディスプレイの解像度で画面レイアウトが行われるように動作が変更されます。この設定で質問者さんの問題が解消される可能性は高いですが、その代わりに96dpi決めうちで座標計算等が行われているとdpiの違いにより表示がずれますが、その点は大丈夫でしょうか?
またWindows 8以降で半角カタカナの設定が効かないのは別件となります。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年4月4日 4:14
- 回答としてマーク Fu_san 2017年4月12日 9:58
-
お返事大変遅くなり申し訳ありません。
<?xml version="1.0" encoding="utf-8"?>
ここのところ、私ごとでバタバタしておりまして、やっと、明日、12日に先方に伺うことになりました。
manifestですが、VS2008 vb.netでは、どう作っていいのか分からず、結局、プロジェクトのプロパティ画面で
UAC設定の表示から,app.manifestを作成し、それに以下のように追記致しました。
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC マニフェスト オプション
Windows のユーザー アカウント制御のレベルを変更するには、
requestedExecutionLevel ノードを以下のいずれかで置換します。
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
下位互換性のためにファイルおよびレジストリの仮想化を
利用する場合は、requestedExecutionLevel ノードを削除してください。
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</asmv1:assembly>
これで大丈夫でしょうか?明日は、これでチャレンジしてきます。
-
Fu_san さん、
返答が遅くなりごめんなさい。(間に合えばいいのですが・・・)
取り急ぎ、当方の app.manifest を置いておきます。
<?xml version="1.0" encoding="utf-8"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- UAC マニフェスト オプション Windows のユーザー アカウント制御のレベルを変更するには、 requestedExecutionLevel ノードを以下のいずれかで置換します。 <requestedExecutionLevel level="asInvoker" uiAccess="false" /> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> requestedExecutionLevel 要素を指定すると、ファイルおよびレジストリの仮想化が無効にされます。 アプリケーションが下位互換性を保つためにこの仮想化を要求する場合、この要素を削除します。 --> <!-- ★ 管理者権限で実行すると D&D が効かなくなる ★ --> <requestedExecutionLevel level="asInvoker" uiAccess="false" /> </requestedPrivileges> <applicationRequestMinimum> <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" /> <defaultAssemblyRequest permissionSetReference="Custom" /> </applicationRequestMinimum> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- このアプリケーションがテストされ、協働するようテストされた Windows バージョンの一覧。 適切な要素をコメント解除すると、最も互換性のある環境を Windows が自動的に選択します。--> <!-- Windows Vista --> <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />--> <!-- Windows 7 --> <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />--> <!-- Windows 8 --> <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />--> <!-- Windows 8.1 --> <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />--> <!-- Windows 10 --> <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />--> </application> </compatibility> <!-- アプリケーションが DPI 対応であり、それ以上の DPI で Windows によって自動的にスケーリングされないことを示します。 Windows Presentation Foundation (WPF) アプリケーションは自動的に DPI に対応し、オプトインする必要はありません。 さらに、この設定にオプトインする .NET Framework 4.6 を対象とする Windows Forms アプリケーションは、 app.config ファイルで 'EnableWindowsFormsHighDpiAutoResizing' 設定を 'true' に設定する必要があります。--> <!-- High DPI 対応のためコメントを解除 --> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application> <!-- Windows のコモン コントロールとダイアログのテーマを有効にします (Windows XP 以降) --> <!-- <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> --> </assembly>
なお、この app.manifest は Visual Studio 2015/2018 で作成したものです。手動で XML を入力したのではなく、
メニュー[プロジェクト] > [新しい項目の追加] して作りました。それに多少の修正をしています。
ご参考になれば幸いです。
___________________
北窓舎:芦田- 回答としてマーク Fu_san 2017年4月12日 9:44
-
ありがとうございました。無事スクロールバーが表示されました。お客様にも喜んでいただけました。
DataGridView内のボタンの文字は改善されませんでしたが、これは、致命傷ではないので、OKをいただきました。
TextBoxの半角カタカナは、プログラムの方で対応することで了解をいただきました。
感謝を込めて回答としてのマークを押させていただきました。
そろそろ、VS2008はやめて2018にかえる時期になったのですかね。
起業して7年、慣れ親しんだ2008なので、思い出も多く、愛着のあるバージョンだったのですが、2018にチャレンジ
ですね。
ありがとうございました。