문제

AutoScroll이 True로 설정된 내 양식에 패널이있어 스크롤 바가 자동으로 나타납니다.

사용자가 마우스 휠을 사용하여 패널을 스크롤 할 수 있도록하려면 어떻게해야합니까? 감사합니다.

도움이 되었습니까?

해결책

패널의 패널 또는 컨트롤에는 초점이 맞아야합니다. Focus의 컨트롤에 스크롤 막대가있는 경우 패널 대신 스크롤됩니다.

다른 팁

나를 위해 일한 것은 추가하는 것이 었습니다 panel1_MouseEnter 이벤트 핸들러:

private void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.Focus();
}

아래 코드는 나를 위해 작동합니다 .....

    Public Form
{
InitializeComponent();  
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);
}

 private void Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
         panel1.Focus();
         }

Designer 파일에서 다음 코드 줄을 추가 할 수 있습니다. Mousewheel 이벤트는 속성 창의 이벤트 목록에서 의심되지 않습니다.

this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);

마우스 weel을 굴릴 때 Panel1_MousewHeel이 트리거됩니다.

.cs 파일에 코드를 추가하십시오

패널에 초점이 있는지 확인하십시오. 그리고 이것은 패널 스크롤 바를 스크롤하는 간단한 코드입니다. 이 도움을 바랍니다. :) 여기에 코드를 입력하시오

        if(e.Delta > 0)
        {

            if (pnlContain.VerticalScroll.Value - 2 >= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value -= 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Minimum;
        }
        else
        {
            if (pnlContain.VerticalScroll.Value + 2 <= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value += 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Maximum;
        }

나는 Borderstyle이 없음으로 설정된 Windows 양식을 사용하고 있습니다. 여기서 패널을 사용하여 모든 컨트롤을 사용하여 멋지게 보였습니다 (색상 차이 등 ..)은 다른 형태가 잘 작동하는 동안 같은 문제를 겪었습니다.

내가 무엇을 잊었습니까 :

   public myForm()
   {
        InitializeComponent();
        this.DoubleBuffered = true;
   }

DoubleBuffered는 내가 눈치 채는 마법입니다 ..

스크롤 휠을 움직이면 컨트롤의 MousEmove 이벤트가 트리거됩니다. Mouseeventargs 논쟁에는 델타라는 속성이 있으며, 이는 마우스 휠이 움직이는 수의 노치를 제공합니다. 이 속성을 사용하여 패널을 스크롤 할 수 있습니다.

그만큼 해결책 Beam022가 제공 한 (위에서 볼 수 있음) 다른 많은 솔루션은 그렇지 않은 반면, 나에게 효과가있었습니다. 제 경우에는 Mousewheel 이벤트로 DatagridView 컨트롤을 스크롤하려고했습니다.

DataGridView_MouseWheel 이벤트 핸들러가 호출되었지만 FirstDisplayedScrollingRowIndex 값은 변경되지 않았습니다. 명시 적으로 1로 설정 한 후에도 값은 항상 '0'이었습니다. 마치 속성을 읽은 것처럼 보입니다.

.NET Framework 4.6에 여전히 Repro가 있습니다.

필자의 경우, 패널의 전체 클라이언트 영역은 USERCONTROLS (스크롤 바를 제외한 내부 영역의 단일 픽셀이 아님)에 의해 점유되었습니다.

이 경우 패널은 마우스 이벤트를 얻지 못하고 초점을 맞추지 않습니다 (적절하게 스크롤 바를 클릭하면 "패널 내부에있는"것으로 계산되지 않습니다).

UserControl 파생 클래스의 생성자에 다음 줄을 추가해야했습니다.

MouseEnter += delegate {
   Parent?.Focus();
};

USERCONTROLS에는 스크롤 가능한 컨텐츠가 없으므로 이제는 잘 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top