Отобразите полосу прокрутки в текстовом поле, когда содержанием будет вне границ C#

Из всего этого новое - самое запутанное. Благодаря экспериментированию новое ключевое слово похоже на предоставление разработчикам возможности переопределить реализацию наследующего класса с реализацией базового класса, явно определяя тип. Это похоже на то, как думать наоборот.

В приведенном ниже примере результат вернет «Производный результат» до тех пор, пока тип явно не будет определен как тест BaseClass, только тогда будет возвращен «Базовый результат».

class Program
{
    static void Main(string[] args)
    {
        var test = new DerivedClass();
        var result = test.DoSomething();
    }
}

class BaseClass
{
    public virtual string DoSomething()
    {
        return "Base result";
    }
}

class DerivedClass : BaseClass
{
    public new string DoSomething()
    {
        return "Derived result";
    }
}
23
задан Alfred Myers 10 September 2009 в 22:09
поделиться

2 ответа

Рассмотрите возможность использования RichTextBox - в него встроено такое поведение.

29
ответ дан 29 November 2019 в 01:51
поделиться

Со всем уважением к предыдущим решениям, которые предлагают измениться TextBox. Свойство ScrollBars для показывания/скрытия вертикальной полосы прокрутки по мере необходимости. Этот подход вызывает нежелательные поведения при редактировании текста во времени выполнения, такие как:

  • Каждый раз, когда вертикальная полоса прокрутки показывает/скрывает, текстовое поле, прокручивает к началу текста, а также каре.

  • Иногда, весь текст будет выбран и выделен так, можно вообразить то, что происходит, если Вы продолжаете вводить.

Поэтому я думаю TextBox. ScrollBars не должен быть изменен. Вместо этого с помощью функция ShowScrollBar API является лучшим подходом, чтобы ВЫНУДИТЬ вертикальную полосу прокрутки показать/скрыть.

В дальнейшем решение VB.Net:

API

Private Const SB_VERT As Integer = 1

<DllImport("user32")>
Private Shared Function ShowScrollBar(ByVal hWnd As IntPtr, ByVal wBar As Integer, ByVal bShow As Boolean) As Boolean
End Function

Добавляют обработчики для обоих события TextChanged и SizeChanged.

Private Sub OnTextChanged(sender As Object, e As EventArgs)
 UpdateScrollBars()
End Sub

Private Sub OnSizeChanged(sender As Object, e As EventArgs)
 UpdateScrollBars()
End Sub

Добавляют метод UpdateScrollBars:

Private Sub UpdateScrollBars()
  If MyTextBox.ScrollBars = ScrollBars.Vertical Then
     Dim sz As Size = TextRenderer.MeasureText(MyTextBox.Text, MyTextBox.Font, New Size(MyTextBox.Width, Integer.MaxValue), TextFormatFlags.WordBreak Or TextFormatFlags.TextBoxControl)
     Try
         Dim bShow As Boolean = (sz.Height + MyTextBox.Font.Height) > MyTextBox.Height
         ShowScrollBar(MyTextBox.Handle, SB_VERT, bShow)
     Catch
     End Try
  End If
End Sub

Вот именно все.

Отношения.

0
ответ дан 16 October 2019 в 01:46
поделиться
Другие вопросы по тегам:

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