2009-04-22 10 views
0

VB6에서 flexgrid 테이블 높이를 계산하여 채워진 행 수만 포함하도록하는 방법은 무엇입니까? 테이블의 높이를 올바르게 계산하는 방법

현재

myFlexGrid.Height = (myFlexGrid.CellHeight * myFlexGrid.Rows) ' paraphrased from code 

은 한 줄에 짧은 약 3 픽셀로 나온다. 매직 넘버를 추가하는 것은 약간 hackish하고 그것을 이용하지 않고 이것을 달성하고 싶습니다.

업데이트 : 는 또한 여러 세포를 처리해야 문제를 복잡합니다.

답변

1

당신은 + 30

30이 만드는 것입니다

Me.MSFlexGrid1.Height = (Me.MSFlexGrid1.CellHeight) * (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows)을 갈 필요가 플렉스 그리드 주변을 검은 색 테두리로 표시하려면 2 픽셀 더 길어야합니다.

또한 세로 스크롤 막대를 사용하지 않도록 설정하면 도움이됩니다.

+0

실제로 30은 내가 찾을 수있는 것으로부터 올바르지 않습니다. 사용자가 120dpi 모드에서 실행 중이면 12 트윕은 1 픽셀과 같습니다. 그러나 반 임의의 숫자를 추가하는 것은 내가 피하려고하는 것입니다. –

+0

또한 다중 행 셀을 처리해야한다는 사실을 발견했습니다. –

+0

컨트롤이 자동 높이 기능을 명시 적으로 지원하지 않거나 모든 UI 요소의 높이 값을 노출하지 않는 한 마법 번호를 사용하는 것을 피할 수 없습니다. 이것은 컨트롤이 블랙 박스로 설계 되었기 때문입니다. 여기에 논리가 복잡해질 것 같습니다. 저는 컨트롤 클래스 내부에 flexgrid를 래핑하고 거기에 autoheight 함수를 추가하여 기본 루틴의 코드가 깨끗하게 유지되도록하는 것이 좋습니다. –

2

RS Coneley 가까이이지만, 여기에 모든 DPI 설정을 차지하는 올바른 방법입니다 :

Me.MSFlexGrid1.Height = Me.MSFlexGrid1.CellHeight _ 
         * (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) _ 
         + (Screen.TwipsPerPixelY * 2) 
0

이 내가

For i = 0 To fgrComments.Rows - 1 
     'Set MSFlexGrid to appropriate Cell 
     myFlexGrid.Row = i 

     'Set textbox to match the selected cell 
     txtSizer.Width = myFlexGrid.ColWidth(2) 
     txtSizer.Font = myFlexGrid.Font 
     txtSizer.Text = myFlexGrid.Text 

     'Call API to determine how many lines of text are in text box 
     lLinesOfText = SendMessage(txtSizer.hwnd, EM_GETLINECOUNT, 0&, 0&) 

     ' Update the running values 
     lTotalNumberOfRows = lTotalNumberOfRows + lLinesOfText 
     lCurrentHeight = lCurrentHeight + myFlexGrid.CellHeight 
    Next i 

    ' resize the grid 
    Dim iSpacers As Integer 
    iSpacers = Screen.TwipsPerPixelY * lTotalNumberOfRows 
    myFlexGrid.Height = lCurrentHeight + iSpacers 

당신은 선언해야합니다 해낸 최종 코드는 SendMessage (see here to see how)와 EM_GETLINECOUNT의 값이 있지만 직접 할 수 있어야합니다 :-)

그것은 마법의 숫자를 제거하지는 않지만 그것을 합리화합니다 내가 충분히 가깝다.

관련 문제