Exemple #1
0
        private void SetVMaxNum(Control control)
        {
            if (!m_lstVCache.ContainsKey(control))
            {
                return;
            }
            var          intoV = ScrollBarHelper.GetVScrollBarInfo(control.Handle);
            ScrollbarVEx barV  = m_lstVCache[control];

            if (control is ScrollableControl)
            {
                barV.Maximum = intoV.ScrollMax;
                barV.Visible = intoV.ScrollMax > 0 && intoV.nMax > 0 && intoV.nPage > 0;
                barV.Value   = intoV.nPos;
                barV.BringToFront();
                // barV.Maximum = (control as ScrollableControl).VerticalScroll.Maximum;
                // barV.Value = (control as ScrollableControl).VerticalScroll.Value;
            }
            else if (control is TreeView)
            {
                var tv = control as TreeView;
                barV.Maximum = intoV.ScrollMax * tv.ItemHeight;
                barV.Visible = intoV.ScrollMax > 0 && intoV.nMax > 0 && intoV.nPage > 0;
                barV.Value   = intoV.nPos * tv.ItemHeight;
                barV.BringToFront();

                //barV.Maximum = GetTreeNodeMaxY(control as TreeView) - control.Height;
                //barV.Value = (control as TreeView).AutoScrollOffset.Y;
            }
            else if (control is TextBox)
            {
                TextBox txt = (TextBox)control;
                barV.Maximum = intoV.ScrollMax * txt.PreferredHeight;
                if (txt.ScrollBars == ScrollBars.Both || txt.ScrollBars == ScrollBars.Vertical)
                {
                    barV.Visible = true;
                }
                else
                {
                    barV.Visible = false;
                }
                barV.Value = intoV.nPos * txt.PreferredHeight;
                barV.BringToFront();
            }
            else if (control is RichTextBox)
            {
                bool blnHasVScrollbar = control.IsHandleCreated && (ScrollBarHelper.GetWindowLong(control.Handle, STYLE) & VSCROLL) != 0;
                barV.Maximum = intoV.ScrollMax;
                barV.Visible = blnHasVScrollbar;
                barV.Value   = intoV.nPos;
                barV.BringToFront();
            }
            else if (control is ListBox)
            {
                var lb = control as ListBox;
                if (intoV.ScrollMax <= 1)
                {
                    var v = lb.ItemHeight * lb.Items.Count - lb.Height;
                    if (v > 0)
                    {
                        barV.Maximum = v;
                    }
                    else
                    {
                        barV.Maximum = intoV.ScrollMax * lb.ItemHeight;
                    }
                }
                else
                {
                    barV.Maximum = intoV.ScrollMax * lb.ItemHeight;
                }
                barV.Visible = intoV.ScrollMax > 0 && intoV.nMax > 0 && intoV.nPage > 0;
                barV.Value   = intoV.nPos * lb.ItemHeight;
                barV.BringToFront();
            }
            else if (control is ComboBox)
            {
                var lb = control as ComboBox;
                if (intoV.ScrollMax <= 1)
                {
                    var v = lb.ItemHeight * lb.Items.Count - lb.Height;
                    if (v > 0)
                    {
                        barV.Maximum = v;
                    }
                    else
                    {
                        barV.Maximum = intoV.ScrollMax * lb.ItemHeight;
                    }
                }
                else
                {
                    barV.Maximum = intoV.ScrollMax * lb.ItemHeight;
                }
                barV.Visible = intoV.ScrollMax > 0 && intoV.nMax > 0 && intoV.nPage > 0;
                barV.Value   = intoV.nPos * lb.ItemHeight;
                barV.BringToFront();
            }
            else if (control is ListView)
            {
                barV.Maximum = intoV.ScrollMax;
                barV.Visible = intoV.ScrollMax > 0 && intoV.nMax > 0 && intoV.nPage > 0;
                barV.Value   = intoV.nPos;
                barV.BringToFront();
            }
            else if (control is DataGridView)
            {
                bool blnHasVScrollbar = false;
                var  dgv = (DataGridView)control;
                if (dgv.ScrollBars == ScrollBars.Both || dgv.ScrollBars == ScrollBars.Vertical)
                {
                    int _height = dgv.RowTemplate.Height * dgv.Rows.Count;
                    if (dgv.ColumnHeadersVisible)
                    {
                        _height += dgv.ColumnHeadersHeight;
                    }
                    blnHasVScrollbar = _height > dgv.Height;
                }
                barV.Maximum = dgv.Rows.Count;
                barV.Visible = blnHasVScrollbar;
                barV.Value   = dgv.FirstDisplayedScrollingRowIndex;;
                barV.BringToFront();
            }
        }