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

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

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

Re[2]: 高DPIでAccessに接続すると画面サイズが変わってしまう


(過去ログ 140 を表示中)

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

■82274 / inTopicNo.1)  高DPIでAccessに接続すると画面サイズが変わってしまう
  
□投稿者/ NYT (1回)-(2016/12/26(Mon) 22:32:32)

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

高DPIでAccessに接続した際にフォームサイズやボタン大きさが変わってしまう

VB.NETとAccess2007を用いた環境で開発しております。
高DPI(文字サイズが150%)の環境でAccessに接続した際に
フォームサイズが小さくなったり、ボタンの文字サイズが小さくなってしまいます。
起動時はデザイナで見たままなのですが、コネクトした時点でこの現象が発生します。
何故コネクトすると自動スケーリング?が発生するのかが分からず困っており、
投稿させていただきました。サイズが変わらない様にする解決策はあるのでしょうか?
どなたかご教授お願い致します。

※フォームのAutoScaleModeはDPIです。

長くて申し訳ありませんが、以下ソースコードです。
Imports System.Data.OleDb

Public Class Form1

    ''' <summary>SQLコネクション</summary>
    Private _con As OleDbConnection = Nothing
    'データベースファイルパス
    Private MasterDataBasePath As String = IO.Path.Combine(My.Application.Info.DirectoryPath, "XXXMaster.accdb")

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Connect2007(MasterDataBasePath, "XXXX")
        MsgBox("接続完了")
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Disconnect()
        MsgBox("切断完了")
    End Sub

    ''' <summary>
    ''' DB接続
    ''' </summary>
    ''' <param name="dsn">データソース名</param>
    ''' <param name="pw">パスワード</param>
    ''' <param name="tot">タイムアウト値</param>
    ''' <remarks></remarks>
    Private Sub Connect2007(ByVal dsn As String,
                           Optional ByVal pw As String = "",
                           Optional ByVal tot As Integer = -1)

        'インスタンス生成
        If _con Is Nothing Then
            _con = New OleDbConnection
        End If
        'オープン済
        If _con.State = ConnectionState.Open Then
            Exit Sub
        End If
        'コネクトストリング 2007
        Dim cs As String = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                             & "Data Source=" & dsn & ";" _
                             & "Persist Security Info=False"
        'パスワード
        If pw.Trim <> "" Then
            cs &= ";Jet OLEDB:Database Password='" & pw & "'"
        End If
        'タイムアウト値
        If -1 < tot Then
            cs &= ";Connect Timeout=" & tot.ToString
        End If
        'コネクトストリング設定
        _con.ConnectionString = cs
        'DBオープン
        _con.Open() '←ここでフォームのサイズが突然かわってしまいます

    End Sub

    ''' <summary>
    ''' DB切断
    ''' </summary>
    Private Sub Disconnect()
        If _con Is Nothing Then Exit Sub
        _con.Close()
        _con.Dispose()
    End Sub

End Class

引用返信 編集キー/
■82275 / inTopicNo.2)  Re[1]: 高DPIでAccessに接続すると画面サイズが変わってしまう
□投稿者/ Azulean (751回)-(2016/12/26(Mon) 23:35:22)
DPI が高い場合、High-DPI(高 DPI)に対応しているとマニフェストに書いていないアプリケーションでは「DPI 仮想化」が働きます。
この状態では画面がボヤける代わり、レイアウトが崩れないという特徴があります。
なお、特定の API を呼び出すことでも、DPI 仮想化が解除することができるようになっています。

さて、「Microsoft.ACE.OLEDB を使うことでそうなるか?」ですが、私は探求していません。
海外のスレッドで同様の事例でいろいろと迷走した後、DPI 仮想化に絡む設定を変えることで対処したということが読み取れます。
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/aa0ec9f6-d645-401d-a223-e2045c3f1704/form-resizes-after-dataset-is-filled?forum=vbgeneral


高 DPI に対応して、マニフェストでその旨書けば、今回の事象は回避できるかもしれません。
ただし、DPI 仮想化によって保たれていたレイアウトが崩れる可能性があるので、そちらの対策は必要かもしれません。
https://blogs.msdn.microsoft.com/ttanaka/2014/08/22/dpihigh-dpi-3-12503/
引用返信 編集キー/
■82276 / inTopicNo.3)  Re[2]: 高DPIでAccessに接続すると画面サイズが変わってしまう
□投稿者/ NYT (3回)-(2016/12/27(Tue) 00:17:08)
Azulean様

ご回答有難うございます。

マニフェスト追加により解決できました!
DBコネクトによりAPIが呼ばれ「DPI 仮想化が解除」されてしまうのですね。

いやはや、私では絶対解決できませんでした…。
本当にありがとうございます。ここで質問して良かったです。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -