【问题标题】:How to make a user control scroll in a panel如何使用户控件在面板中滚动
【发布时间】:2022-03-05 03:07:44
【问题描述】:

您好,我创建了一个名为 WOView 的用户控件,它有一个带有标签和数据网格的面板,我希望使用它来显示基于查询的数据。该控件是相当大的宽度960 长度1037。我已将面板设置为Auto Scroll = true。然后,我创建了一个面板宽度为 1000 长度为 400 的表单,以及一个位于表单内但不在面板上的按钮。表单面板未停靠并且具有 auto scroll = true。

我将按钮编码如下

    private void button1_Click(object sender, EventArgs e)
    {
        var wov = new WOView();
        gradientPanel1.Controls.Add(wov);
        wov.Visible = true;
        wov.Dock = DockStyle.Fill;

    }

当按下按钮时,用户控件出现在面板中,但是它的长度被截断,并且面板上的滚动条不允许我查看控件的其余部分。如何让滚动条出现在表单面板或用户控件本身中?

【问题讨论】:

    标签: c# winforms user-controls


    【解决方案1】:

    请忽略我只是设置了位置而不是停靠样式,并且有效。

        private void button1_Click(object sender, EventArgs e)
        {
            var wov = new WOView();
            gradientPanel1.Controls.Add(wov);
            wov.Visible = true;
            wov.Location=new Point(0,0);
            //wov.Dock = DockStyle.Fill;
    
        }
    

    【讨论】:

    • 摆脱 Dock() 是关键。将 Dock 设置为 Fill 时,UserControl 将始终与 Panel 的大小匹配,因此不需要出现任何滚动条。
    【解决方案2】:

    有一个解决方法,但这是一个技巧: 首先创建一个bool类型的属性,名称为isResizeForUC

    public bool isResizeForUC { get; set; }
    

    之后添加用户控件的按钮单击处理程序并将isResizeForUC更改为true:

    isResizeForUC = true;
    

    然后您可以将用户控件添加到可滚动面板中

    MainPanle.Controls.Clear();
    MainPanle.Controls.Add(uc);
    

    事件点击按钮的最终代码是:

    private void createBarname_Click(object sender, EventArgs e)
    {
       isResizeForUC = true;
       MainPanle.Controls.Clear();
       MainPanle.Controls.Add(uc);
    }
    

    好的,现在转到可滚动面板的事件Resize 并检查 isResizeForUC 是否为真,然后在调整表单大小时将 uc 宽度设置为可滚动面板宽度:

    private void MainPanle_Resize(object sender, EventArgs e)
    {
          if (isResizeForUC)
          {
               uc.Width = MainPanle.Width;
          }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多