내 응용 프로그램에서 다음 상황이 발생했습니다.스크롤 영역에서 표시되는 크기를 검색하는 방법은 무엇입니까?
여러 탭이있는 탭 컨트롤이있는 Windows Form이 있습니다. 각 탭에는 시작시 또는 런타임 중에 다른 클래스에 의해 추가되는 임의의 내용이 들어 있습니다.
폼을 탭의 패널이 모든 것을 표시하기에 너무 작아지면 스크롤바가 자동으로 표시되는 방식으로 탭을 설정하려고합니다.
지금까지 시도한 것은 탭 페이지의 AutoScroll = true
을 설정하고 AutoScrollMinSize
속성을 패널 크기로 설정하는 것입니다.
패널의 Size
은 항상 내용에 독립적 (200, 100) 인 것으로 예상되어 예상대로 작동하지 않았습니다.
문제를 설명하는 작은 예제 응용 프로그램 (아래 코드)을 만들었습니다. 양식의 크기를 조정하면 양식이 패널 (300, 150 크기)의 텍스트 상자가 아닌 패널 (기본 크기는 (200, 100))보다 작아 진 경우에만 스크롤 막대가 표시됩니다. AutoScrollMinSize
을 수동으로 설정하면 (줄 34의 주석 처리 제외) 예상대로 작동합니다.
질문 : 탭 페이지에 표시되는 내용의 실제 크기를 검색하려면 어떻게해야합니까?
나는 모든 컨트롤을 통해 반복적으로 크기를 계산할 수 있지만 실제로는 좋지 않습니다.
추 신 : 실제 패널은 훨씬 더 복잡하기 때문에 패널 크기를 레이블 크기로 설정하지 마십시오. ;-)
코드 :
단순히 Visual Studio에서 응용 프로그램을 만들고 다음 코드를 Program.cs를 오버라이드 (override) :
using System;
using System.Windows.Forms;
namespace ScrollbarTest
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var sampleForm = CreateSampleForm();
Application.Run(sampleForm);
}
private static Form CreateSampleForm()
{
var sampleForm = new Form() { };
var tabControl = new TabControl() { Dock = DockStyle.Fill };
var tabPage = new TabPage("Test") { AutoScroll = true };
sampleForm.Controls.Add(tabControl);
tabControl.TabPages.Add(tabPage);
var samplePanel = CreateSamplePanel();
tabPage.Controls.Add(samplePanel);
// this does not provide the right size
tabPage.AutoScrollMinSize = samplePanel.Size;
// uncomment this to make it work
//tabPage.AutoScrollMinSize = new System.Drawing.Size(300, 150);
return sampleForm;
}
private static Control CreateSamplePanel()
{
// As an example, create a panel with a text box with a fixed size.
var samplePanel = new Panel() { Dock = DockStyle.Fill };
var sampleSize = new System.Drawing.Size(300, 150);
var textBox = new TextBox()
{
Dock = DockStyle.Fill,
MinimumSize = sampleSize,
MaximumSize = sampleSize,
Size = sampleSize
};
samplePanel.Controls.Add(textBox);
return samplePanel;
}
}
}
탭 페이지에 포함 된 패널에 대해 알지 못합니다. 대신 패널에서 스크롤 막대를 설정하지 마십시오. –
그런 경우 패널에서 같은 문제가 발생합니다. 패널은 일반적으로 여러 컨트롤이있는 여러 개의 하위 패널이있는 TableLayoutPanel로 구성됩니다. –