【发布时间】:2013-09-01 03:37:00
【问题描述】:
我在 Visual Studio 2012 中创建了默认的 Windows 窗体应用程序项目。当我运行程序时,我看到窗体的宽度不能小于 140 像素。为什么?以及如何克服这个奇怪的限制?
【问题讨论】:
-
查看表单设计器属性窗口中的MinimumSize属性值
-
@Steve MinimumSize = 0; 0;
我在 Visual Studio 2012 中创建了默认的 Windows 窗体应用程序项目。当我运行程序时,我看到窗体的宽度不能小于 140 像素。为什么?以及如何克服这个奇怪的限制?
【问题讨论】:
用户将无法使用窗口顶部的最小化、最大化和关闭按钮。我不相信你可以用 Sizable FormBorderStyle 改变这种行为。这是一个可用性问题。
如果您删除边框,例如通过将其设置为None,您可以通过执行以编程方式将其设置为您想要的任何内容:
form.Width = [...];
您可以使用边框类型调整更多表单的大小:None、FixedToolWindow 和 SizableToolWindow。 ToolWindows 也不会让你低于一定数量,但 None 会让你做任何超过 2px 的事情。您可以将其设置为低于该值的某个值,而不会出现异常,但它不会做任何事情。
【讨论】:
我从不使用 formborders.. 我总是喜欢使用 FormBorderstyle.None
要调整大小,您必须添加一些代码。
放一个pictureBox,在里面加个grip img,放在角落里。
public Form1()
{
InitializeComponent();
pictureBox1.MouseDown += new MouseEventHandler(Form1_MouseDown);
pictureBox1.MouseMove += new MouseEventHandler(Form1_MouseMove);
pictureBox1.MouseUp += new MouseEventHandler(Form1_MouseUp);
}
void Form1_MouseUp(object sender, MouseEventArgs e)
{
isHolding = false;
}
void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isHolding)
{
int diffX = this.Width - pictureBox1.Left;
int diffY = this.Height - pictureBox1.Top;
pictureBox1.Left += e.X - curX;
pictureBox1.Top += e.Y - curY;
this.Width = pictureBox1.Left + diffX;
this.Height = pictureBox1.Top + diffY;
}
}
void Form1_MouseDown(object sender, MouseEventArgs e)
{
isHolding = true;
curX = e.X;
curY = e.Y;
}
int curX = 0, curY = 0;
bool isHolding = false;
【讨论】:
我正在寻找解决方案,但 MinimumSize(0,0) 没有任何效果。想通了,将 MinimumSize 设置为 (1,1) 实际上解决了问题,并且在显示我的表单后,它的大小正确小于 140px。
(ListView)_csvLv 上的列点击事件应该触发一个弹出对话框:
var topAnchor = _csvLv.PointToScreen(new Point(
_csvLv
.Columns
.OfType<ColumnHeader>()
.Where(c => c.DisplayIndex < e.Column)
.Sum(c => c.Width),
0));
Left = topAnchor.X;
Top = topAnchor.Y;
MinimumSize = new Size(1,1);
ClientSize = new Size(_csvLv.Columns[e.Column].Width, 100);
ShowDialog();
【讨论】:
试试这个。 自动调整大小 AutosizeMode growOnly FormBorderStyle SizableToolWindow
【讨论】: