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

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

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

Re[12]: EnableVisualStylesについて


(過去ログ 131 を表示中)

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

■77762 / inTopicNo.1)  EnableVisualStylesについて
  
□投稿者/ かわうそ (1回)-(2015/11/21(Sat) 05:23:47)

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

2015/11/21(Sat) 05:36:52 編集(投稿者)

VB.NET 4.5にてWindowsアプリケーションを勉強中です。
EnableVisualStyles()について質問があります。

先日、ユーザコントロールというものを新たに学んだので試しにコマンドボタンを
ユーザコントロールにして同じ処理を何度も記載しないでいいように変更しました。

開発PC以外のPCでも、ユーザコントロールにする前はきちんと丸みを帯びた
かたちになっていたのですが、変更したところEnableVisualStylesの設定が
きかなくなってしまいました。(開発PCでは上手く表示できています)

いろいろ検索してみましたが原因と回避先がわかりません。
なにかヒントになるようなサイトがあれば教えていただけますか。
引用返信 編集キー/
■77763 / inTopicNo.2)  Re[1]: EnableVisualStylesについて
□投稿者/ Azulean (543回)-(2015/11/21(Sat) 07:45:36)
残念ながら、今書かれている内容からは起きる因子は見えません。

No77762 (かわうそ さん) に返信
> 開発PC以外のPCでも、ユーザコントロールにする前はきちんと丸みを帯びた
> かたちになっていたのですが、変更したところEnableVisualStylesの設定が
> きかなくなってしまいました。(開発PCでは上手く表示できています)

コピーしている exe と 開発 PC で実行している exe は同じものですか?
試しに、コピーする前にその exe を開発 PC でエクスプローラーから実行した場合でもうまく表示できていますか?
(開発 PC では Visual Studio から実行していると言うことはないか?)


これが否定されるのであれば、「ユーザーコントロールにする」という部分を含めて、新規のプロジェクトで再現するかどうか試してみてください。
再現するのであれば、その手順(どのプロジェクトを選んで作成し、どのような操作をし、どのようにコーディングしたか)を共有してみてください。
引用返信 編集キー/
■77765 / inTopicNo.3)  Re[2]: EnableVisualStylesについて
□投稿者/ かわうそ (2回)-(2015/11/21(Sat) 18:26:23)
2015/11/21(Sat) 18:31:33 編集(投稿者)
Azuleanさん

返信ありがとうございます。

おっしゃる通り、開発PCではVSから実行していたため実行ファイルから起動させてみました。
それでもやはり開発PCではうまく表示できています。

そこで、新たにプロジェクトを作成し再現性を確認しました。
難しいことはしてないのですが、やはりうまくいきません。
長文になりますが以下に作成した内容をはりつけます。(処理は作成していないので省略しています。)
下記の内容で、データピッカーはカレンダーの画像を表示してくれなくてボタンは丸くなってくれません。
作成をSurface Proで行っているのはなにか関係があるのでしょうか...


開発PC:Win8 64bit Community 2013使用 
上手く表示しないPC(4.5FreamWorkインストール済):Win7 SP1 32bit

<手順>
1.新しいプロジェクト作成(Windowsフォームアプリケーション)→デスクトップに「test」という名前で保存
2.ユーザコントロール作成(ボタン、データピッカー)
3.ビルド
4.フォーム1に作成したユーザコントロールを配置
5.起動クラス(クラス1)作成
6.ビルド
7.プロジェクトのプロパティを変更
  アプリケーションフレームワークを有効にするをオフ
  スタートアップオブジェクトを「Sub Main」に変更
8.ビルド

<コーディング内容>
■起動クラス
Public Class Class1
    Shared Sub main()

        Application.EnableVisualStyles()
        Application.DoEvents()
        Application.Run(New Form1)


    End Sub
End Class

■ユーザコントロール(データピッカー:継承しない)※作成したのみで内容はありません。デザインのみはりつけ
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class UserControl1
    Inherits System.Windows.Forms.UserControl

    'UserControl はコンポーネント一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。  
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.DateTimePicker1 = New System.Windows.Forms.DateTimePicker()
        Me.SuspendLayout()
        '
        'DateTimePicker1
        '
        Me.DateTimePicker1.Location = New System.Drawing.Point(3, 3)
        Me.DateTimePicker1.Name = "DateTimePicker1"
        Me.DateTimePicker1.Size = New System.Drawing.Size(200, 22)
        Me.DateTimePicker1.TabIndex = 0
        '
        'UserControl1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 15.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.Controls.Add(Me.DateTimePicker1)
        Me.Name = "UserControl1"
        Me.Size = New System.Drawing.Size(209, 31)
        Me.ResumeLayout(False)

    End Sub
    Friend WithEvents DateTimePicker1 As System.Windows.Forms.DateTimePicker

End Class

■ユーザコントロール(ボタン:継承する)※作成したのみで内容はありません。デザインのみはりつけ
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class UserControl2
    Inherits System.Windows.Forms.Button

    'UserControl はコンポーネント一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。  
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
        'Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    End Sub

End Class

■フォーム1(デザイン)
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。  
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.UserControl11 = New test.UserControl1()
        Me.UserControl21 = New test.UserControl2()
        Me.SuspendLayout()
        '
        'UserControl11
        '
        Me.UserControl11.Location = New System.Drawing.Point(54, 27)
        Me.UserControl11.Name = "UserControl11"
        Me.UserControl11.Size = New System.Drawing.Size(209, 31)
        Me.UserControl11.TabIndex = 0
        '
        'UserControl21
        '
        Me.UserControl21.Location = New System.Drawing.Point(54, 90)
        Me.UserControl21.Name = "UserControl21"
        Me.UserControl21.Size = New System.Drawing.Size(148, 71)
        Me.UserControl21.TabIndex = 1
        Me.UserControl21.Text = "UserControl21"
        Me.UserControl21.UseVisualStyleBackColor = True
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 15.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(282, 253)
        Me.Controls.Add(Me.UserControl21)
        Me.Controls.Add(Me.UserControl11)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub
    Friend WithEvents UserControl11 As test.UserControl1
    Friend WithEvents UserControl21 As test.UserControl2

End Class



引用返信 編集キー/
■77766 / inTopicNo.4)  Re[3]: EnableVisualStylesについて
□投稿者/ Azulean (544回)-(2015/11/22(Sun) 01:01:05)
Win8.1+VS2013 で作成し、Win7 の仮想マシンで見てましたが、言われているような表示、あるいは違和感のある表示にはなりませんでした。
(個人的にはそのコードで、ユーザコントロールか否かで表示が変わらないような気はするのですが…)

・ユーザーコントロールにしなければきちんと表示されるというのは現状もその通り?
 新規にユーザーコントロール化しないプロジェクトを作って、Win7 に持って行き、期待通りの表示となることは維持できているか?
 (Win7 環境の状態が変わっていないかの確認)
・片方のユーザーコントロールをなくした場合は、他方の残した方はちゃんと表示されないか?

引用返信 編集キー/
■77767 / inTopicNo.5)  Re[4]: EnableVisualStylesについて
□投稿者/ かわうそ (3回)-(2015/11/22(Sun) 03:18:05)
Azuleanさん

ありがとうございます。
実際にご確認までしていただけて大変感謝です。

ユーザコントロールにしていないコントロールで確認してみましたが、期待とおりの表示にはなりませんでした。
片方のコントロールを削除しても同様です。こうなってくると、前にできていたほうが不思議です。

それともそもそもとして私がデフォルトの表示を勘違いしているのでしょうか。
ボタンでは角が丸いか、データピッカーではカレンダーの画像(プルダウンででてくるカレンダーではなく、▼のとなりにある画像です)が
でているかでていないかで確認しているのですが、なにか勘違いしていますでしょうか?

あとは、プロジェクトを違うPCにコピーしてビルドしてみてどうなるかぐらいしか思い付かないけど
他にVSを入れられるようなPCをもってないんですよね...。

本件に限らず、開発PCでの見た目と他のPCでの見た目が異なってしまうという事象はよくあることなんですか?
引用返信 編集キー/
■77768 / inTopicNo.6)  Re[5]: EnableVisualStylesについて
□投稿者/ Azulean (545回)-(2015/11/22(Sun) 08:27:36)
2015/11/22(Sun) 08:28:15 編集(投稿者)

No77767 (かわうそ さん) に返信
> それともそもそもとして私がデフォルトの表示を勘違いしているのでしょうか。
> ボタンでは角が丸いか、データピッカーではカレンダーの画像(プルダウンででてくるカレンダーではなく、▼のとなりにある画像です)が
> でているかでていないかで確認しているのですが、なにか勘違いしていますでしょうか?

コントロールの表示は OS のバージョンや使用しているテーマで変わることがあります。
たとえば、Windows 7 でクラシックテーマと、Windows 7 の Aero テーマを比較すると見た目がだいぶ変わります。


> あとは、プロジェクトを違うPCにコピーしてビルドしてみてどうなるかぐらいしか思い付かないけど
> 他にVSを入れられるようなPCをもってないんですよね...。

たぶん、今の見た目の差は、そのマシンでビルドしても変わらないかと。
引用返信 編集キー/
■77771 / inTopicNo.7)  Re[6]: EnableVisualStylesについて
□投稿者/ かわうそ (4回)-(2015/11/22(Sun) 10:21:27)
Azulean さん

おはようございます。
おつきあいいただきありがとうございます。

> コントロールの表示は OS のバージョンや使用しているテーマで変わることがあります。
> たとえば、Windows 7 でクラシックテーマと、Windows 7 の Aero テーマを比較すると見た目がだいぶ変わります。

EnableVisualStyles()のメソッドを使った場合、本来であればXP風の画面に統一されるはずだと思ってます。
この指定をしない場合は、PCに依存するということだと理解しました。


>>あとは、プロジェクトを違うPCにコピーしてビルドしてみてどうなるかぐらいしか思い付かないけど
>>他にVSを入れられるようなPCをもってないんですよね...。
> たぶん、今の見た目の差は、そのマシンでビルドしても変わらないかと。

他のPCでビルドしても変わらないということでしょうか。
そうすると、他に根本的な原因があるはずということですよね。
EnableVisualStyles()の他に、なにかプロパティ等で思い付くことがあったらお手数ですが教えていただけますか。
引用返信 編集キー/
■77777 / inTopicNo.8)  Re[7]: EnableVisualStylesについて
□投稿者/ 魔界の仮面弁士 (570回)-(2015/11/22(Sun) 14:25:33)
2015/11/22(Sun) 14:54:39 編集(投稿者)

# おっと、オールセブンのキリ番ゲットー。

No77771 (かわうそ さん) に返信
> 他のPCでビルドしても変わらないということでしょうか。
過去にも、デスクトップ上に「test」という exe を作った事はありませんか?

作成された exe のプロパティを開き、「互換性」タブの
チェックボックスが全て off になっているかどうかを確認してみてください。

ここで「視覚テーマを無効にする」が on になっていると、
EnableVisualStyles() しても、クラシックテーマで表示されます。


この設定はレジストリにフルパスで保存されているため、
過去に互換設定で視覚テーマを無効化したとすれば、たとえ EXE を
削除したとしても、フォルダとファイル名が同じものを再配置すると、
前回設定された情報が引き継がれることになります。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers



> EnableVisualStyles()のメソッドを使った場合、本来であればXP風の画面に統一されるはずだと思ってます。
> この指定をしない場合は、PCに依存するということだと理解しました。
指定した場合は、OS のテーマ設定に依存します。
指定しない場合、OS の画面設定に依存します。

Windows 7 のコマンドラインで言えば、
前者は「control DESKTOP」
後者は「control COLOR」
で指定された内容に左右されます。
引用返信 編集キー/
■77780 / inTopicNo.9)  Re[8]: EnableVisualStylesについて
□投稿者/ かわうそ (5回)-(2015/11/22(Sun) 22:52:17)
魔界の仮面弁士さん

ご返信ありがとうございます。

exeのプロパティ、互換性を確認しました。
チェックボックスは全てOffになっております。
また「視覚テーマを無効にする」という文言が見当たりません。

EnableVisualStylesを指定してもOSに依存するのですね。統一されるのかと思っていました。
そうすると、業務で使用している人は大変ですよね。
画面のサイズやコントロールがかわって、デザインがくずれてしまうということが出てきそうです。

しかし、見えないところで互換性が保たれてたり処理の内容が見えないから似た命令のうち
どれを使うのが効率的なのかとか、"使いこなす"まで時間がかかりそうです。
便利になってよいのだけれど直感的に理解しづらい部分もありますね。

[プロパティ:互換性タブ]
・互換モードでこのプログラムを実行する
・カラーモードを制限する
・640*480の解像度で実行する
・高DPI設定では画面のスケーリングを無効にする
・管理者としてこのプログラムを実行する
・このプログラムでOneDreiveファイルを操作できるようにする
引用返信 編集キー/
■77784 / inTopicNo.10)  Re[9]: EnableVisualStylesについて
□投稿者/ かわうそ (6回)-(2015/11/23(Mon) 04:01:42)
逆のパターンを確認しました。(Win7でビルドしたexeをwin8で実行)
今度はwin8でDataTimePickerのカレンダー画像(▼のとなりにあるもの)が表示されなくなりました。
画面の表示はOSに依存するものと教えていただきましたが、この現象は不思議です。
こういうものなのでしょうか?
引用返信 編集キー/
■77785 / inTopicNo.11)  Re[10]: EnableVisualStylesについて
□投稿者/ Azulean (546回)-(2015/11/23(Mon) 08:31:27)
No77784 (かわうそ さん) に返信
> 今度はwin8でDataTimePickerのカレンダー画像(▼のとなりにあるもの)が表示されなくなりました。

捉え違いしていたのかもしれませんが、もしかしてウィンドウサイズが変わっていますか?
解像度の設定あたりからいける、「すべての項目のサイズを変更する」といったいわゆる DPI の設定が違うと見た目が変わってきます。
(Surface 系はデフォルト DPI が高く設定されています)

AutoScaleMode である程度は調整されますが、完璧に動くわけではありません。
引用返信 編集キー/
■77787 / inTopicNo.12)  Re[11]: EnableVisualStylesについて
□投稿者/ かわうそ (7回)-(2015/11/23(Mon) 10:09:46)
Azuleanさん

AutoScaleModeはNoneに指定していたのですが、画面サイズがかわるなって思ってたんです。
このせいでしたか!
継承しないパターンでサイズを大きくとったら画像も表示されました。
ボタンの見栄えが違うのは、魔界の仮面弁士さんにご教授いただいたテーマ設定の違いなのかなと
思っています。
だけど、作成するPCによって見栄えがかわるのは困りますね。サイズが横のびするとかならまだしも
コントロールがきれちゃうなんて確認のしようがないですよね。
引用返信 編集キー/
■77790 / inTopicNo.13)  Re[12]: EnableVisualStylesについて
□投稿者/ かわうそ (8回)-(2015/11/23(Mon) 13:17:01)
コントロールが正しく表示されない件については、理解できたので解決とさせていただきます。
Azuleanさん、魔界の仮面弁士さん ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -