2015-02-12 4 views
1
//when button is clicked 
this.BackgroundImage = new Bitmap(@"file_location"); 

Есть в любом случае я могу сделать класс Base и изменить расположение файла дляКак изменить фон на все формы из другой формы

this.BackgroundImage = new Bitmap(@"file_location"); 

на формах я буду открытием после того, как таким образом, чтобы в зависимости от того, какое изображение было выбрано, все формы будут иметь одно и то же фоновое изображение.

+0

Почему не просто петля всех форм и установить свой фон надлежащим образом? – HimBromBeere

+0

Как насчет того, чтобы вы инициализировали все свои формы с указанным изображением и обновили их, используя 'foreach Form f в Application.OpenForms {f.BackgroundImage = ...}'? –

ответ

2

, если вы хотите изменить BackgroundImage для всех форм в приложении после нажатия кнопки , попробуйте следующее:

public class BaseForm: Form 
{ 
    private static Bitmap _skin = new Bitmap(@"default"); 
    // base Form stores static image which should be set as background for derived forms 
    public static Bitmap Skin 
    { 
    get { return _skin; } 
    set { _skin = value; OnSkinChanged(EventArgs.Empty); } 
    } 

    // when current image changes, event is raised 
    static event EventHandler SkinChanged; 

    static void OnSkinChanged(EventArgs e) 
    { 
    if (SkinChanged!=null) 
     SkinChanged(null, e); 
    } 

    public BaseForm() 
    { 
    InitializeComponent(); 

    // all derived forms are subscribed to event of changing background image 
    // they update own background image 
    BaseForm.SkinChanged += SetSkinHandler; 

    // set background when form created 
    if (!DesignMode) // do not change in design mode (optional check) 
     SetSkin();  
    } 

    private void SetSkinHandler(object sender, EventArgs e) 
    { 
    SetSkin(); 
    } 

    private void SetSkin() 
    { 
    this.BackgroundImage = BaseForm.Skin; 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      BaseForm.SkinChanged -= SetSkinHandler; 
     } 
     // default 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 
} 

набор изображений в кнопке Click обработчике (somethere из меню настроек)

private void SkinButtonClick(object sender, EventArgs e) 
{ 
    BaseForm.Skin = new Bitmap(@"file_location"); 
} 
0

Возможное решение: сохранить цвет или путь к изображению в некотором значении. И когда открывается какая-то новая форма, передайте это значение как параметр в его конструкторе. И после инициализации установить BackgroundImage.

В первой форме:

var backGround = String.Empty; 
private void SelectBackGround(){ 
//some stuff 
    backGround = imgPath; 
} 

protected void btn_click(...){ 
    var form = new Form2(backGround); 
    form.Show(); 
} 

В Form2:

public Form2(string img){ 
    //init controls 
    this.BackgroundImage = new Bitmap(img); 
} 

Что-то вроде этого ...

+0

Если он действительно использует это на протяжении всего своего приложения, мне нравится его идея подклассификации System.Windows.Form и лучше использовать его собственный класс как базовый класс. Однако я не совсем уверен, что он спрашивает, так как он в основном разместил это решение в своем вопросе. –

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