Самое простое решение с использованием собственных компонентов будет осуществлять ваше собственное пользовательское управление с использованием 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
.
Благодарим за это, но мне нужно, чтобы пользователь мог перетащить его, не используя функции автоматического макета. Спасибо – FaddishWorm
@FaddishWorm: Пользователь перетаскивает родительский контейнер или только текстовое поле? Это странный пользовательский интерфейс, если вы позволяете пользователю изменять размер родительского контейнера, перетаскивая край текстового поля. Я недавно не видел этого поведения в приложениях winform/wpf. Только мои 2 цента. – CharithJ
Я бы этого не сделал, если бы это было не требование, LOL. – FaddishWorm