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

  • 質問

  • VisualStudio2008 vb.netで開発したアプリをwindows10にインストールしました。.net3.5も一緒にインストールしたので、アプリそのものは動作するのですが、開発時にformのプロパティにてオートスクロールをtrue設定しているのもかかわらず、アプリのform画面にて、スクロールバーが表示されず、画面をスクロールすることが出来ずに困っております。また、textboxのimeコントロールを半角カタカナに指定しているのですが、全角ひらがな入力になってしまいます。このアプリをOSがwindows7のPCにインストールして確認すると、意図通りに動作します。windows10に対しての対処法等あるのでしょうか?ご指導のほど、宜しくお願い致します。

    • 編集済み Fu_san 2017年3月31日 6:42
    2017年3月31日 6:41

回答

  • 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>
    以上です。
    北窓舎:芦田
    2017年4月3日 22:41
  • dpiAwareの設定が行われていない場合、96dpiで画面レイアウトが行われた上でディスプレイの解像度に合わせて引き延ばしが行われます。

    Ashidacchiさんの提案されているdpiAwareの設定を行うと、ディスプレイの解像度で画面レイアウトが行われるように動作が変更されます。この設定で質問者さんの問題が解消される可能性は高いですが、その代わりに96dpi決めうちで座標計算等が行われているとdpiの違いにより表示がずれますが、その点は大丈夫でしょうか?

    またWindows 8以降で半角カタカナの設定が効かないのは別件となります。

    2017年4月4日 3:20
  • 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
    2017年4月11日 23:49

すべての返信

  • Fu_san さん、

    開発なさったアプリを実行するPC(Windows 7 と 10)の画面関連について教えてください。
    それぞれのモニター解像度はいくつで、DPI の設定はどうなっているでしょうか?
    (100%=96DPI, 125%=120DPI など)

    また、アプリ側でフォームの AutoScaleMode はどうなっているでしょうか?
    (当方 VS 2008 がなく、VS 2015 では None/Font/Dpi/Inherit が選択できます)

    以上です。

    北窓舎:芦田

    2017年3月31日 10:19
  • お返事ありがとうございます。

    windows10のPCは現在、お客様のお会社にあるので、よく分かりません。HPの既製品を購入し、その初期設定のまま、納品しています。最近の流行りで、モニターは17インチのワイドなので、当方の開発機とは違います。
    当方の開発機の設定をご連絡いたします。
    モニター解像度:1600x1200ピクセル
    DPI:96DPI
    AutoScaleMode:Font
    となっております。今まで、このようなトラブルを経験していないので、チョット戸惑っております。
    不十分なお答えしかできず申し訳ありませんが、宜しくお願い致します。


    2017年4月3日 11:29
  • 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>
    以上です。
    北窓舎:芦田
    2017年4月3日 22:41
  • ありがとうございます!
    早速試してみます。ただ、お客様先に伺うのは少し先なので、現地での確認は少し先になりますが、心の曇りが晴れました。色々と調べては見たのですが、なかなかこの症例がなく、途方に暮れていたところなので非常にありがたかったです。
    確かに、DataGridViewに配置したボタンの表示もボタンから溢れて表示されていたので、芦田様のご指摘なのかと納得いたしました。
    早速、app.manifestに追記し試してみます。
    本当にありがとうございました。

    2017年4月4日 2:26
  • Fu_san さん、

    DataGridView に配置されたボタンの表示もケラレているなら、おそらく先方の DPI が 96超(DPI 120: 125%)に設定されているのだと推測いたします。 

    app.manifest を変更し(元々存在する行なので、コメントを外すだけ)とフォームの AutoScaleMode を Dpi になされば、先方でも Fu_san さんと同じように表示されると思います。

    もし、先方にお伺いし、結果がOKになれば、回答としてマークしていただけるとウレシイです・・・ (^-^;

    北窓舎:芦田
    2017年4月4日 2:37
  • dpiAwareの設定が行われていない場合、96dpiで画面レイアウトが行われた上でディスプレイの解像度に合わせて引き延ばしが行われます。

    Ashidacchiさんの提案されているdpiAwareの設定を行うと、ディスプレイの解像度で画面レイアウトが行われるように動作が変更されます。この設定で質問者さんの問題が解消される可能性は高いですが、その代わりに96dpi決めうちで座標計算等が行われているとdpiの違いにより表示がずれますが、その点は大丈夫でしょうか?

    またWindows 8以降で半角カタカナの設定が効かないのは別件となります。

    2017年4月4日 3:20
  • お返事大変遅くなり申し訳ありません。
    ここのところ、私ごとでバタバタしておりまして、やっと、明日、12日に先方に伺うことになりました。
    manifestですが、VS2008 vb.netでは、どう作っていいのか分からず、結局、プロジェクトのプロパティ画面で
    UAC設定の表示から,app.manifestを作成し、それに以下のように追記致しました。

    <?xml version="1.0" encoding="utf-8"?>
    <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>

    これで大丈夫でしょうか?明日は、これでチャレンジしてきます。


    2017年4月11日 13:17
  • 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
    2017年4月11日 23:49
  • ありがとうございました。無事スクロールバーが表示されました。お客様にも喜んでいただけました。
    DataGridView内のボタンの文字は改善されませんでしたが、これは、致命傷ではないので、OKをいただきました。
    TextBoxの半角カタカナは、プログラムの方で対応することで了解をいただきました。
    感謝を込めて回答としてのマークを押させていただきました。

    そろそろ、VS2008はやめて2018にかえる時期になったのですかね。
    起業して7年、慣れ親しんだ2008なので、思い出も多く、愛着のあるバージョンだったのですが、2018にチャレンジ
    ですね。

    ありがとうございました。

    2017年4月12日 9:53
  • 佐祐理さま
    今日、お客様の確認の元、無事にスクロールバーが表示できました。
    座標計算等はしていないので、問題はありませんでした。
    半角カタカナについては、プログラムで対応いたしました。

    ご心配いただき、誠にありがとうございました。


    • 編集済み Fu_san 2017年4月14日 3:46
    2017年4月12日 9:58
  • Fu_san さん、

    おめでとうございます!! お役に立ててよかったです。

    #「起業して7年」と書いておられます。
     当方、還暦を数年過ぎたロートル、個人事業主となって8年、売れないソフトに苦戦する毎日です。

    お互い、頑張りましょう。ただし、肩の力を抜いて・・・
    ___________
    北窓舎:芦田
    2017年4月12日 10:18
  • ありがとうございます。
    私も今年で64歳になります。幸いなことに、お得意様を確保出来たので、家内と二人、食べるには困らない程度には暮らさせていただいております。(笑)
    お得意先様には、後30年面倒見ろと言われて、嬉しいような、困ったような日々です。
    のんびりやっていきたいと考えておりますので、今後とも宜しくご指導の程、お願い致します。

    • 編集済み Fu_san 2017年4月13日 12:43
    2017年4月13日 12:42