tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルスプリッタとオートスクロールについて
記事No2458
投稿日: 2005/10/25(Tue) 18:56
投稿者徳蔵丸
[OSのVer]:Windows2000    [VBのVer]:VB.NET 2003 

いつも大変参考にさせていいただいています。
タイトルの件ですが現在、以下のような画面を作成しております。
┌─────┐
│ 領域A │
├━━━━━┤
│ 領域B │
└─────┘
上記の領域A・Bはスプリッタで区切られています。
それぞれのDockは、以下のように設定してあります。
領域A:Top
領域B:Fill(最大化したときに、領域Bのみ広がる設定)
スプリッタ:Top

この状態で、画面のプロパティのAutoscrollをTrue
に設定し実行するとすると、領域Aのみ縦スクロールバーが
表示されてしまいました。

ここで実現したいことは、
画面のプロパティのAutoscrollをTrueで実行したときに
領域AとBの両方にまたぐ縦スクロールバーを表示させたいのです。

面倒とは思いますが、どなたかご教授をよろしくお願い致します。

[ツリー表示へ]
タイトルRe: スプリッタとオートスクロールについて
記事No2461
投稿日: 2005/10/26(Wed) 10:49
投稿者るしぇ
まず『領域』というのが分かりません。正確なオブジェクト名を
お書き下さい。

次に実現した後の動作が分かりません。
AutoScroll プロパティは『コンテナで、表示されている境界の外に
あるコントロールをユーザがスクロールで確認する』ためのものですが、
『領域A』と『領域B』は別のコンテナだと思うので関係ありません
よね?…Dock プロパティも関係ないと思います。

複数の別のコンテナでの独自の動きをさせたいなら、標準的な動作では
ありませんので VScrollBar などを貼り付けて自分で制御する事に
なると思います。

[ツリー表示へ]
タイトルRe^2: スプリッタとオートスクロールについて
記事No2462
投稿日: 2005/10/26(Wed) 11:05
投稿者徳蔵丸
[OSのVer]:Windows    [VBのVer]:VB.NET  
> まず『領域』というのが分かりません。正確なオブジェクト名を
> お書き下さい。
大変失礼しました。それぞれは以下の通りです。
領域A:リストボックス
領域B:FlexGrid

> 次に実現した後の動作が分かりません。
こちらも失礼しました。
実際は、MDI子画面に今回の領域A・Bが存在し、
子画面を複数表示させたときにMDI親画面内に並べて表示を行います。
その結果、リストボックス(領域A)のみAutoscrollの
スクロールバーが適用され、FlexGridが表示されない現象を
回避したいのです。

やはり、独自のスクロールバーを貼り付け・制御が得策なのでしょうか。
よろしくお願い致します。

[ツリー表示へ]
タイトルRe^3: スプリッタとオートスクロールについて
記事No2463
投稿日: 2005/10/26(Wed) 14:10
投稿者るしぇ
やはり AutoScroll プロパティ自体が関係ない質問のようです。
AutoScroll = False で動作が変わりますか?こちらで再現した
限り変わりませんでした。変わるようならこちらでは再現できません
でした。再現できる情報を下さい。

変わらないなら AutoScroll プロパティの動作を間違って解釈
されているように思います。表示されているスクロールバーは
おそらくリストボックス自体のもので Form とは関係ありません。

リストボックスは自分の表示領域にアイテムが納まりきらないと
自分で判断してスクロールバーを表示します。

FlexGrid …と言われても[VB.NET]の標準のコントロールには
ありませんので[VB6.0]のものか何か判断できませんが、同様
でしょう。

以上を踏まえた上で何をしたいのかご説明下さい。

[ツリー表示へ]
タイトルRe^4: スプリッタとオートスクロールについて
記事No2464
投稿日: 2005/10/26(Wed) 15:53
投稿者徳蔵丸
[OSのVer]:Windows    [VBのVer]:VB.NET  

いつもお世話になっております。
そうですか、再現しませんでしたか。
何が悪いのか分からなくなってきましたので
作成手順を入れつつ説明をさせていただきます。
1.MDI親画面を作成。(メニューに「並べて表示」機能付加)
2.上記ののMDI子画面を作成。
3.MDI子画面にリストボックス・スプリッタ・
  FrexGrid(VB6.0のもの)を作成。
4.それぞれのDockを以下のように設定
  リストボックス:Top
  スプリッタ  :Top
  FrexGrid   :Fill
5.MDI子画面のAutoscrollをTrueに設定

1〜5を設定後、MDI子画面を複数表示させて
MDI親画面のメニューの「並べて表示」を実行。

☆この結果、MDI子画面の立てスクロールが
 リストボックスのみスクロールして
 FrexGrid部分が表示されなくなってしまう。

るしぇさんの環境で☆(結果)がFrexGridもスクロールで
表示されるようならば、こちらの設定ミスと考えます。

お手数をおかけしますが、よろしくお願いします。

[ツリー表示へ]
タイトルわいわいがやがや広場へ
記事No2466
投稿日: 2005/10/26(Wed) 16:58
投稿者るしぇ
スクロールバーが表示される条件が複数重なっていますので、
このままでは原因を追究できません。こちらの実行画面を表示
して説明しますので↓[わいわいがやがや広場]に移動願いますm(__)m
hhttp://bbs4.aimix-z.com/gbbs.cgi?room=hanafusa

[ツリー表示へ]
タイトルRe: わいわいがやがや広場へ
記事No2467
投稿日: 2005/10/26(Wed) 17:24
投稿者徳蔵丸
[OSのVer]:Windows    [VBのVer]:VB.NET  
承知しました。
移動した広場へ移動させていただきます。

※はなちゃんさん、掲示板利用させていただきまして、ありがとうございました。

[ツリー表示へ]
タイトルRe^2: わいわいがやがや広場へ
記事No2469
投稿日: 2005/10/26(Wed) 18:14
投稿者徳蔵丸
[OSのVer]:Windows    [VBのVer]:VB.NET  
> ※はなちゃんさん、掲示板利用させていただきまして、ありがとうございました。
※「わいわいがやがや広場」も花ちゃんさんのサイトだそうで
 、重ね重ねお世話になっております。

ルシェさん、以下「わいわいがやがや広場」で
ご依頼のあったサンプルロジックです。
下記のようにすごいシンプルなロジックです。
並べ替えは、LayoutMdiメソッドによる並べ替えを行っています。
下記を実行して頂いて、徐々にForm1(MDI親)画面を小さくしつつ
並べ替えメニューを行うと、あるときFrexGrid部分が表示されなくなります。

☆FrexGridのあるForm2にはコンストラクタ以外
☆何も記述していない状態です。
******************Form1(MDI親):開始******************
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
        '集計結果選択画面をモードレスで表示
        Dim newForm2 As New Form2(Me)
        ''MDI親フォームの宣言
        newForm2.MdiParent = Me
        newForm2.Show()

        Dim newForm22 As New Form2(Me)
        ''MDI親フォームの宣言
        newForm22.MdiParent = Me
        newForm22.Show()


    End Sub

    '並べて表示メニュークリック
    Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem1.Click
        Me.LayoutMdi(MdiLayout.TileHorizontal)

    End Sub
******************Form1(MDI親):終了******************


******************Form1(MDI子):開始******************
    Private ctrForm1 As New Form1
    'frmClMain のコンストラクタ
    Public Sub New(ByVal MdiParent As Form1)
        InitializeComponent()
        ctrForm1 = MdiParent
    End Sub

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load

    End Sub
******************Form1(MDI子):終了******************

以上、よろしくお願いします。

[ツリー表示へ]
タイトル原因は Dock の設定かな?
記事No2470
投稿日: 2005/10/26(Wed) 18:53
投稿者るしぇ
あ。色々と操作しててちょっと分かったかも?…コードのミスとかじゃなくって
設計上のミスというか仕様上、当然の事というか…。

えっと、MDI子画面1つだけを考えて下さい。(MDIである事は関係ありませんが)
まず、正常な大きさで表示します。そのまま手動でどんどんフォームの
高さを短くしていって下さい。当然 FlexGrid の表示領域(領域B)が
狭くなっていきますよね?
>あるときFrexGrid部分が表示されなくなります。
それはつまり子フォームの高さがリストボックスをちょうど表示
できる高さの時ですね?その時の FlexGrid の表示領域は?…高さ0!!!
スクロールバーを表示しようにも表示領域がありません。Dock
による設定がそーゆー設定ですからね?。

ちなみにもっと狭くすればリストボックスを表示するスクロールバー
は表示されます。Dock の設定が Top ですから。

では矛盾を解決して下さい。Dock の設定が Fill …つまり空いている
表示領域を埋める…ので領域Bの高さが0以下の時、埋める領域が無い。
表示領域も無い。…でどこにスクロールバーを表示しましょうか?
また、スクロールバーをスクロールして表示させたい FlexGrid の
セルはどの場所に表示しましょうか???

1つの解決法はそんな状態にしない事です。子フォームの高さが
リストボックスの高さより小さくなった場合にリストボックスの
高さを調整するとか…。親フォームのサイズを一定の大きさ以下に
できないようにするとか…。

[ツリー表示へ]
タイトルRe: 原因は Dock...
記事No2471
投稿日: 2005/10/26(Wed) 22:15
投稿者徳蔵丸
[OSのVer]:Windows    [VBのVer]:VB.NET  
> 1つの解決法はそんな状態にしない事です。子フォームの高さが
> リストボックスの高さより小さくなった場合にリストボックスの
> 高さを調整するとか…。親フォームのサイズを一定の大きさ以下に
> できないようにするとか…。
なるほど、そうですね。
DockやSplitを初めて利用したので色々わからないことだらけでした。
るしぇさんのおかげで解決への道が見えたと思います。
並べて表示で小さくなったサイズを全体的に小さくする方向で
考えていきたいと思います。

るしぇさん、本当に色々ありがとうございました。

[ツリー表示へ]