小编Jam*_*mes的帖子

DataGridView 始终使用 AutoSizeColumnsMode=Fill 显示 VerticalScrollBar

我有一个包含 3 个垂直堆叠的 DataGridView 控件的表单。所有那里的网格都具有相同列宽的相同列。所有 3 个网格都有 AutoSizeColumnsMode=Fill 使列填充网格的整个宽度。因此,所有列在所有网格上都相互对齐。

当某些网格的行数超过适合的行数而其他网格的行数不适合时,就会出现我的问题。这会导致某些网格具有垂直滚动条。当滚动条显示时,它会导致列允许的空间缩小滚动条的宽度。因为我使用 AutoSizeColumnsMode=Fill 它导致列不再在网格之间排列。

这是我得到的。正如你所看到的,第一个网格有更多的 3 行适合,所以有一个滚动条。第二个和第三个网格只有 3 行,因此没有滚动条。第二个和第三个网格中的列对齐,但它们不与第一个网格对齐。

在此处输入图片说明

为了解决这个问题,我想强制垂直滚动条始终显示,即使没有滚动。

我在网上做了一些搜索,找到了一个几乎有效的解决方案。

public class CustomDataGridView : DataGridView
{
    private const int BORDERWIDTH = 2;

    public CustomDataGridView()
    {
        VerticalScrollBar.Visible = true;
        VerticalScrollBar.VisibleChanged += VerticalScrollBarOnVisibleChanged;
        ClientSize = new Size(ClientSize.Width - 21, ClientSize.Height);
    }

    private void VerticalScrollBarOnVisibleChanged(object sender, EventArgs eventArgs)
    {
        if (!VerticalScrollBar.Visible)
        {
            int width = VerticalScrollBar.Width;

            VerticalScrollBar.Location =
                new Point(ClientRectangle.Width - width - BORDERWIDTH, 1);

            VerticalScrollBar.Size =
                new Size(width, ClientRectangle.Height - BORDERWIDTH);


            ClientSize = …
Run Code Online (Sandbox Code Playgroud)

c# datagridview winforms

5
推荐指数
0
解决办法
1772
查看次数

DateTime.TryParse 成功解析一些数字

将字符串解析为日期时遇到意外问题。

DateTime dt;
bool parsed = DateTime.TryParse("119.08", out dt); 
Run Code Online (Sandbox Code Playgroud)

运行以上代码后,parsed结果为真且dt日期为8/1/0119。为什么这个值会解析为日期?TryParse 存在重载,它采用 IFormatProvider 和 DateTimeStyles。可以用这个来解决问题吗?

c#

3
推荐指数
1
解决办法
1350
查看次数

标签 统计

c# ×2

datagridview ×1

winforms ×1