2015-08-06 3 views
0

Я хочу знать, как разрешить пользователю изменять размер самого текстового поля во время выполнения. Предпочтительно появляться маленькие вкладки на границах текстового поля, и они могут перетаскиваться для изменения размера в соответствии с большинством приложений.Редактируемое текстовое поле в Winforms

Возможно ли это сделать с использованием winforms? если нет библиотеки, чтобы помочь ей?

Я предпочел бы использовать родные компоненты, если это возможно. Все мои поисковые запросы Google оказываются ложными срабатываниями.

ответ

3

Самое простое решение с использованием собственных компонентов будет осуществлять ваше собственное пользовательское управление с использованием textbox и добавления MouseEvents. Вот пример, который позволяет перетащить нижнюю область TextBox в вертикальном направлении. Конечно, вы должны реализовать нечто большее, чем изменить ручку курсора и перекрасить некоторые области, если вы хотите сделать pop-up.

Вот рабочая концепция:

bool isDrag = false; 
int lastY = 0; 
private void textBox1_MouseEnter(object sender, EventArgs e) 
{ 
    //Change cursor to dragging handle or implement a pop-up 
} 

private void textBox1_MouseDown(object sender, MouseEventArgs e) 
{ 
    //Just add 5px padding 
    if (e.Y >= (textBox1.ClientRectangle.Bottom - 5) && 
     e.Y <= (textBox1.ClientRectangle.Bottom + 5)) 
    { 
     isDrag = true; 
     lastY = e.Y; 
    } 
} 

private void textBox1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if(isDrag) 
    { 
     textBox1.Height += (e.Y - lastY); 
     lastY = e.Y; 
    } 
} 

private void textBox1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (isDrag) 
    { 
     isDrag = false; 
    } 
} 

Чтобы попробовать код на новой форме, создать TextBox имя textBox1 и провод всех MouseEvents. Попытайтесь принести свою мышь в нижней части TextBox и перетащите ее вверх или вниз.

И не забудьте установить TextBox.Multiline в true.

1

Улучшенный подход заключается в использовании свойств Anchor и Dock для масштабирования элементов управления на основе их родительских элементов управления. Дать следующее: Manage WinForm controls using the Anchor and Dock properties

Другие варианты: TableLayoutPanel и FlowLayoutPanel база по вашему требованию.

TableLayoutPanel

Контроль TableLayoutPanel организует его содержимое в сетке. Поскольку макет выполняется как во время разработки, так и во время выполнения, он может динамически меняться при изменении среды приложения. Это дает элементам управления на панели возможность пропорционального изменения размера, поэтому может реагировать на изменения, такие как изменение размера родительского элемента или текст изменение длины из-за локализации.

Любой элемент управления Windows Forms может быть дочерним элементом управления TableLayoutPanel , включая другие экземпляры TableLayoutPanel. Это позволяет построить сложные макеты, которые приспосабливаются к изменениям на этапе .

FlowLayoutPanel

Контроль FlowLayoutPanel организует его содержимое в горизонтальном или вертикальном направлении потока. Его содержимое можно обернуть из одной строки в следующей или из одной колонки в другую. В качестве альтернативы его содержимое можно обрезать вместо обертывания.

Вы можете указать направление потока, установив значение свойства FlowDirection . Регулятор FlowLayoutPanel правильно изменяет направление его направления потока вправо-влево (RTL) . Вы также можете указать , укажите ли содержимое элемента управления FlowLayoutPanel , обернутое или обрезанное, установив значение свойства WrapContents.

+0

Благодарим за это, но мне нужно, чтобы пользователь мог перетащить его, не используя функции автоматического макета. Спасибо – FaddishWorm

+0

@FaddishWorm: Пользователь перетаскивает родительский контейнер или только текстовое поле? Это странный пользовательский интерфейс, если вы позволяете пользователю изменять размер родительского контейнера, перетаскивая край текстового поля. Я недавно не видел этого поведения в приложениях winform/wpf. Только мои 2 цента. – CharithJ

+0

Я бы этого не сделал, если бы это было не требование, LOL. – FaddishWorm

Смежные вопросы