Winforms c#从弹出表单更改父表单的背景图像

Posted

技术标签:

【中文标题】Winforms c#从弹出表单更改父表单的背景图像【英文标题】:Winforms c# Changing background Image of Parent form from popup form 【发布时间】:2015-11-05 12:35:29 【问题描述】:

我有两种形式 a 和 b。表单 a 是主表单,在其中一个按钮单击事件表单 b 上显示为一个小窗口。在弹出窗口(表单 b)上,我有一个选择图像的选项。我需要做的是,当我点击弹出(表单 b)的保存按钮时,表单(主表单)的背景图像应设置为通过弹出表单(b)选择的图像。

我尝试了以下代码,但 this.Parent、this.Owner 都为弹出表单 (b) 返回 null。我已将表格 a 指定为 MDI。

this.Owner.BackgroundImage = pictureBoxBackground.Image;
this.Parent.BackgroundImage = pictureBoxBackground.Image;

【问题讨论】:

【参考方案1】:

我要做的是在表单 b 中拥有一个像这样的公共 Image 属性:

private Image image;
public Image SelectedImage

    get
    
        return image;
    

然后我会添加一个 button_Click 事件(或任何你用来确认选择的事件)。此事件将关闭表单并设置返回图像。

private void Button_Click(object sender, EventArgs e)

    image = [Whatever Image variable that you want to return];
    Close();

使 FormB 看起来像这样。

public class FormB : Form

    //[...]Stuff
    private Image image;
    public Image SelectedImage
    
        get
        
            return image;
        
    
    private void Button_Click(object sender, EventArgs e)
    
        image = [Whatever Image variable that you want to return];
        Close();
    

最后,将其用于 FormA 的背景图像。只需执行以下步骤。

public void ChangeBackground()

    FormB b = new FormB();
    b.ShowDialog();
    this.BackgroundImage = b.SelectedImage;

【讨论】:

不错,但OP没有具体说明表单B作为模式对话框打开,并且按钮应该关闭表单。即使是这种情况,良好的做法也需要在执行一些发布操作之前检查 ShowDialog 结果是否确定。 我知道,我只是认为我会留下模棱两可的空间,因为这个人没有留下太多关于他们的具体代码和使用的细节。【参考方案2】:

如果您希望弹出窗口作为对话框弹出并返回图像,您可以将图像放置在属性中。示例:

public class Parent : Form

     var popup = new Popup();
     var result = popup.ShowDialog();
     if(result == DialogResult.OK)
     
        this.BackgroundImage = popup.Image;
     


public class Popup : Form

    private void SelectImage()
    
        Image = pictureBoxBackground.Image;
    

    public string Image get;set;

如果您希望弹出窗口作为常规窗口打开并能够同时使用父窗口,则需要使用事件,更多信息here

public class Parent : Form

     var popup = new Popup();
     popup.BackgroundImageChanged += (sender, args) => this.BackgroundImage = args.Image;
     //...


public class Popup : Form

    public event EventHandler<ImageChangedEventArgs> BackgroundImageChanged;

    private void SelectImage()
    
        // ...
        OnBackgroundImageChanged(pictureBoxBackground.Image);
    

    private void OnBackgroundImageChanged(string image)
    
        if(BackgroundImageChanged != null)
        
            var e = new ImageChangedEventArgs(image);
            BackgroundImageChanged(this, e);
        
    


public class ImageChangedEventArgs : EventArgs

    public ImageChangedEventArgs(string image)   
    
        Image = image;
    
    public string Image  get; private set; 

【讨论】:

和我的疑似相似,嗯。 哈哈,是的,假设表单是模态的,这是显而易见的方法:) 不够快 谢谢@Rariolu & frich,这成功了。我只能将一个标记为答案,所以标记最先出现的那个:)

以上是关于Winforms c#从弹出表单更改父表单的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

layui提交弹出页面的form表单

magnific popup:以编程方式将内容从弹出表单更改为模态微调器,然后返回表单

根据表单大小设置 splitContainer 属性大小 C# WinForms

如何在 C# Winforms 表单之间转换?

Winforms C#在表单之间传递变量[重复]

在最小化服务器-客户端行程的同时从弹出窗口更新 TreeView 节点