如何使用户控件在面板中滚动

本文关键字:滚动 何使 用户 控件 | 更新日期: 2023-09-27 18:30:13

Hi我创建了一个名为WOView的用户控件,它有一个带有标签和数据网格的面板,我希望使用它来显示基于查询的数据。控件是相当大的宽度960长度1037。我已将面板设置为自动滚动=true。然后我创建了一个面板宽度为1000,长度为400的表单,还有一个按钮,它在表单中,但不在面板上。表单面板未停靠,并且自动滚动=true。

我把按钮编码为

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

当按下按钮时,用户控件会出现在面板中,但它在第n行中被切断,面板上的滚动条也不允许我查看控件的其余部分。如何使滚动条显示在窗体面板或用户控件本身中?

如何使用户控件在面板中滚动

请忽略我只是设置了位置,而不是dock样式,这已经奏效了。

    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;
    }

有一个解决方法,但它是一个技巧:首先创建一个类型为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是否为true,然后在窗体调整大小时将uc宽度设置为可滚动面板宽度:

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