C# - 两种形式的控制相同?

时间:2009-11-11 11:19:33

标签: c# forms singleton

我扩展了一个PictureBox并创建了一个单例。

是否可以在同一时间以两种不同的形式显示PictureBox控件的相同实例?

提前致谢。

4 个答案:

答案 0 :(得分:7)

否 - 控件只有一个parent control

答案 1 :(得分:3)

当然不是。每个Control都有Parent属性(底层窗口有父窗口)。控制必须与其父级进行通信。

话虽如此,如果你需要不同形式的ImageControls来显示相同​​的图像,这就是你可以做的。

方法A

1)在您的应用程序中创建这些图片框的(全局)列表。

class Globals //or whatever
{
  public static List<PictureBox> allBoxes=new List<PictureBox> ();

2)在表单创建时,将每个PictureBox添加到此列表中。

 foreach (Control c in Controls)
 {
   PictureBox pb = c as PictureBox;
   if (pb != null) Globals.allBoxes.Add(pb);
 }

3)当您需要更改图像时,请遍历此列表:

foreach (PictureBox p in Globals.allBoxes)
{
  p.Image=myImage;
}

我测试了一下,似乎你不需要克隆图像。


方法B

1)在您的应用程序中选择一个“主”PictureBox。 2)子类PictureBox,这样只要设置了Image属性就会触发事件ImageChanged(this thread中的一些代码示例) 3)在具有PictureBoxes的每个其他表单上,向该“主盒”的ImageChanged事件添加一个事件处理程序(masterBox.OnImageChanged + = new EventHandler(ImageChanged); 4)在处理程序中更改所有图像

我更喜欢方法A.

答案 2 :(得分:2)

我猜你想要在两个图片盒中显示相同的图片?请查看帮助文件(特别感兴趣的是注释部分)。

PictureBox help

  

说明

     

通常PictureBox用于   显示位图中的图形,   图元文件,图标,JPEG,GIF或PNG   文件。

     

将Image属性设置为Image   你想要在设计上展示   时间或运行时间。您可以   或者指定图像   设置ImageLocation属性和   使用。同步加载图像   加载方法或异步使用   LoadAsync方法。 NoteNote:

     

如果您想使用相同的图像   多个PictureBox控件,创建一个   克隆每个图像   图片框即可。访问相同的图像   从多个控件导致   发生例外。

答案 3 :(得分:0)

如果您尝试在每个表单上显示徽标,那么我将子类化Picturebox并将图像加载到其中。没有单身,没有魔法。

但请注意:您必须为每个PictureBox加载图像。来自MSDN:

http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.image.aspx

  

Image属性设置为Image   显示。你可以这样做   设计时间或运行时间。

     

注意:如果你想使用相同的   多个PictureBox控件中的图像,   为每个人创建一个图像的克隆   图片框。访问相同的图像   从多个控件导致   发生例外。