Добавление пользовательских компонентов программно во время выполнения - PullRequest
0 голосов
/ 11 июля 2011

У меня проблема с использованием пользовательских компонентов во время выполнения.У меня есть этот пользовательский компонент FlowLayoutPanel:

 public partial class UserControl1 : System.Windows.Forms.FlowLayoutPanel
{

    [Browsable(false)]
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x20;
            return cp;
        }
    }
    protected override void OnPaintBackground(PaintEventArgs e){}

    public UserControl1(){}
}

ничего сложного в этом нет.Все, что он делает, это делает фон прозрачным.

Я добавил этот компонент в свою панель инструментов, используя его dll, и он прекрасно работает, когда я перетаскиваю его в форму.Проблема в том, что я не могу добавить его программно во время выполнения.

Когда я запускаю приведенный ниже код, он должен нарисовать картинку поверх моего пользовательского FlowLayoutControl.Но, к сожалению, он ничего не делает.

Пользовательский компонент находится в пространстве имен WindowsFormsControlLibrary1.

 namespace MyFilm_v2._0
 {
  public partial class Form1 : Form
  {

    public Form1()
    {
        InitializeComponent();

        UserControl1 test = new UserControl1();
        test.BackColor = Color.Transparent;
        test.Location = new Point(0, 110);
        test.Width = 660;
        test.Height = 478;

        PictureBox b = new PictureBox();
        b.Location = new Point(100, 100);
        b.Width = 320;
        b.Height = 475;
        b.Image = Properties.Resources.movie;
        this.Controls.Add(b);
        //this.customScrollbar1.Minimum = 0;
        //this.customScrollbar1.Maximum = test.DisplayRectangle.Height;
        //this.customScrollbar1.LargeChange = customScrollbar1.Maximum / customScrollbar1.Height + test.Height;
        //this.customScrollbar1.SmallChange = 15;//when click the arrows
        //this.customScrollbar1.Value = Math.Abs(test.AutoScrollPosition.Y);
    }

....

1 Ответ

2 голосов
/ 11 июля 2011

Вы добавляете picturebox к своим элементам управления тестами, но не добавляете тест к элементам управления форм

public Form1()
{
    InitializeComponent();

    UserControl1 test = new UserControl1();
    test.BackColor = Color.Transparent;
    test.Location = new Point(0, 110);
    test.Width = 660;
    test.Height = 478;

    PictureBox b = new PictureBox();
    b.Location = new Point(100, 100);
    b.Width = 320;
    b.Height = 475;
    b.Image = Properties.Resources.movie;
    test.Controls.Add(b);
    this.Controls.Add(test);//<- here
}
...