none
FlowLayoutPanel換行模式 RRS feed

  • 問題


  •     Dim a() As String = New String() {"aa", "bb", "cc", "bb", "cc", "bb", "cc", "bb", "cc", "bb", "cc"}
        Dim b() As String = New String() {"11", "22"}
        Dim c() As String = New String() {"ww"}


    將上述三個陣列加入FlowLayoutPanel,設定屬性"WrapContent=True"的話,則可以下換行指令(Me.FlowLayoutPanel1.SetFlowBreak(b, True)),問題:但資料過長的話,捲軸不會出現。
    若設定為"WrapContent=False"的話,反之
    問題:
    我現在想要把這三個陣列加入FlowLayoutPanel裡面…
    而a b c 三個陣列分別為三列
    如果過長的話,則水平會出現水平捲軸。
    2009年7月6日 上午 11:09

解答

  • 你要達到那個效果,用一個Panel就可以做了,用FlowLayoutPanel只是徒增困擾
    只要把Location計算好,就不是問題.以下是一個簡單範例
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Panel1.AutoScroll = True
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim a() As String = New String() {"aa", "bb", "cc", "bb", "cc", "bb", "cc", "bb", "cc", "bb", "cc"}
            Dim b() As String = New String() {"11", "22"}
            Dim c() As String = New String() {"ww"}
            Dim i As Integer
            For i = 0 To 10
                Dim MyBTN As New Button
                MyBTN.Location = (New Point(i * 45, 10))
                MyBTN.Width = 30
                MyBTN.Name = "MyBTN_A" & CStr(i)
                MyBTN.Text = a(i)
                Panel1.Controls.Add(MyBTN)
            Next
          
            For i = 0 To 1
                Dim MyBTN As New Button
                MyBTN.Location = (New Point(i * 45, 50))
                MyBTN.Width = 30
                MyBTN.Name = "MyBTN_B" & CStr(i)
                MyBTN.Text = b(i)
                Panel1.Controls.Add(MyBTN)
            Next
        End Sub
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    • 已標示為解答 小見光二 2009年7月8日 上午 05:35
    2009年7月8日 上午 04:26
    版主
  • HI,

    你可以在FlowLayoutPanel放三個FlowLayoutPanel

    裡面三個FlowLayoutPanel的WrapContent設為false,AutoSize設為true,FlowBreak設為True

    外面的FlowLayoutPanel 的WrapContent設為true,AutoScroll設為true

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 小見光二 2009年7月8日 上午 05:35
    2009年7月8日 上午 04:32

所有回覆

  • HI,

    我不知道FlowLayoutPanel能放一般不是控制項的類別
    你怎麼寫的?!

    http://www.dotblogs.com.tw/larrynung/
    2009年7月7日 上午 01:18
  • 抱歉沒描述清楚,我是將a.b.c三個陣列轉成button,陣列值為其屬性Text。
    目前遇到問題就是想要將a.b.c分別為一列顯示,過長有水平捲軸出現。

    目前測試結果為:
    1.如果FlowLayoutPanel.WrapContent設成True,可以用SetFlowBreak進行換列動作,但無水平捲軸。
    2.如果FlowLayoutPanel.WrapContent設成Flase,則SetFlowBreak好像失效,全部會在同一列,但是有捲軸。

    不知該如何設定或改寫,有辦法達成"分列"有"捲軸"!!
    2009年7月7日 上午 02:29
  • 建議你配圖來說明,我看不太懂你的說明。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年7月7日 上午 07:24
  • [] -- Button


    目標:
    l---Flowlayoutpanel---- l
    l[aa][bb][cc][bb][cc][b |
    l[11][22]                    |
    l[ww]                         l
    l<--------捲軸-------->l
    l-----------------------l

    測試情況1:如果FlowLayoutPanel.WrapContent設成True,可以用SetFlowBreak進行換列動作,但無水平捲軸
    l---Flowlayoutpanel---- l
    l[aa][bb][cc][bb][cc]   l
    l[bb][cc][bb][cc][bb]   l
    l[cc]                          |
    l[11][22]                    l
    l[ww]                         l
    l------------------------- l

    測試情況2:如果FlowLayoutPanel.WrapContent設成False則,SetFlowBreak好像失效,全部會在同一列,但是有捲軸。
    l---Flowlayoutpanel---- l
    l[aa][bb][cc][bb][cc][b l
    l                                l
    l                                l
    l                                l
    l<--------捲軸-------->l
    l---------------------- l

    2009年7月7日 下午 03:23
  • 那分三個 FlowLayoutPanel 分別放 a(), b(), c() 。

    你的要求是矛盾的,所以設計上不會提供此類型功能。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年7月7日 下午 04:19
  • 因為我只想要單一的水平捲軸,可以控制所有顯示資料,
    如果分成三個FlowLayoutPanel,則會有各自水平捲軸。
    我再想可能問題就變成如何同步控制捲軸,還煩大大們提點提點。
    2009年7月8日 上午 03:55
  • 你要達到那個效果,用一個Panel就可以做了,用FlowLayoutPanel只是徒增困擾
    只要把Location計算好,就不是問題.以下是一個簡單範例
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Panel1.AutoScroll = True
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim a() As String = New String() {"aa", "bb", "cc", "bb", "cc", "bb", "cc", "bb", "cc", "bb", "cc"}
            Dim b() As String = New String() {"11", "22"}
            Dim c() As String = New String() {"ww"}
            Dim i As Integer
            For i = 0 To 10
                Dim MyBTN As New Button
                MyBTN.Location = (New Point(i * 45, 10))
                MyBTN.Width = 30
                MyBTN.Name = "MyBTN_A" & CStr(i)
                MyBTN.Text = a(i)
                Panel1.Controls.Add(MyBTN)
            Next
          
            For i = 0 To 1
                Dim MyBTN As New Button
                MyBTN.Location = (New Point(i * 45, 50))
                MyBTN.Width = 30
                MyBTN.Name = "MyBTN_B" & CStr(i)
                MyBTN.Text = b(i)
                Panel1.Controls.Add(MyBTN)
            Next
        End Sub
    請關心自己的問題,不要問了就放空;這是對別人與自己的尊重
    • 已標示為解答 小見光二 2009年7月8日 上午 05:35
    2009年7月8日 上午 04:26
    版主
  • HI,

    你可以在FlowLayoutPanel放三個FlowLayoutPanel

    裡面三個FlowLayoutPanel的WrapContent設為false,AutoSize設為true,FlowBreak設為True

    外面的FlowLayoutPanel 的WrapContent設為true,AutoScroll設為true

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 小見光二 2009年7月8日 上午 05:35
    2009年7月8日 上午 04:32
  • 因為當初要做的效果是每個Button的Width都會不同,
    所以想直接利用FlowLayoutPanel增加元件(加在後面),而不用計算放置位置。
    最後使用蹂大大所提供做法完成,但是還是謝謝 Bill大大提供的想法。
    2009年7月8日 上午 05:39