代码之家  ›  专栏  ›  技术社区  ›  thelost

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

  •  2
  • thelost  · 技术社区  · 15 年前

    我扩展了一个PictureBox并创建了一个Singleton。

    是否可以同时在两个不同的窗体上显示PictureBox控件的同一实例?

    事先谢谢。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Russell Troywest    15 年前

    我猜你想在两个图片框中显示相同的图片?查看帮助文件(特别注意注释部分)。

    PictureBox help

    评论

    通常,PictureBox用于 从位图显示图形, 元文件、图标、jpeg、gif或png 文件。

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

    如果要在 多个PictureBox控件, 创建一个 为每个映像克隆 图片框 . 访问同一图像 从多个控件导致 发生异常。

        2
  •  7
  •   Jon Skeet    15 年前

    不-控件只有一个 parent control .

        3
  •  3
  •   yu_sha    15 年前

    当然不是。每个控件都有父属性(基础窗口有父窗口)。控件必须与其父控件通信。

    尽管如此,如果您需要不同表单上的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)在应用程序中选择一个“主”图片框。 2)子类PictureBox,以便在设置Image属性时触发事件ImageChanged(在 this thread ) 3)在每个具有PictureBox的其他表单上,向“主框”的ImageChanged事件添加一个事件处理程序(MasterBox.OnImageChanged+=New EventHandler(ImageChanged)); 4)在处理程序中更改所有图像

    我更喜欢A路。

        4
  •  0
  •   Arthur    15 年前

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

    但是要小心:您必须为每个PictureBox加载图像。来自MSDN:

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

    图像属性设置为图像 显示。你也可以在 设计时间或运行时间。

    注意:如果您想使用相同的 多个PictureBox控件中的图像, 为每个 图片框。访问同一图像 从多个控件导致 发生异常。

    推荐文章