Как прокрутить вниз в текстовом поле кодом в C#

Убери это в каком-нибудь служебном классе.

+ (void)dismissKeyboard {
    [self globalResignFirstResponder];
}

+ (void) globalResignFirstResponder {
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    for (UIView * view in [window subviews]){
        [self globalResignFirstResponderRec:view];
    }
}

+ (void) globalResignFirstResponderRec:(UIView*) view {
    if ([view respondsToSelector:@selector(resignFirstResponder)]){
        [view resignFirstResponder];
    }
    for (UIView * subview in [view subviews]){
        [self globalResignFirstResponderRec:subview];
    }
}
24
задан Nefzen 1 July 2009 в 14:38
поделиться

5 ответов

Вы можете сделать это, используя функцию ScrollToCaret. Сначала вам нужно установить позицию курсора в конец текстового поля, а затем вы можете прокрутить до него. Вот как это сделать:

        //move the caret to the end of the text
        textBox.SelectionStart = textBox.TextLength;
        //scroll to the caret
        textBox.ScrollToCaret();
35
ответ дан 28 November 2019 в 22:19
поделиться

Вам нужно установить курсор в конце текста:

textBox1.Text += "your new text";
textBox1.Select(textBox1.Text.Length - 1, 0);
textBox1.ScrollToCaret();
4
ответ дан 28 November 2019 в 22:19
поделиться

Вы можете использовать SetScrollPos API:

[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

[DllImport("user32.dll")]
static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos);

const int SB_HORZ = 0;
const int SB_VERT = 1;
const int SB_CTL = 2;


...

void ScrollToBottom(Control ctl)
{
    int min;
    int max;
    if (GetScrollRange(ctl.Handle, SB_VERT, out min, out max))
    {
        SetScrollPos(ctl.Handle, SB_VERT, max, true);
    }
}

(не проверено)

0
ответ дан 28 November 2019 в 22:19
поделиться

Если вы используете метод AppendText () текстового поля, текст будет добавлен в конец любого существующего текста, и элемент управления будет прокручиваться для его отображения.

14
ответ дан 28 November 2019 в 22:19
поделиться

Это немного старый вопрос, но ни один из предложенных ответов не сработал для меня (ScrollToCaret() работает только когда TextBox имеет фокус). Так что на случай, если кто-то еще будет искать это в какой-то момент, я решил поделиться тем, что я нашел в качестве решения:

public class Utils
{
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

    private const int WM_VSCROLL = 0x115;
    private const int SB_BOTTOM = 7;

    /// <summary>
    /// Scrolls the vertical scroll bar of a multi-line text box to the bottom.
    /// </summary>
    /// <param name="tb">The text box to scroll</param>
    public static void ScrollToBottom(TextBox tb)
    {
        SendMessage(tb.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, IntPtr.Zero);
    }
}

Кредит за решение должен идти на этот пост на bytes.com: http://bytes.com/topic/c-sharp/answers/248500-scroll-bottom-textbox#post1005377

27
ответ дан 28 November 2019 в 22:19
поделиться
Другие вопросы по тегам:

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