Как можно мешать Панели Winforms прокрутить?

float deviceOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
float versionToBeCompared = 3.1.3; //(For Example in your case)

if(deviceOSVersion < versionToBeCompared)
   //Do whatever you need to do. Device version is lesser than 3.1.3(in your case)
else 
   //Device version should be either equal to the version you specified or above
22
задан 7 January 2009 в 11:31
поделиться

4 ответа

Я предполагаю, что Вы устанавливаете свойство AutoScroll панели к истинному. Когда Вы делаете так, переключение приложений обнуляет положение прокрутки, и панель сбрасывает свое положение.

, Если Вы выключаете AutoScroll и добавляете Вашу собственную полосу прокрутки, можно установить максимум полосы прокрутки и минимум для соответствия требованиям для панели, затем установить значения прокрутки панели в событии Scroll полосы прокрутки. Это не сбрасывается при переключении окон.

Что-то как:

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
    panel1.VerticalScroll.Value = vScrollBar1.Value;
}

Это было новым на мне, и я должен был воссоздать его. Мне, возможно, придется добавить статью к моему сайту об этом:-)

2
ответ дан BlackWasp 29 November 2019 в 04:17
поделиться

Я понимаю Вашу боль, это получило меня несколько раз.

, Если Ваш DataGridView является единственной вещью в панели, просто устанавливает Прикрепление, чтобы Заполнить и позволить DGV обработать прокрутку на своем собственном. Я не думаю, что это будет больше делать переходящую вещь. Иначе я предполагаю, что Вы могли просто измерить его так, это - меньше, чем панель, и позвольте ему сделать прокрутку на своем собственном.

0
ответ дан jhunter 29 November 2019 в 04:17
поделиться

This is caused by the ScrollToControl event being fired automatically by the ScrollableControl class, and the event handler scrolling to show the top left of the control that got focus. This behavior is not helpful when the scrollable container control only contains one control. I was very frustrated by this behavior until I found out how to stop it.

The way to stop this behavior is to override the ScrollToControl event handler, like this:

class PanelNoScrollOnFocus : Panel
{
    protected override System.Drawing.Point ScrollToControl(Control activeControl)
    {
        return DisplayRectangle.Location;
    }
}

Replace your panel control with this panel control. Готово.

46
ответ дан 29 November 2019 в 04:17
поделиться

Спасибо, skypecakes, это прекрасно сработало :) Вот отредактированная версия вашего элемента управления, которая также отслеживает, где находятся полосы прокрутки:

class AutoScrollPanel : Panel
{
    public AutoScrollPanel()
    {
        Enter += PanelNoScrollOnFocus_Enter;
        Leave += PanelNoScrollOnFocus_Leave;
    }

    private System.Drawing.Point scrollLocation;

    void PanelNoScrollOnFocus_Enter(object sender, System.EventArgs e)
    {
        // Set the scroll location back when the control regains focus.
        HorizontalScroll.Value = scrollLocation.X;
        VerticalScroll.Value = scrollLocation.Y;
    }

    void PanelNoScrollOnFocus_Leave(object sender, System.EventArgs e)
    {
        // Remember the scroll location when the control loses focus.
        scrollLocation.X = HorizontalScroll.Value;
        scrollLocation.Y = VerticalScroll.Value;
    }

    protected override System.Drawing.Point ScrollToControl(Control activeControl)
    {
        // When there's only 1 control in the panel and the user clicks
        //  on it, .NET tries to scroll to the control. This invariably
        //  forces the panel to scroll up. This little hack prevents that.
        return DisplayRectangle.Location;
    }
}

Это работает, только если на панели есть только один элемент управления ( хотя я не тестировал его с более чем одним контролем).

1
ответ дан 29 November 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: