表格的宽度不能小于 140 像素。为啥?

Posted

技术标签:

【中文标题】表格的宽度不能小于 140 像素。为啥?【英文标题】:Width of the form can not be less than 140 pixels. Why?表格的宽度不能小于 140 像素。为什么? 【发布时间】:2013-09-01 03:37:00 【问题描述】:

我在 Visual Studio 2012 中创建了默认的 Windows 窗体应用程序项目。当我运行程序时,我看到窗体的宽度不能小于 140 像素。为什么?以及如何克服这个奇怪的限制?

【问题讨论】:

查看表单设计器属性窗口中的MinimumSize属性值 @Steve MinimumSize = 0; 0; 【参考方案1】:

用户将无法使用窗口顶部的最小化、最大化和关闭按钮。我不相信你可以用 Sizable FormBorderStyle 改变这种行为。这是一个可用性问题。

如果您删除边框,例如通过将其设置为None,您可以通过执行以编程方式将其设置为您想要的任何内容:

form.Width = [...];

您可以使用边框类型调整更多表单的大小:None、FixedToolWindow 和 SizableToolWindow。 ToolWindows 也不会让你低于一定数量,但 None 会让你做任何超过 2px 的事情。您可以将其设置为低于该值的某个值,而不会出现异常,但它不会做任何事情。

【讨论】:

在我的程序中,窗口的最小化、最大化和关闭按钮并不总是需要的,所以由于窗体的宽度小而看不到也没关系。但我还需要该用户能够更改将鼠标光标悬停在边缘的表单的大小。但是如果 FormBorderStyle 设置为 None,这是不可能的... 一个 SizableToolWindow 可以让你下降到大约 20 像素左右。够了吗? 对,对,对不起。这是一个艰难的。 I found this for you!如果有帮助请告诉我? “但没有人会让你做任何超过 2px 的事情”......不是真的。我有一个没有边框的应用程序,但它不允许小于 139x39 的尺寸,至少除非我设置 Form.MinimumSize = new Size(1,1)【参考方案2】:

我从不使用 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;

【讨论】:

【参考方案3】:

我正在寻找解决方案,但 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();

【讨论】:

感谢您提供比所选解决方案更好的解决方案。最小尺寸有效。 这个方案(MinimumSize = new Size(1,1))是最简单可靠的。 在这个问题上挣扎了很久之后,我终于可以用这个答案来解决它了。【参考方案4】:

试试这个。 自动调整大小 AutosizeMode growOnly FormBorderStyle SizableToolWindow

【讨论】:

以上是关于表格的宽度不能小于 140 像素。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UITableViewCell 宽度小于 UITableView 宽度

html表格(table)常用属性

VueJS - 在 ag-grid-vue 中将列/表格调整到屏幕的任何宽度

媒体查询响应式表格设计不响应移动设备

表格标签

为啥 Twitter Bootstrap 表格总是有 100% 的宽度?