You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm中自定义UserControl运行时未显示的问题求助

日历空白控件不显示问题排查

我正在开发项目的日历功能,创建了空白UserControl(UserControlBlank)用于表示每周的空白日期,该控件样式如下:
自定义空白UserControl样式

运行代码后,窗体未出现任何预期变化,理想的日历控件显示效果应为:
预期日历控件显示效果

但实际运行时,窗体上完全看不到这些临时控件:
实际运行无控件效果

请问该问题的原因可能是什么?

以下是我的代码:

private void displayDays()
{
    DateTime now = DateTime.Now;

    // 获取当月第一天
    DateTime startofthemonth = new DateTime(now.Year, now.Month, 1);

    // 获取当月总天数
    int day = DateTime.DaysInMonth(now.Year, now.Month);

    // 将当月第一天转换为星期对应的整数
    int dayoftheweek = Convert.ToInt32(startofthemonth.DayOfWeek.ToString("d"));

    // 从项目>添加用户控件创建的空白用户控件
    for(int i = 1; i < dayoftheweek; i++)
    {
        UserControlBlank ucblank = new UserControlBlank();
        // daycontainer是flowLayoutPanel
        daycontainer.Controls.Add(ucblank);
    }
}

可能的原因排查

  • displayDays方法未执行:检查窗体初始化(如Load事件)逻辑中是否调用了该方法,若代码根本没运行,自然不会添加控件。
  • daycontainer引用异常:确认daycontainer这个FlowLayoutPanel已正确添加到窗体,且代码中变量名无拼写错误,避免出现空引用。
  • UserControlBlank尺寸未设置:若空白控件的宽高为0,即使添加到容器也无法显示。打开UserControl设计视图,将Size设置为合适值(例如80×80)。
  • 周日起始的循环逻辑问题:DayOfWeek.ToString("d")中周日对应数值0,如果当月第一天是周日,dayoftheweek等于0,循环条件i < 0不成立,不会创建任何控件。可调整循环为for(int i = 0; i < dayoftheweek; i++),或单独处理周日的情况。
  • FlowLayoutPanel布局属性错误:检查daycontainer的FlowDirection(流动方向)、WrapContents(自动换行)属性,若布局设置不合理,控件可能被挤出可视区域。
  • 控件被遮挡:确认窗体上没有其他控件覆盖在daycontainer上方,导致添加的UserControl无法被看到。

内容的提问来源于stack exchange,提问作者Ece

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:02:20