我想知道如何让用户在运行时自己调整文本框的大小。优选地,文本框边框上的小标签会弹出,并且可以拖动以根据大多数应用调整大小。
是否可以使用winforms本地执行此操作?如果没有,有一个图书馆可以帮忙吗?
如果可能,我宁愿使用原生组件。我所有的谷歌搜索都会出现误报。
答案 0 :(得分:5)
使用本机组件的最简单解决方案是使用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
的{{1}}并连接所有textBox1
。尝试将鼠标放在MouseEvents
的底部,然后向上或向下拖动。
不要忘记将 TextBox
设置为 TextBox.Multiline
。
答案 1 :(得分:1)
更好的方法是使用Anchor
和Dock
属性来根据父控件扩展控件。阅读Manage WinForm controls using the Anchor and Dock properties
根据您的要求,其他选项为TableLayoutPanel
和FlowLayoutPanel
。
<强> TableLayoutPanel中强>
TableLayoutPanel控件将其内容排列在网格中。因为 布局在设计时和运行时都可以执行 随着应用程序环境的变化动态变化。这给了 面板中的控件按比例调整大小的能力,所以它 可以响应父控件调整大小或文本等更改 由于本地化导致长度变化。
任何Windows窗体控件都可以是TableLayoutPanel的子窗口 控件,包括TableLayoutPanel的其他实例。这允许 你要构建适应变化的复杂布局 运行时。
<强> FlowLayoutPanel的强>
FlowLayoutPanel控件将其内容排列在水平或 垂直流动方向。它的内容可以从一行包装到 下一个,或从一列到下一列。或者,它的内容 可以剪裁而不是包裹。
您可以通过设置值来指定流向 FlowDirection属性。 FlowLayoutPanel控件正确反转 它的流向从右到左(RTL)布局。你也可以 指定FlowLayoutPanel控件的内容是否为 通过设置WrapContents属性的值来包装或剪裁。