2013-04-20 6 views
0

Я хочу расширить панель, и я хочу добавить некоторые элементы управления этому классу. Но я не знаю, куда поместить код, если я поместил его в конструктор, это не сработает. См. Пример кода:Начальный элемент управления не отображается

class ExPanel : Panel { 
    public Image image { 
     get; 
     set; 
    } 

    public ExPanel() { 
     // if I put the addPic method here, the picture will not be showed 
    } 

    private void addPic() { 
     PictureBox pic = new PictureBox(); 
     pic.Top = 10; pic.Left = 10; 
     pic.Width = 100; 
     pic.Height = 100; 
     if (this.image != null) pic.Image = this.image; 
     this.Controls.Add(pic); 
    } 
} 

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

+0

Попробуйте добавить этот вызов в 'InitializeComponent()' метода формы. – HuorSwords

+0

Вы говорите: «картина не будет показана». Это потому, что вы просто создаете новый PictureBox, я не вижу никакого кода, который помещает изображение в него. – raven

+0

@raven: Я имею в виду, что картинка не будет отображаться, я установил обратный цвет в синий – SmartGoat

ответ

0

Свойство вашего изображения ничего не делает. Попробуйте это:

using System.Drawing; 
using System.Windows.Forms; 

public class ExPanel : Panel 
{ 
    PictureBox pic = new PictureBox(); 

    public Image image 
    { 
     get { return pic.Image; } 
     set { pic.Image = value; } 
    } 

    public ExPanel() 
    { 
     addPic(); 
    } 

    private void addPic() 
    { 
     pic.Top = 10; pic.Left = 10; 
     pic.Width = 100; 
     pic.Height = 100; 
     pic.BackColor = Color.Blue; 
     if (this.image != null) pic.Image = this.image; 
     this.Controls.Add(pic); 
    } 
} 

Использование:

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      var foo = new ExPanel(); 

      Controls.Add(foo); 
      foo.image = System.Drawing.Image.FromFile(@"C:\foo.jpg"); 
      foo.Refresh(); 
     } 
    } 
} 
+0

Ну, в моем отредактированном примере я удалил строку 'pic.BackColor = Color.Blue;'. Он может работать с цветом, но изображение - это разница – SmartGoat

+0

@SmartGoat: ваше свойство изображения ничего не делает. См. Мое редактирование выше. – raven

+0

, если я добавлю изображение через свойства во время разработки. Это не будет работать. Какое событие вызывается при изменении изображения в свойствах. Это то, что я нахожу. – SmartGoat

Смежные вопросы