Winforms c# 从弹出窗体更改父窗体的背景图像
Winforms c# Changing background Image of Parent form from popup form
我有两种形式 a 和 b。表单 a 是主表单,在其按钮单击事件之一上,表单 b 显示为一个小 window。在弹出窗口(表格 b)中,我可以选择 select 图片。我需要做的是当我点击弹出窗口(表单 b)的保存按钮时,表单 a(主表单的)背景图像应该设置为图像 selected via popup form (b).
我尝试了以下代码,但 this.Parent、this.Owner 弹出表单 (b) 都返回空值。我已将表格 a 指定为 MDI。
this.Owner.BackgroundImage = pictureBoxBackground.Image;
this.Parent.BackgroundImage = pictureBoxBackground.Image;
我会做的是在表格 b:
中有一个像这样的 public 图像 属性
private Image image;
public Image SelectedImage
{
get
{
return image;
}
}
然后我会添加一个 button_Click 事件(或任何您用来确认选择的事件)。此事件将关闭表单并设置 return 图像。
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;
}
如果您希望弹出窗口作为对话框弹出,并且 return 图像,您可以将图像放在 属性 中。示例:
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;}
}
如果您希望弹出窗口作为常规打开 window 并且能够同时使用父窗口,则需要使用事件,更多信息 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; }
}
我有两种形式 a 和 b。表单 a 是主表单,在其按钮单击事件之一上,表单 b 显示为一个小 window。在弹出窗口(表格 b)中,我可以选择 select 图片。我需要做的是当我点击弹出窗口(表单 b)的保存按钮时,表单 a(主表单的)背景图像应该设置为图像 selected via popup form (b).
我尝试了以下代码,但 this.Parent、this.Owner 弹出表单 (b) 都返回空值。我已将表格 a 指定为 MDI。
this.Owner.BackgroundImage = pictureBoxBackground.Image;
this.Parent.BackgroundImage = pictureBoxBackground.Image;
我会做的是在表格 b:
中有一个像这样的 public 图像 属性private Image image;
public Image SelectedImage
{
get
{
return image;
}
}
然后我会添加一个 button_Click 事件(或任何您用来确认选择的事件)。此事件将关闭表单并设置 return 图像。
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;
}
如果您希望弹出窗口作为对话框弹出,并且 return 图像,您可以将图像放在 属性 中。示例:
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;}
}
如果您希望弹出窗口作为常规打开 window 并且能够同时使用父窗口,则需要使用事件,更多信息 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; }
}