VB.NET Winforms中如何避免垂直调整大小时内容错位?
- 内容介绍
- 文章标签
- 相关推荐
本文共计528个文字,预计阅读时间需要3分钟。
使用WinForms,您可以通过设置表格控件的属性来防止用户直接调整单元格大小。具体来说,可以设置`ColumnHeadersHeightSizeMode`和`RowHeadersHeightSizeMode`属性。
1. 允许用户在垂直方向上调整单元格大小:csharpdataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.AutoSize;dataGridView1.RowHeadersHeightSizeMode=DataGridViewRowHeadersHeightSizeMode.AutoSize;
2. 允许用户在垂直方向上调整单元格大小,但在水平方向上不允许:csharpdataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.AutoSize;dataGridView1.RowHeadersHeightSizeMode=DataGridViewRowHeadersHeightSizeMode.DisableResizing;
3. 不允许用户调整单元格大小:csharpdataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.DisableResizing;dataGridView1.RowHeadersHeightSizeMode=DataGridViewRowHeadersHeightSizeMode.DisableResizing;
请注意,如果需要允许在特定方向上调整大小,但限制在另一个方向上,则需要手动编写代码来处理大小调整事件。
使用 winforms我想知道是否有某种方法可以防止垂直调整表单大小.我想允许用户在垂直方向上的所有方向上调整表单大小.另外我想允许在向上方向上垂直调整大小,但不允许向下调整大小.我尝试使用maximumsize将其设置为:Me.maximumsize = new size(0,me.height)
我将宽度设置为0,因为我想允许用户更改表单宽度.
不幸的是它不起作用.
有任何想法吗?
您必须小心允许表单在启动时调整自身大小.必须适应具有不同视频DPI设置或不同系统字体大小的计算机上所需的扩展.或者用户覆盖改变了标题栏的高度.所有这些都在Load事件运行时进行了整理.从而:protected override void OnLoad(EventArgs e) { Screen scr = Screen.FromControl(this); this.MinimumSize = new Size(this.MinimumSize.Width, this.Height); this.MaximumSize = new Size(scr.WorkingArea.Width, this.Height); }
您应该做的下一件事是当用户在窗口边缘移动光标时,修复光标的行为,允许垂直调整窗口大小.这有点难看,您必须使用WndProc捕获WM_NCHITTEST消息并更改消息返回值:
protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == 0x84) { // Trap WM_NCHITTEST switch (m.Result.ToInt32()) { case 12: m.Result = (IntPtr)2; break; // HTTOP to HTCAPTION case 13: m.Result = (IntPtr)10; break; // etc.. case 14: m.Result = (IntPtr)11; break; case 15: m.Result = (IntPtr)1; break; case 16: m.Result = (IntPtr)10; break; case 17: m.Result = (IntPtr)11; break; } } }
本文共计528个文字,预计阅读时间需要3分钟。
使用WinForms,您可以通过设置表格控件的属性来防止用户直接调整单元格大小。具体来说,可以设置`ColumnHeadersHeightSizeMode`和`RowHeadersHeightSizeMode`属性。
1. 允许用户在垂直方向上调整单元格大小:csharpdataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.AutoSize;dataGridView1.RowHeadersHeightSizeMode=DataGridViewRowHeadersHeightSizeMode.AutoSize;
2. 允许用户在垂直方向上调整单元格大小,但在水平方向上不允许:csharpdataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.AutoSize;dataGridView1.RowHeadersHeightSizeMode=DataGridViewRowHeadersHeightSizeMode.DisableResizing;
3. 不允许用户调整单元格大小:csharpdataGridView1.ColumnHeadersHeightSizeMode=DataGridViewColumnHeadersHeightSizeMode.DisableResizing;dataGridView1.RowHeadersHeightSizeMode=DataGridViewRowHeadersHeightSizeMode.DisableResizing;
请注意,如果需要允许在特定方向上调整大小,但限制在另一个方向上,则需要手动编写代码来处理大小调整事件。
使用 winforms我想知道是否有某种方法可以防止垂直调整表单大小.我想允许用户在垂直方向上的所有方向上调整表单大小.另外我想允许在向上方向上垂直调整大小,但不允许向下调整大小.我尝试使用maximumsize将其设置为:Me.maximumsize = new size(0,me.height)
我将宽度设置为0,因为我想允许用户更改表单宽度.
不幸的是它不起作用.
有任何想法吗?
您必须小心允许表单在启动时调整自身大小.必须适应具有不同视频DPI设置或不同系统字体大小的计算机上所需的扩展.或者用户覆盖改变了标题栏的高度.所有这些都在Load事件运行时进行了整理.从而:protected override void OnLoad(EventArgs e) { Screen scr = Screen.FromControl(this); this.MinimumSize = new Size(this.MinimumSize.Width, this.Height); this.MaximumSize = new Size(scr.WorkingArea.Width, this.Height); }
您应该做的下一件事是当用户在窗口边缘移动光标时,修复光标的行为,允许垂直调整窗口大小.这有点难看,您必须使用WndProc捕获WM_NCHITTEST消息并更改消息返回值:
protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == 0x84) { // Trap WM_NCHITTEST switch (m.Result.ToInt32()) { case 12: m.Result = (IntPtr)2; break; // HTTOP to HTCAPTION case 13: m.Result = (IntPtr)10; break; // etc.. case 14: m.Result = (IntPtr)11; break; case 15: m.Result = (IntPtr)1; break; case 16: m.Result = (IntPtr)10; break; case 17: m.Result = (IntPtr)11; break; } } }

