DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Form<Sizable>でWidht=116以下にできない

環境/言語:[XP HOME]
分類:[.NET]

VB.NET + XP HOMEで開発しています。
<Form>の<FormBorderStyle>が<Sizeable>で<Widht=50>にようと思いましたが、
<116>以下にできません。
<MinimumSize>は<0,0>です。
また、その他の<FormBorderStyle>でも、最小<Widht>に規制が在るみたいです。
どうしたら、好きなサイズまで縮小できるのでしょうか?
■No3031に返信(かもめさんの記事)
> VB.NET + XP HOMEで開発しています。
> <Form>の<FormBorderStyle>が<Sizeable>で<Widht=50>にようと思いましたが、
> <116>以下にできません。
> <MinimumSize>は<0,0>です。
> また、その他の<FormBorderStyle>でも、最小<Widht>に規制が在るみたいです。
> どうしたら、好きなサイズまで縮小できるのでしょうか?
>

そんなはずはないとおもうんですけど。
■No3034に返信(りょうさんの記事)
> ■No3031に返信(かもめさんの記事)
>>VB.NET + XP HOMEで開発しています。
>><Form>の<FormBorderStyle>が<Sizeable>で<Widht=50>にようと思いましたが、
>><116>以下にできません。
>><MinimumSize>は<0,0>です。
>>また、その他の<FormBorderStyle>でも、最小<Widht>に規制が在るみたいです。
>>どうしたら、好きなサイズまで縮小できるのでしょうか?
>>
>
> そんなはずはないとおもうんですけど。

ご返答ありがとうございます。
デザインモードで最小にして調べたところ

<FormBorderStyle> <最小Widht> <最小Height>
None  3 3
FixedSingle 3 3
Fixed3D 3 3
FixedDialod 3 3
Sizable 116 27
FixedTollWindow 3 3
SizableToolWindow 24 27

上記のようになっていました。
自分のところだけかなぁ…。
よければ、確認願います。

※ちなみにいろいろ調べて"SystemInformation.MinimumWindowSize"という
ものを見つけましたが、すべてのモードで<Widht=116 Height=27>でした。
関係ない…?!
2004/03/13(Sat) 21:01:05 編集(投稿者)

 かもめさん、こんばんは。深山と申します。

> <Form>の<FormBorderStyle>が<Sizeable>で<Widht=50>にようと思いましたが、
> <116>以下にできません。
> <MinimumSize>は<0,0>です。
> また、その他の<FormBorderStyle>でも、最小<Widht>に規制が在るみたいです。

 画面表示を行うに当たり、最低限のエリアは MinimumSize プロパティの値に関わらず
確保されるようです。
# Sizable になってると、タイトルバーのない状態にしてもこの範囲が変わらないのは
# 個人的にしっくりこないのですが‥‥それとも 2003 だと違うのかなぁ?

 Width を 50 にしたいという理由が判りませんのでご要望には添えないかも知れませんけども
単純に見た目だけの問題なのであれば、こちらの Tips の方法で変えることができますよ。
# サイズ変更が可能な状態ですと操作した感じが不自然になってしまうでしょうけど(^_^;)

フォームやコントロールの形を変える
http://dobon.net/vb/dotnet/form/formregion.html


> デザインモードで最小にして調べたところ
> 
> <FormBorderStyle>   <最小Widht>  <最小Height>
> None                    3             3
> FixedSingle              3             3
> Fixed3D                  3             3
> FixedDialod              3             3
> Sizable                  116           27
> FixedTollWindow          3             3
> SizableToolWindow        24            27
# 因みにこちらで試したところ、デザイン時の値は
# <FormBorderStyle>   <最小Widht>  <最小Height>
# Sizable            112        27
# SizableToolWindow    8        8
# その他            0        0
# のようになりました。他はさておき、Sizable の微妙な違いはなんだろう‥‥?(ーー;)
# あ、0 * 0 のものは実行時には 6 * 6 になったことを追記しておきます。
> # のようになりました。他はさておき、Sizable の微妙な違いはなんだろ
これに関してはWindowsの画面の設定やOSの違い等にもよります。
例えば、WindowsXPで標準のビジュアルスタイルが適用されている場合、
SystemInformation.MinimumWindowSizeは(123,34)を返します。
ビジュアルスタイルを適用しない(クラッシックスタイル)場合、(112,24)です。
ちなみにXPのスキンの種類やタイトルバーのフォント、タイトルのボタンのサイズを
変更した場合もこの値に影響します。
■No3038に返信(深山さんの記事)
> 2004/03/13(Sat) 21:01:05 編集(投稿者)
>
>  かもめさん、こんばんは。深山と申します。
>
>><Form>の<FormBorderStyle>が<Sizeable>で<Widht=50>にようと思いましたが、
>><116>以下にできません。
>><MinimumSize>は<0,0>です。
>>また、その他の<FormBorderStyle>でも、最小<Widht>に規制が在るみたいです。
>
>  画面表示を行うに当たり、最低限のエリアは MinimumSize プロパティの値に関わらず
> 確保されるようです。
> # Sizable になってると、タイトルバーのない状態にしてもこの範囲が変わらないのは
> # 個人的にしっくりこないのですが‥‥それとも 2003 だと違うのかなぁ?
>
>  Width を 50 にしたいという理由が判りませんのでご要望には添えないかも知れませんけども
> 単純に見た目だけの問題なのであれば、こちらの Tips の方法で変えることができますよ。
> # サイズ変更が可能な状態ですと操作した感じが不自然になってしまうでしょうけど(^_^;)
>
> フォームやコントロールの形を変える
> http://dobon.net/vb/dotnet/form/formregion.html
>

> # 因みにこちらで試したところ、デザイン時の値は
> # <FormBorderStyle> <最小Widht> <最小Height>
> # Sizable 112 27
> # SizableToolWindow 8 8
> # その他 0 0
> # のようになりました。他はさておき、Sizable の微妙な違いはなんだろう‥‥?(ーー;)
> # あ、0 * 0 のものは実行時には 6 * 6 になったことを追記しておきます。
>

ありがとうございました。
現在開発しているものは、Form上にDataGrid<Colが6列>を表示させているものが、
画面上で邪魔になるためColを1列ほど表示させ、後はDataGridはMouseの位置でTooltip表示で表示させようとしています。その1列表示が約50でした。

上記の方法ではやはり操作性・見栄えが悪くなってしまうので、
FixedSingleで<無理やり>Sizable同様のリサイズ動作の実装を試みます。
>FixedSingleで<無理やり>Sizable同様のリサイズ動作の実装を試みます。

FixedSingleでFormの端にPanelをつけMouseMoveでFormをリサイズしてみました。
結果は、Widht=116以下にできませんでした。
無理なのかなぁ…?
2004/03/14(Sun) 00:29:07 編集(投稿者)

> No3040
> これに関してはWindowsの画面の設定やOSの違い等にもよります。
> 例えば、WindowsXPで標準のビジュアルスタイルが適用されている場合、
> SystemInformation.MinimumWindowSizeは(123,34)を返します。
> ビジュアルスタイルを適用しない(クラッシックスタイル)場合、(112,24)です。
> ちなみにXPのスキンの種類やタイトルバーのフォント、タイトルのボタンのサイズを
> 変更した場合もこの値に影響します。

 あ、なるほど。画面のデザイン等に影響されるんですね。少し考えれば判りそうなものなのに
全然気付きませんでした‥‥(///)
 Sugiさん、情報ありがとうございますm(__)m

# ということは SetWindowPos API でやっても‥‥(実験してみる)‥‥やっぱり同じ制限を
# 受けるんですね。
#  先ほど No3037 の
> ※ちなみにいろいろ調べて"SystemInformation.MinimumWindowSize"という
> ものを見つけましたが、すべてのモードで<Widht=116 Height=27>でした。
# を拝見した時に SystemInformation.MinimumWindowSize のヘルプにも目を通したのですけど、
# 理解できてなかったようです(汗)


> No3042
> FixedSingleでFormの端にPanelをつけMouseMoveでFormをリサイズしてみました。
> 結果は、Widht=116以下にできませんでした。

 あれ、できませんか?
‥‥うわ、先ほど私 No3038 で嘘言ってますね(大汗)
> # あ、0 * 0 のものは実行時には 6 * 6 になったことを追記しておきます。
 このとき FixedToolWindow でだけ試して、他も同じだろうと実行してなかったようです。
申し訳ありませんm(__)m>かもめさん

 で、特に問題ないようでしたら、 FixedToolWindow でやってみてはいかがでしょう?
 Form に DataGrid を置いて Dock プロパティを Fill にした上で、以下のようなコードで
なんとなくは動作しました。
# ちゃんとした検証はしてませんけど(^_^;)

    Private dragFlag As Boolean

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If e.X = Me.ClientSize.Width And e.Y = Me.ClientSize.Height Then
            Me.Cursor = Cursors.SizeNWSE
        ElseIf e.X = Me.ClientSize.Width Then
            Me.Cursor = Cursors.SizeWE
        ElseIf e.Y = Me.ClientSize.Height Then
            Me.Cursor = Cursors.SizeNS
        End If
    End Sub

    Private Sub Form1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        If Not Me.Cursor.Equals(Cursors.Default) Then
            dragFlag = True
        End If
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        If dragFlag Then
            Me.Size = New Size(e.X, e.Y)
            dragFlag = False
        End If
    End Sub


■追記
# って、これだとマウスカーソルが途中で変わる上に、カーソルとサイズ変更のされ方が一致しないや(^_^;;;)
機能的に、ControlBoxの最小化・最大化・閉じるボタンのすべてのイベントで動作を実装させているため、現状はFixedToolWindowにできません。

全体構想を変更し、考え直して見ます。(ToT)/~~~

ご回答いただいた 深山さん・Sugi@ぱぱんぶぃびぃさん
ありがとうございます。(今回はあきらめて解決済みとさせていただきます。)

またよろしくお願いいたします!!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板