保持图像的形式

2023-12-29

我做了2份表格。 Form2 有设置背景图像的按钮。我懂了 :

this.BackgroundImage = new Bitmap(Properties.Resources._1334821694552, new Size(800, 500));
//_1334821694552 is name of the image

如何通过单击按钮来更改所有表单的背景,并且在选择另一张图片之前将保持这种状态?


如果我理解正确的话,你有一个表格form2其中包含用于更改表单上的背景图像的按钮form1.

我想知道你为什么使用this.BackgroundImage in form2改变背景图像?这会改变背景图像form2, 不开form1.

你实际上应该传递一个引用form1 to form2然后使用form1.BackgroundImage = ....

这有点模糊 - 我建议你编辑你的问题以实际添加一些关于之间关系的信息form1 and form2真的是。


首先,您需要传递一个实例form1 to form2。这可以在构造函数中完成,例如,假设form2打开于form1。例如这样:

form2中的代码

// In form2, there's a member variable that holds the form1 reference
private form1 m_form1Instance;

// The constructor of form2 could look like this
public form2(form1 form1Instance)
{
    ...

    // Remember the form1-instance
    m_form1Instance = form1Instance;
}

// When a button is clicked in form2, the background image in form1 is changed
private void button1_Click(object sender, EventArgs e)
{
    m_form1Instance.BackgroundImage = ...;
}

代码在form1中

// When form2 is opened, pass "this" to the constructor. The following
// sample opens form2 as a modal dialog
using (form2 f2 = new form2(this))
{
    f2.ShowDialog(this);
}

这应该改变背景图像form1,而不是在form2.

如果您想保存跨会话显示的背景图像(即您希望在程序重新启动时显示相同的背景图像),请使用 Wink 的答案。这会将使用的背景图像保存到设置中。


好的,看来您想全局更改应用程序中所有表单上的背景图像。你必须采取除我上面描述的方法之外的另一种方法。

我要做的是创建一个单例类来描述当前的背景图像,并具有在图像更改时通知订阅者的事件。像这样,例如:

public class BackgroundImageHolder
{
    private static BackgroundImageHolder m_instance;
    private Bitmap m_backgroundImage;

    public event EventHandler BackgroundImageChanged;

    private BackgroundImageHolder() { }

    public static BackgroundImageHolder Instance
    {
        get
        {
            if (m_instance == null) m_instance = new BackgroundImageHolder();
            return m_instance;
        }
    }

    public Bitmap BackgroundImage
    {
        get { return m_backgroundImage; }
        set {
           m_backgroundImage = value;
           OnBackgroundImageChanged();
        }
    }

    protected void OnBackgroundImageChanged()
    {
        if (BackgroundImageChanged != null)
            BackgroundImageChanged(this, EventArgs.Empty);
    }
}

每当您打开表单(即在构造函数中)时,您都会查询BackgroundImageHolder为当前图像并将其设置为您的表单:

this.BackgroundImage = BackgroundImageHolder.Instance.BackgroundImage;

然后您订阅通知,以便表单可以在必要时更改背景图像:

BackgroundImageHolder.Instance.BackgroundImageChanged += BackgroundImageHolder_Changed;

您需要实现事件处理程序:

private void BackgroundImageHolder_Changed(object sender, EventArgs e)
{
    this.BackgroundImage = BackgroundImageHolder.Instance.BackgroundImage;
}

然后,要全局改变图像,只需要告诉BackgroundImageHolder关于新图像:

BackgroundImageHolder.Instance.BackgroundImage = ...;

Done.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保持图像的形式 的相关文章

  • C#:迭代数据表:Rows、Select() 或 AsEnumerable()

    foreach DataRow row in myDataTable Select foreach DataRow row in myDataTable AsEnumerable foreach DataRow row in myDataT
  • 使用脚本取消设置 PDF 字体

    我正在使用 xhtml2pdf 库自动创建 PDF 几个月前我有过这个问题 https stackoverflow com questions 25203219 xhtml2pdf doesnt embed helvetica 库嵌入了我没
  • C# 泛型方法,new() 构造函数约束中的类型参数

    有没有办法创建一个使用的通用方法new 要求类具有特定类型的构造函数属性的约束 例如 我有以下代码 public T MyGenericMethod
  • 选择数据结构

    根据需求使用不同的数据结构 但我如何知道应该使用哪种数据结构 我只是想知道如何选择合适的数据结构 谢谢 此流程图适用于 C 中的 STL 但您可以用 C 实现 STL 容器支持的任何数据结构 列表是一个链接列表 Vector是一个动态数组
  • 如何在 c#.net 中将十进制转换为 ASCII?

    谁能帮助我如何使用 C net 将十进制转换为 ASCII 当我在文本框 1 中输入小数时 单击 转换 按钮后 结果将显示在文本框 2 中 我的问题是如何将十进制转换为 ASCII 的代码 这个怎么做 这是我在网上找到的一个简单的解决方案
  • 如何将流写入内存流?

    public void doprocess TcpClient client MemoryStream ms new MemoryStream Stream clStream client GetStream byte buffer 1 n
  • 类内枚举前向声明是否可能? [复制]

    这个问题在这里已经有答案了 我知道在 C 11 中可以转发声明枚举类型 如果提供了存储类型 例如 enum E short void foo E e enum E short VALUE 1 VALUE 2 但我想转发声明一个类中定义的枚举
  • 如何使用OpenCV的归一化相关性?

    如何使用 OpenCV 的归一化相关性 有人可以提供代码示例吗 我的问题 我有一个螺丝头图像 需要找到螺丝的中心 所以我正在考虑使用 OpenCV 相关性 这是一个好主意吗 您可以在下面的链接下找到示例图像 http imageshack
  • 在 C++ 中将注册表值设置为宽字符串 (WCHAR)

    我正在尝试在 C 中向注册表添加宽字符串 问题是RegSetValueEx 函数不支持宽字符 仅支持BYTE type BYTE unsigned char WCHAR myPath C exe RegSetValueExA HKEY CU
  • 错误:LNK1120:5 个未解析的外部

    我试图在我的帖子中获取有关已安装应用程序的详细信息 而且 我收到以下错误 Code include
  • 在 C# 中创建新 List 的这三种方式有什么区别?

    这三种创建新的方式有什么区别List
  • elmah定制提供商及暴露事件

    我想知道如何创建自定义提供程序来存储错误日志 例如 Windows 事件查看器的提供者 如果到目前为止不可能 我还想知道是否有任何可以覆盖的公开事件 以便我可以注入我的代码 获取异常 做任何我想做的事情 我知道 Global asax 中有
  • 启动离线 ClickOnce 应用程序并等待退出

    我已经部署了 ClickOnce Windows 窗体应用程序 应用程序 A 另一个应用程序 应用程序 B 以文件名作为参数启动应用程序 A 我用这段代码做到这一点 var basePath Environment GetFolderPat
  • 无锁“如果不为零则递减”

    我目前正在用 C 重新发明线程池的轮子 我已经消除了代码中的几乎所有锁 除了以下构造的多个实例之外 std atomic size t counter void produce counter void try consume if cou
  • 使用迭代器与索引访问向量元素有什么区别?

    使用迭代器与索引访问向量元素有什么优点 为什么迭代器比索引更好 在索引不可用的情况下 例如 std list 对于 例子 在通用函数接受迭代器的情况下 叫做 编写应该使用的函数模板时 不止一种容器类型 他们的存在是为了创造均匀性在所有容器和
  • Asp.net MVC 2 缓存

    我目前正在使用 c 中的 asp net mvc 2 开发一个网站 我从未使用过 MVC 中的缓存功能 并且想将其应用到用户个人资料页面 此页面上的内容很少更改 唯一需要实时的部分是用户最近发布的帖子列表 我使用linq to sql从数据
  • C++ 流到内存

    我怎样才能创造std ostream and std istream对象指向我分配和管理的一块内存 我不希望流释放我的内存 我正在考虑使用rdbuf gt pubsetbuf 修改其他流之一 例如sstringstream 不过我认为str
  • 从枚举获取 DescriptionAttribute [重复]

    这个问题在这里已经有答案了 我有一个枚举 用于查找协调字符串值 其中一个枚举中有一个空格 因此我尝试使用描述属性来查找该值 在找到 DescriptionAttribute 后 我在转换回公共类时遇到问题 public class Addr
  • 反序列化 jQuery 序列化表单

    我正在尝试将表单输入传递到 WebMethod 中并执行某些操作 我用了jQuery 序列化 http api jquery com serialize
  • 使用本机 Win32 读取“C”中的文本文件(Unicode)

    我有一个使用 CreateFile 和 WriteFile 创建的面向行的文本文件 Unicode 使用 ReadFile 以二进制流形式读取该文件非常简单 但需要额外的低级处理才能将其分成几行 是否有 Win32 函数可以为我执行此操作

随机推荐