DataGridView, вместо прокрутки две кнопки - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток. Подскажите, пожалуйста. Этот код для textboxa работает на ура, но для грида полное бездействие...Может там как то по другому нужно.
        private const int SB_HORZ = 0x0;
        private const int SB_VERT = 0x1;
        private const int WM_HSCROLL = 0x114;
        private const int WM_VSCROLL = 0x115;
        private const int SB_THUMBPOSITION = 4;
        [DllImport("user32.dll")]
        private static extern int GetScrollPos(IntPtr hWnd, int nBar);
        [DllImport("user32.dll")]
        private static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
        [DllImport("user32.dll")]
        private static extern bool PostMessageA(IntPtr hWnd, int nBar, int wParam, int lParam);
///////***************////////        
События на нажатие "кнопок" вверх-вниз
        private void pictureBox6_Click(object sender, EventArgs e)
        {
            int originalLine = GetScrollPos(dataGridView1.Handle, SB_VERT);//SB_VERT=0, исх мин, исх максим.
            int i = originalLine - 1;
            label2.Text = i.ToString(); 
            if (i < 9 && i >= -1)
            {   
                SetScrollPos(dataGridView1.Handle, SB_VERT, i, true);
                PostMessageA(dataGridView1.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * i, 0);
            }
        }
        private void pictureBox7_Click(object sender, EventArgs e)
        {
            int originalLine = GetScrollPos(dataGridView1.Handle, SB_VERT);
            int i = originalLine + 1;
            label1.Text = i.ToString();
            SetScrollPos(dataGridView1.Handle, SB_VERT, i, true);
            PostMessageA(dataGridView1.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * i, 0);
        }
Благодарю добрых человечков.
Может там свойства какие-нибудь нужны обязательные? Никто с этим не сталкивался?

Решение задачи: «DataGridView, вместо прокрутки две кнопки»

textual
Листинг программы
using System.Runtime.InteropServices;
 private const int WM_SCROLL = 276;
        private const int WM_VSCROLL = 277; 
        private const int SB_LINEUP = 0; 
        private const int SB_LINEDOWN = 1; 
        private const int SB_ENDSCROLL = 8;
        private const int SB_VERT = 0x1;
        [DllImport("user32.dll")]
        private static extern bool PostMessage(IntPtr hWnd, int nBar, int wParam, IntPtr hWn);
        [DllImport("user32.dll")]
        static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int GetScrollPos(IntPtr hWnd, int nBar);
 
//и соответственно события на две кнопки (вниз-вверх)
 
 private void pictureBox9_Click(object sender, EventArgs e)
        {            
            VScrollBar barraVertical = null;
            foreach (Control c in dataGridView1.Controls)
            {
                if (c is VScrollBar) barraVertical = (VScrollBar)c;
            }
            if (barraVertical != null)
            {
                PostMessage(dataGridView1.Handle, WM_VSCROLL, SB_LINEUP, barraVertical.Handle);
                PostMessage(dataGridView1.Handle, WM_VSCROLL, SB_ENDSCROLL, barraVertical.Handle);
            }            
        }
 
        private void pictureBox8_Click(object sender, EventArgs e)
        {           
            VScrollBar barraVertical = null;
            foreach (Control c in dataGridView1.Controls)
            {
                if (c is VScrollBar) barraVertical = (VScrollBar)c;
            }
            if (barraVertical != null)
            {
                PostMessage(dataGridView1.Handle, WM_VSCROLL, SB_LINEDOWN, barraVertical.Handle);
                PostMessage(dataGridView1.Handle, WM_VSCROLL, SB_ENDSCROLL, barraVertical.Handle);
            }            
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы